我们的应用程序集成流程定义为拆分器 - > ws gateway - >聚合 拆分器将请求拆分为帐号列表;这样,对于每个帐号,都会启动一个Web服务调用,并在聚合器中聚合来自多个Web服务调用的响应。分离器和ws网关之间的通道由调度程序" commonj WorkManagerTaskExecutor"定义。这样每个webservice调用都可以在不同的线程中并行启动。
如果至少部分Web服务调用响应正常;即使所有其他呼叫都导致SoapFault;我们需要通过使用成功响应中的数据来处理场景,并使用警告消息引用故障响应中的错误消息。
问题是在ws网关中定义的FaultMessageResolver的resolveFault()方法不返回任何内容,并且如果并行Web服务调用中的至少一个失败,则控件永远不会到达聚合器。有没有办法处理这种情况。
答案 0 :(得分:2)
您可以将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
结束。
将<int-ws:request-handler-advice-chain>
添加到<int-ws:outbound-gateway>
并在其中放置ExpressionEvaluatingRequestHandlerAdvice
的实例。指定其errorChannel
并在该子流中执行一些不可知逻辑,并向聚合器发送一些特定消息。不要忘记随身携带sequenceDetails
标题。
让群组聚合器中的所有邮件都能正常发布。
最后,您可以分析结果List
的错误和正常回复。