我正在尝试使用SpEL评估JMSHeader for Spring Integration消息,但它似乎总是评估为false,即使消息标题标记为真
<si:router expression="headers.jms_redelivered.equals(T(java.lang.Boolean).FALSE) ? 'channel1' : 'channel2' />
JMSXDeliveryCount=10, jms_redelivered=true
有人可以评论我在这里做错了吗?
由于
答案 0 :(得分:1)
适合我:
@Test
public void testRedeliveredHeaderWithSpEL() throws JMSException {
DefaultJmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
javax.jms.Message jmsMessage = new StubTextMessage() {
@Override
public boolean getJMSRedelivered() throws JMSException {
return true;
}
};
Map<String, Object> headers = mapper.toHeaders(jmsMessage);
assertNotNull(headers.get(JmsHeaders.REDELIVERED));
SpelExpressionParser parser = new SpelExpressionParser();
StandardEvaluationContext context = new StandardEvaluationContext();
context.addPropertyAccessor(new MapAccessor());
Expression expression =
parser.parseExpression("jms_redelivered.equals(T(java.lang.Boolean).FALSE) ? 'channel1' : 'channel2'");
assertEquals("channel2", expression.getValue(context, headers, String.class));
}
你真的应该确保在headers
之前不要丢失<router>
。
也许您在<transformer>
之前使用了一些<router>
,它会返回整个Message<?>
而不仅仅是payload
?