我正在开发一个Web项目,它几乎没有使用CXF 2.7.8(& Spring 3.0.7)开发的SOAP Web服务。我需要添加拦截器,它可以处理方法调用期间发生的异常,提取根本原因并将其发送给调用者。
我们的网络项目中没有任何控制器,因为我们没有UI。该项目仅托管一些Web服务。
我通过参考互联网上提供的示例代码/示例实现了基于Spring的拦截器。当我调用webservice方法时,我的拦截器没有被调用。相同的代码/拦截器在具有Controller(并使用Spring MVC流)的不同Web应用程序中工作正常。
我不确定为什么它不起作用?是因为我们没有基于Spring MVC的流程而且我正在尝试使用Spring Interceptor?如果是,那么有人可以建议我如何编写一个拦截器,当一些异常发生时将被调用。我正在使用基于CXF的SOAP Web服务。
以下是拦截器&我试过的Spring配置:
公共类ExceptionHandlerInterceptor扩展了HandlerInterceptorAdapter {
private static final Logger LOG = Logger
.getLogger(ExceptionHandlerInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
LOG.info("Before handling the request");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
LOG.info("After handling the request");
super.postHandle(request, response, handler, modelAndView);
}
// @SuppressWarnings({ "unchecked", "rawtypes" })
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
LOG.info("After rendering the view");
System.out.println("Exception is-->" + ex);
super.afterCompletion(request, response, handler, ex);
}
}
这是Spring配置: