【问题标题】:throw an exception from org.apache.cxf.jaxrs.ext.RequestHandler handleRequest method从 org.apache.cxf.jaxrs.ext.RequestHandler handleRequest 方法抛出异常
【发布时间】:2013-01-31 05:23:44
【问题描述】:

我在使用 cxf 调度行为时遇到了这个问题。 我开发了一个实现 org.apache.cxf.jaxrs.ext.RequestHandler 接口的拦截器。 在其“公共响应句柄请求(消息 m,ClassResourceInfo resourceClass)”方法中,我抛出异常(例如 WebServiceException)或故障。我没有明显的问题,但是在客户端,客户端收到了一个不同的异常(ServerWebApplicationException),错误消息为空。

代码如下:

服务器端:

    public class RestInterceptor implements RequestHandler {
       ......
       @Override
       public Response handleRequest(Message m, ClassResourceInfo resourceClass){
          .....
          throw new WebServiceException("Failure in the dispatching ws invocation!");
          .....
       }
    }

客户端收到ServerWebApplicationException:

Status : 500
Headers : 
Content-Length : 0
Connection : close
Server : Jetty(7.x.y-SNAPSHOT)

cause=null
detailMessage=null
errorMessage=""
.....

如果我抛出错误,我也会收到相同的异常。 问题是什么?我必须使用另一个例外?为什么? 非常感谢,

安德烈亚

【问题讨论】:

    标签: cxf


    【解决方案1】:

    好的,我找到了解决方案。
    我在调度程序上注册了一个 ExceptionMapper,并使用它将异常封装在发送给客户端的响应中。 为此,拦截器在 Web 服务发布中注册为提供者,并实现“ExceptionMapper”接口。在其“toResponse”方法中,它将异常封装在响应中。 看代码:

        public static<T extends Throwable>  Response convertFaultToResponse(T ex, Message inMessage) {
            ExceptionMapper<T>  mapper = ProviderFactory.getInstance(inMessage).createExceptionMapper(ex.getClass(), inMessage);
            if (mapper != null) {
                try {
                    return mapper.toResponse(ex);
                } catch (Exception mapperEx) {
                    mapperEx.printStackTrace();
                    return Response.serverError().build();
                }
            }
            return null;
        }
    
        @Override
        public Response toResponse(Exception arg0) {
            ResponseBuilder builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR).type("application/xml");
            String message = arg0.toString();
            return builder.entity(message).build(); 
        }
    

    安德烈亚

    【讨论】:

      【解决方案2】:

      @WebFault注释你的异常

      例子:

      @WebFault(name = "oauthFault")
      public class OAuthException extends RuntimeException {
        ...
      }
      

      【讨论】:

      • 非常感谢,不幸的是我已经尝试过了,但仍然出现同样的错误行为,并且在客户端收到同样的空 ServerWebApplicationException。
      猜你喜欢
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多