使用Header丰富的内部链

时间:2015-08-10 21:46:01

标签: spring-integration

我有一个可以多次重复使用的常用流程。所以,我为它定义了一个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),可以多次调用此链。

除了将网关提取到自己的链中之外,请告诉我是否有更好的解决方案。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您必须在<gateway>的{​​{1}}上有一些补偿流程。

既然你说你有SOAP错误并且你已经熟悉了payload.failedMessage.headers,你只需要在那里写下这样的东西:

<int:transformer input-channel="gatewayErrorChannel" expression="payload.failedMessage"/>

看起来你进一步<chain>流量应该是一样的。唯一不同的是,您将只使用requestMessage进行处理,但会丢失外部SOAP请求中的错误信息。