【问题标题】:Continuing with Spring integration flow after SoapFault在 SoapFault 之后继续 Spring 集成流程
【发布时间】:2015-06-16 12:52:04
【问题描述】:

我们的应用集成流程定义为 splitter -> ws gateway -> aggregator 拆分器将请求拆分为帐号列表;以便为每个帐号发起一个 Web 服务调用,并将来自多个 Web 服务调用的响应聚合在聚合器中。拆分器和 ws 网关之间的通道由调度程序“commonj WorkManagerTaskExecutor”定义,以便每个 Web 服务调用在不同的线程。

如果至少部分网络服务调用正确响应;即使所有其他调用导致 SoapFault;我们需要使用成功响应中的数据以及引用错误响应中的错误消息的警告消息来处理这种情况。

问题是 ws 网关中定义的 FaultMessageResolver 的 resolveFault() 方法不返回任何内容,并且如果至少有一个并行 Web 服务调用失败,则控件永远不会到达聚合器。有没有办法处理这种情况。

【问题讨论】:

    标签: web-services spring-integration soapfault


    【解决方案1】:
    1. 您可以将SoapFaultMessageResolver 注入<int-ws:outbound-gateway> (fault-message-resolver)。这个代码很简单:

      public void resolveFault(WebServiceMessage message) throws IOException {
          SoapMessage soapMessage = (SoapMessage) message;
          throw new SoapFaultClientException(soapMessage);
      }
      

    因此,您失败的 WS 调用最终会得到 Exception

    1. <int-ws:request-handler-advice-chain> 添加到您的<int-ws:outbound-gateway> 并在那里放置一个ExpressionEvaluatingRequestHandlerAdvice 的实例。指定它的errorChannel 并在该子流中执行一些不可知的逻辑,并将一些特定的消息发送到您的聚合器。不要忘记在该消息中携带sequenceDetails 标头。

    2. 群组聚合器中的所有消息都可以正常发布。

    3. 最后你可以分析结果List的错误和正常响应。

    【讨论】:

    • 谢谢@Artem Bilan。您的回答为我们提供了解决方案。我们可以使用 request-handler-advice-chain 将错误消息重定向到聚合器
    猜你喜欢
    • 1970-01-01
    • 2018-02-16
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2021-07-09
    相关资源
    最近更新 更多