我们的应用集成流程被定义为拆分器、-> ws网关、->聚合器、拆分器将请求拆分成一个帐号列表,从而对每个帐号启动一个web服务调用,并将来自多个web服务调用的响应聚集在分配器和ws网关之间的aggregator.The信道中,并使用调度器"commonj WorkManagerTaskExecutor“定义每个web服务调用,从而在不同线程中并行启动每个web服务调用。
如果至少有一些web服务调用正确响应;即使所有其他调用都导致SoapFault;我们需要通过使用来自成功响应的数据来处理该场景,并使用引用错误响应错误消息的警告消息。
问题是,在ws网关中定义的resolveFault() FaultMessageResolver方法不返回任何内容,如果至少一个并行web服务调用失败,则控件永远不会到达聚合器。有没有办法处理这种情况。
发布于 2015-06-16 14:11:11
SoapFaultMessageResolver注入<int-ws:outbound-gateway> (fault-message-resolver)。这个代码非常简单:
公共空resolveFault(WebServiceMessage消息)抛出IOException { SoapMessage soapMessage = (SoapMessage)消息;抛出新SoapFaultClientException(soapMessage);}因此,您失败的WS调用将以Exception结束。
<int-ws:request-handler-advice-chain>添加到<int-ws:outbound-gateway>中,并在那里放置ExpressionEvaluatingRequestHandlerAdvice实例。指定它的errorChannel,并在子流中执行一些不可知的逻辑,并向您的聚合器发送一些特定的消息。不要忘了携带sequenceDetails头与该消息。List的错误和正常响应。https://stackoverflow.com/questions/30868121
复制相似问题