我看到一个奇怪的问题.我有两个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 guide和api 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
}