问题描述
我已经使用Apache CXF Web服务实现了处理程序。我的意图是跟踪异常并记录更多信息。 处理程序代码的片段如下
public class SoapFaultHandler implements SOAPHandler<SOAPMessageContext> {
@Override
public boolean handleMessage(SOAPMessageContext context) {
//what should be thrown from here or web service so that handleFault() is called
}
@Override
public boolean handleFault(SOAPMessageContext context) {
}
//......................
}
我曾尝试从handleMessage()抛出javax.xml.ws.soap.SOAPFaultException(),但未调用handleFault。有人可以给点提示吗?
编辑: 从handleMessage()引发的异常未到达同一处理程序中定义的handleFault()。但是,最近我发现从Web服务抛出SoapFault异常时会调用handleFault()。 下面是代码片段。
catch(CustomException e)
{
String codeStr =//custom string here
QName faultCode = new QName("http://cxf.apache.org/soapfault",codeStr);
String faultString = e.toString();
SoapFault soapFault = new SoapFault(faultString,faultCode);
throw soapFault;
}
在Java客户端中,这是作为SOAPFaultException出现的,我不得不调用
解决方法
您可以在端点注册中注册IN / OUT故障拦截器。
@Bean
public Endpoint awesomeEndpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(),awesomeServiceImpl());
endpoint.getInFaultInterceptors().add(new AwesomeFaultInInterceptor());
endpoint.getOutFaultInterceptors().add(new AwesomeFaultOutInterceptor());
endpoint.publish("/awesomeService");
return endpoint;
}