1

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

如果至少有一些 Web 服务调用正确响应;即使所有其他调用导致 SoapFault;我们需要通过使用来自成功响应的数据以及引用来自故障响应的错误消息的警告消息来处理该场景。

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

4

1 回答 1

2
  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错误和正常响应的结果。

于 2015-06-16T14:11:11.407 回答