Spring Integration Java DSL - 在Enum.valueof()中使用的捕获头

时间:2015-09-08 14:21:52

标签: java spring-integration spring-ws spring-dsl

在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();
}

1 个答案:

答案 0 :(得分:2)

您的GenericTransformer impl必须是这样的:

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']")尝试从春天开始没有意义整合视角。