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 整合的角度来看。
在 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 整合的角度来看。