Spring 集成 Java DSL - 捕获 header 以在 Enum.valueof() 中使用

Spring Integration Java DSL - capture header to use in Enum.valueof()

在 Spring 集成 Java DSL 中使用 WSInboundGateway 时,有没有办法提取 header(它的值)并使用它来填充枚举?

我试过了,但 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();
}

你的 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 集成 Manual 以了解 SpEL 在运行时的工作原理,并意识到您的 Source.valueOf("headers['source']") 尝试只是行不通从 Spring 整合的角度来看。