我有自定义bean,我在spring集成流程中使用它。它有一个方法,它将hashmap作为参数,并且它的值是动态设置的。我试图从有效负载头字段(iploc)设置值,但我无法实现。我尝试了一些拼写的组合,但它不起作用。有什么指针吗?
<int:transformer id="ws.transformer"
input-channel="ws.transformer.in" output-channel="ws.transformer.out">
<bean class="com.my.Mybean">
<property name="map">
<map>
<entry key="user">
<value>"admin"</value>
</entry>
<entry key="location">
<value>"headers['iploc']"</value>
</entry>
</map>
</property>
</bean>
</int:transformer>
我可以在服务激活器中设置值,但我正在尝试,如果我在SI配置中实现这一点。
答案 0 :(得分:5)
Spring Integration Transformer可以使用整个Message
(有效负载和标头),因此没有必要按属性传递标头值,因为变换器已经可以访问所有消息标头。
您的变换器bean定义应该只包含那些不是来自被转换的Message
的属性:
<int:transformer id="ws.transformer" input-channel="ws.transformer.in" output-channel="ws.transformer.out">
<bean class="com.my.MyTransformer">
<property name="user" value="admin"/>
</bean>
</int:transformer>
你的变压器方法:
@Transformer
OutgoingPayload transform(IncomingPayload payload, @Header("iploc") String iplocHeader) {
return doTransform(...);
}
或只是消费整个邮件:
Message<OutgoingPayload> transform(Message<IncomingPayload> message) {
final String ipLocHeaderValue = message.getHeaders.get("iploc", String.class);
return doTransform(...);
}
答案 1 :(得分:1)
在类似转换器中定义的bean将在启动时实例化,而不是每次收到消息时实例化。处理这样一个需求的正常方法是让一个无状态bean的方法在每次调用时接受头值。