用于标题评估的Spring Integration SpEL

时间:2014-09-15 11:09:19

标签: spring spring-integration

我正在尝试使用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

有人可以评论我在这里做错了吗?

由于

1 个答案:

答案 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