本文将讨论一下,在CXF服务端的异常处理,主要包括服务实现类抛出异常与拦截器中抛出异常,抛出异常后CXF的处理流程。其实在CXF中,异常无论是在服务实现类还是拦截器中抛出,其处理方式是一样的,当服务方法中的异常抛出后,CXF会将异常包装为org.apache.cxf.interceptor.Fault类型,而拦截器中只能抛出Fault类型异常,其间接继承于java.lang.RuntimeException,也就是属于运行时异常。根据CXF中Web服务请求处理流程知道,CXF对请求的处理流程是,先调用输入拦截器链,然后调用服务方法,再调用输出拦截器链,最后将结果返回给客户端。拦截器链的实现类为org.apache.cxf.phase.PhaseInterceptorChain,调用拦截器的方法为:doIntercept,下面是源码:
@SuppressWarnings("unchecked")
public synchronized boolean doIntercept(Message message) {
updateIterator();
Message oldMessage = CURRENT_MESSAGE.get();
try {
CURRENT_MESSAGE.set(message);