我有一个可以多次重复使用的常用流程。所以,我为它定义了一个SI链,如下所示。
<int:chain id="addInfo" input-channel="addInfoChannel">
<int:header-enricher>
<int:header name="outgoingService" value="Retrieve" />
</int:header-enricher>
<int:gateway request-channel="common_Retrieve_Channel" />
<int-xml:xslt-transformer xsl-templates="addInfoXslTemplate">
<int-xml:xslt-param name="param1" expression="headers.param1" />
<int-xml:xslt-param name="param2" expression="headers.param2" />
</int-xml:xslt-transformer>
<int:header-enricher>
<int:header name="outgoingService" value="Add" overwrite="true" />
</int:header-enricher>
<int:gateway request-channel="common_Add_Channel" />
</int:chain>
如果 common_Retrieve_Channel 通道因SOAP错误而失败,则标头值(outgoingService)将丢失。 如果我在链外有标题扩充器,那么有效负载可用于payload.failedMessage.headers。 我不想在链外添加这个值,因为这个值会在链内变化来调用另一个服务。
通过以不同方式设置标题值(param1和param2),可以多次调用此链。
除了将网关提取到自己的链中之外,请告诉我是否有更好的解决方案。谢谢你的帮助。
答案 0 :(得分:0)
您必须在<gateway>
的{{1}}上有一些补偿流程。
既然你说你有SOAP错误并且你已经熟悉了payload.failedMessage.headers
,你只需要在那里写下这样的东西:
<int:transformer input-channel="gatewayErrorChannel" expression="payload.failedMessage"/>
看起来你进一步<chain>
流量应该是一样的。唯一不同的是,您将只使用requestMessage
进行处理,但会丢失外部SOAP请求中的错误信息。