Java RESTEasy隐藏了真正的异常

Java RESTEasy隐藏了真正的异常,java,resteasy,Java,Resteasy,我的代码引发了一个异常(由于一个bug)。在日志中,我看到: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:323) at org.jboss.resteasy.core.Sy

我的代码引发了一个异常(由于一个bug)。在日志中,我看到:

org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:323)
    at org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:199)
    at org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:175)
    at org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:529)
    etc...
未记录实际异常的堆栈。如果我将代码包装在一个
try..catch
中并记录捕获的异常,我可以验证我的代码是否出错。在我的系统中,没有其他库能做到这一点,即使对于深度包装的异常也是如此,所以这在RESTEasy中肯定是个问题,可能是在
未处理的异常中

有没有办法避免这种行为?我想不出一个好的理由为什么它应该隐藏实际的异常

  • 码头
  • 爪哇
  • Spring 3.0.3
  • RESTEasy 2.0.1GA

我不使用RESTeasy,但它似乎是RESTful web服务的调度机制

假设是这样,那么它的设计目标与其他库不同:它们是从应用程序中调用的,而RESTeasy负责调用应用程序。因此,它必须保护自己不受写得不好的代码的影响。“最后一搏”异常处理程序是实现这一点的常用方法;你会在秋千上看到同样的东西


它是否应该记录未捕获的异常是另一回事。也许有一个配置选项可以做到这一点。或者,您可能需要添加几行代码。毕竟,它是开源的,我相信维护人员会很欣赏一份编写良好的带有补丁的bug报告。

我不使用RESTeasy,但它似乎是RESTful web服务的调度机制

假设是这样,那么它的设计目标与其他库不同:它们是从应用程序中调用的,而RESTeasy负责调用应用程序。因此,它必须保护自己不受写得不好的代码的影响。“最后一搏”异常处理程序是实现这一点的常用方法;你会在秋千上看到同样的东西


它是否应该记录未捕获的异常是另一回事。也许有一个配置选项可以做到这一点。或者,您可能需要添加几行代码。毕竟,它是开源的,我相信维护人员会喜欢一份写得很好的带有补丁的bug报告。

你有例外吗?请参阅RESTEasy文档中的第27章,异常处理

我使用RESTEasy将REST添加到现有系统中,而现有系统有一种奇怪的方式将异常包装到异常中,因此我的ExceptionAppers进行了大量的展开

Throwable t = exception;
while (t.getCause() != null) {
  t = t.getCause();
}
t.printStackTrace();

你有特例吗?请参阅RESTEasy文档中的第27章,异常处理

我使用RESTEasy将REST添加到现有系统中,而现有系统有一种奇怪的方式将异常包装到异常中,因此我的ExceptionAppers进行了大量的展开

Throwable t = exception;
while (t.getCause() != null) {
  t = t.getCause();
}
t.printStackTrace();

是的,您的异常被RESTeasy吞并,包装在未处理的异常中并记录。但是,您的例外情况太深,无法包含在stacktracs中

要将异常打印到控制台,可以将以下内容附加到“WEB-INF/classes/logging.properties”中

org.apache.catalina.core.ContainerBase.[Catalina].level = FINEST
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

是的,您的异常被RESTeasy吞并,包装在未处理的异常中并记录。但是,您的例外情况太深,无法包含在stacktracs中

要将异常打印到控制台,可以将以下内容附加到“WEB-INF/classes/logging.properties”中

org.apache.catalina.core.ContainerBase.[Catalina].level = FINEST
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler