对于使用Apache CXF的JAX-WS,应使用以下处理程序来处理在消息处理期间引发的任何异常。例如,这可能是语法错误的格式的SOAP消息。
public class MyHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleFault(SOAPMessageContext context) {
// some action
}
}
现在,问题在于此处理程序从未执行过,因为SOAPHandlerInterceptor
的实际implementation检查消息是否出站:
public void handleFault(SoapMessage message) {
if (binding.getHandlerChain().isEmpty()) {
return;
}
if (getInvoker(message).getProtocolHandlers().isEmpty()) {
return;
}
if (getInvoker(message).isOutbound() // <<< this line
&& !chainAlreadyContainsSAAJ(message)) {
SAAJ_OUT.handleFault(message);
}
}
如果邮件入站,这将阻止我采取任何措施。由于源代码从未发生任何显着变化,因此这似乎是有意的。有其他方法吗?