java – 从一个webapp抛出WebapplicationException并在另一个上获取UniformInterfaceException

我看到一个奇怪的问题.我有两个webapps.一个用于我们使用Jersey公开的其余web服务.另一个有JSF前端实现,它调用webservice以上来获取细节.我们使用Tomcat作为容器.

我面临的问题是当我调用一个rest webservice时,我会像这样抛出WebApplicationException

catch (CustomExceptions e) {
    ResponseBuilder response = new ResponseBuilderImpl();
    response.status(500);
    response.entity(e.getStackTrace());
    throw new WebApplicationException(e, response.build()); 
}

另一方面,在FE webapps上,我执行以下操作:

try {
    r.get(MyClass.class);
    return "SUCCESS";
} catch (WebApplicationException wae) {
    return "FAILURE";
} catch (UniformInterfaceException wae) {
    return "FAILURE";
}

在catch块中,我期待WebApplicationException但它抛出UniformInterfaceException这很奇怪.此外,如果它抛出UniformInterfaceException,它不会维护堆栈跟踪.即使是我从休息电话中传来的回应也会丢失.有人可以帮助我如何从其余的电话中获得原始的堆栈跟踪?

提前致谢.

解决方法:

user guideapi documentation中所指定的,当您尝试按类型检索特定实体但接收非200系列响应时,UniformInterfaceException是预期结果. WebApplicationException是一个便利例外,供您在服务器端使用,以在异常中嵌入自定义响应.

什么都没有“丢失”.请记住,您在此处发出HTTP请求.如果要检查状态代码并自行响应,请使用

ClientResponse response = r.get(ClientResponse.class);
if (response.getStatus() == <expected status code>) [
    response.getEntity(MyClass.class);
    // do happy path stuff
} else {
    // bad stuff here
}

或者,假设一切顺利,只检查异常的响应:

try {
    r.get(MyClass.class);
} catch (UniformInterfaceException e) {
    ClientResponse response = e.getResponse();
    // do whatever with the raw response
}
上一篇:java – 如何在使用Jersey,jaxb和jax-rs时设置xml命名空间


下一篇:使用Jersey的Java服务