Spring WS: 处理连接拒绝和客户端超时异常

3

我似乎找不到解决这个问题的合适方法。我想根据发生的情况向用户处理和显示不同的消息。我正在使用Spring WS并调用marshalSendAndReceive。目前在返回服务方法时,我会简单地catch (WebServiceIOException e),问题是当连接被拒绝(错误凭据)和查询时间超过客户端指定的时间限制(超时)时,都会抛出此异常?有没有适当的方式来处理这两个问题,而不提供一个通用的“出了些问题”的消息。

2个回答

3
WebServiceTemplatedoSendAndReceive 方法中完成其重要工作,其中有 try...catch 块和全面的错误处理。其中之一是 triggerAfterCompletion(int interceptorIndex, MessageContext messageContext, Exception ex),它将委托给注入的 ClientInterceptor
因此,您只需要适当地实现 afterCompletion(MessageContext messageContext, Exception ex) 来抛出适当的业务异常即可。

1
很抱歉,我目前项目中使用的Spring WS库有点老,没有提供这样的行为。 - Vaelyr
否则,您应该从WebServiceIOException中提取cause并针对每种情况执行逻辑。这是因为WebServiceTemplate会执行以下操作:throw new WebServiceIOException("I/O error: " + ex.getMessage(), ex); - Artem Bilan

0
一种方法是实现ClientInterception类。
另一种方法是在发送请求到Web服务的位置捕获通用的Exception类:
try {
  webServiceTemplate.marshalSendAndReceive(request);
} catch(Exception e){
   log.error("your custom message");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接