1

在 Spring Integration Java DSL 中使用 WSInboundGateway 时,有没有办法提取标头(其值)并使用它来填充枚举?

我已经尝试过了,但 SpEL 没有评估:

@Bean
public IntegrationFlow aFlow() {
    return IntegrationFlows.from(aWSInboundGateway())
            .transform(
                    new GenericTransformer<JAXBElement<SomeStruct>, SpecificEvent>() {
                        @Override
                        public SpecificEvent transform(JAXBElement<SomeStruct> payload) {
                            return new SpecificEvent(
                                    payload.getValue(), 
                                    Source.valueOf("headers['source']")
                            );
                        }
                    })
            .channel(someChannel())
            .get();
}
4

1 回答 1

2

你的GenericTransformerimpl 必须是这样的:

new GenericTransformer<Message<JAXBElement<SomeStruct>>, SpecificEvent>() {
   @Override
   public SpecificEvent transform(Message<JAXBElement<SomeStruct>> message) {
        return new SpecificEvent(
                       message.getPayload().getValue(), 
                       Source.valueOf(message.getHeaders().get("source", String.class))
                       );
   }
}

另一方面,您应该多阅读 Spring Integration Manual以了解 SpEL 在运行时的工作原理,并意识到Source.valueOf("headers['source']")从 Spring Integration 的角度来看,您的尝试是没有意义的。

于 2015-09-08T14:41:36.340 回答