在SoapFault

时间:2015-06-16 12:52:05

标签: web-services spring-integration soapfault

我们的应用程序集成流程定义为拆分器 - > ws gateway - >聚合 拆分器将请求拆分为帐号列表;这样,对于每个帐号,都会启动一个Web服务调用,并在聚合器中聚合来自多个Web服务调用的响应。分离器和ws网关之间的通道由调度程序" commonj WorkManagerTaskExecutor"定义。这样每个webservice调用都可以在不同的线程中并行启动。

如果至少部分Web服务调用响应正常;即使所有其他呼叫都导致SoapFault;我们需要通过使用成功响应中的数据来处理场景,并使用警告消息引用故障响应中的错误消息。

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

1 个答案:

答案 0 :(得分: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);
    }
    
  2. 因此,您失败的WS调用将以Exception结束。

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

    2. 让群组聚合器中的所有邮件都能正常发布。

    3. 最后,您可以分析结果List的错误和正常回复。