【问题标题】:Spring Integration Java DSL - capture header to use in Enum.valueof()Spring Integration Java DSL - 捕获要在 Enum.valueof() 中使用的标头
【发布时间】:2015-09-08 14:21:52
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    你的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']") 尝试从 Spring Integration 的角度来看是没有意义的。

    【讨论】:

    • 你让我明白了:我确实是“游戏”新手。诚然,SpEL 位似乎很尴尬,即使在我没有经验的眼中也是如此。感谢您的提示;我会尽快处理它。
    • 我接受了您的回答,因为它足够合适并帮助我完成我的项目。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2015-11-30
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多