在我的应用程序中,我想在多个<int:chain>
中重复使用同一消息转换器。
在这样的链中,我向不同的端点执行http请求,并且需要添加相同的基本身份验证标头。我只想声明一次添加标头的代码,即:
<int:header-enricher id="authHeaderAdder">
<int:header expression="'Basic ' + new String(T(java.util.Base64).encoder.encode(('${http.user}' + ':' + '${http.password}').bytes))"
name="Authorization"/>
</int:header-enricher>
然后我想在发出http请求之前将它与链中的ref
一起使用:
<int:chain input-channel="someHttpChain">
<int:transformer ref="authHeaderAdder"/>
<http:outbound-gateway.../>
<int:transformer ref="someResponseTransformer"/>
</int:chain>
问题是在启动应用程序时出现错误:
配置问题:顶级终结点元素:ID为'authHeaderAdder'的'int:header-enricher'
是必需的
如何在不编写任何Java代码和编写authHeaderAdder
的情况下重复使用<bean/>
?
答案 0 :(得分:2)
您肯定需要在该getenv('YOUR_VARIABLE_HERE');
上使用input-channel
,例如<int:header-enricher>
,但在input-channel="authChannel"
内使用<chain>
之类的东西会有所收获。就是这样:您正在重用同一个转换器,但是通过带有<int:gateway request-channel="authChannel"/>
的Spring Integration技巧。
这种方法很酷,您可以在MessageChannel
流中添加更多终结点,而无需在使用该authChannel
的原始流中进行任何更改。