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

标签 java web-services jsf jersey

我看到一个奇怪的问题。我有两个网络应用程序。一个用于我们使用 Jersey 公开的其余 Web 服务。另一个具有 JSF 前端实现,它调用上面的 web 服务来获取详细信息。我们使用 Tomcat 作为容器。

我面临的问题是当我调用 rest web 服务时,我会像这样抛出 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 block 中,我期待 WebApplicationException,但它抛出了奇怪的 UniformInterfaceException。此外,如果它抛出 UniformInterfaceException,它也不会维护堆栈跟踪。甚至我从休息电话传入的响应也丢失了。有人可以帮我如何从其余调用中获取原始堆栈跟踪吗?

提前致谢。

最佳答案

user guide 中所指定和 api documentation , UniformInterfaceException 是您尝试按类型检索特定实体但收到非 200 系列响应时的预期结果。 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 - 从一个 webapp 抛出 WebapplicationException 并在另一个 webapp 上获取 UniformInterfaceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6921871/

相关文章:

c# - 将数组从 JavaScript 传递到 C# 的最佳方式?

java - 基于非容器的java远程处理?

java - 带有 JSF 2 的 Spring Webflow 2.0 - 动态流是否可能?

java - 使用 ImageIcon(getClass().getResource() 将图像添加到 eclipse java 项目

java - 我应该在断言中装箱还是拆箱?

javascript - 如何通过 DDP (WebSocket) 协议(protocol)访问 meteor.com 上托管的应用程序?

java - 使用 RichFaces 下载文件

javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated in Tomcat with Apache HttpClient

java - 配置hibernate 3.6依赖项

regex - 验证器正则表达式模式输入仅接受 2-5 位数字