如何使用SPEL引用@GatewayHeader中参数的属性

时间:2016-08-12 13:56:12

标签: spring-integration spring-el spelevaluationexception

这应该是一个简单的问题,但我无法在线找到合适的文档。我想这样做:

@MessagingGateway(name = "redemptionGateway", defaultRequestChannel = Channels.GATEWAY_OUTPUT, defaultHeaders = @GatewayHeader(name = "orderId", expression = "#redemption.orderId"))
public interface RedemptionGateway {
    void create(TrivialRedemption redemption);
}

我显然使用错误的陈述来引用orderId的{​​{1}}成员:

org.springframework.expression.spel.SpelEvaluationException: EL1007E:(pos 0): Property or field 'orderId' cannot be found on null

1 个答案:

答案 0 :(得分:2)

行。看

@GatewayHeader(name = "orderId", expression = "#redemption.orderId")

此SpEL在运行时根据构建MessageHeaders的实际参数进行评估,以便发送目标Message

这就是它的样子:

private StandardEvaluationContext createMethodInvocationEvaluationContext(Object[] arguments) {
    StandardEvaluationContext context = ExpressionUtils.createStandardEvaluationContext(this.beanFactory);
    context.setVariable("args", arguments);

    context.setVariable("gatewayMethod", this.method);
    return context;
}

因此,EvaluationContext增加了两个变量argsgatewayMethod

如你所见,他们的名字没有任何参数。无论如何,这对所有JVM都有用吗?

您可以使用args

中的参数索引来实现目标
expression = "#args[0].orderId"