如何在没有“输入通道”的情况下以XML声明可重用的转换器?

时间:2018-11-21 12:43:34

标签: spring-integration

在我的应用程序中,我想在多个<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/>

1 个答案:

答案 0 :(得分:2)

您肯定需要在该getenv('YOUR_VARIABLE_HERE'); 上使用input-channel,例如<int:header-enricher>,但在input-channel="authChannel"内使用<chain>之类的东西会有所收获。就是这样:您正在重用同一个转换器,但是通过带有<int:gateway request-channel="authChannel"/>的Spring Integration技巧。

这种方法很酷,您可以在MessageChannel流中添加更多终结点,而无需在使用该authChannel的原始流中进行任何更改。