如何编写Spring Interceptor来处理任何Web服务异常

时间:2014-02-07 22:06:09

标签: web-services cxf interceptor

我正在开发一个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配置:

    

0 个答案:

没有答案