1

我的代码抛出异常(由于错误)。在日志中,我看到:

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...

不记录实际异常的堆栈。如果我将代码包装在 a 中try..catch并记录捕获的异常,我可以验证我的代码是否有问题。我的系统中没有其他库可以做到这一点,即使对于深度包装的异常也是如此,所以它一定是 RESTEasy 中的问题,也许在UnhandledException?

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

  • 码头
  • 爪哇
  • 春天 3.0.3
  • RESTEasy 2.0.1GA
4

3 回答 3

1

你有异常映射器吗?请参阅 RESTEasy 文档中的第 27 章,异常处理。

我使用 RESTEasy 将 REST 添加到现有系统中,而现有系统有一种奇怪的方式将异常包装在异常中,因此我的 ExceptionMappers 做了很多解包。

Throwable t = exception;
while (t.getCause() != null) {
  t = t.getCause();
}
t.printStackTrace();
于 2011-04-04T14:32:10.490 回答
0

是的,您的异常被 RESTeasy 吞并,包裹在 UnhandledException 中并记录下来。但是您的例外太深而无法包含在堆栈跟踪中。

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

org.apache.catalina.core.ContainerBase.[Catalina].level = FINEST
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler
于 2012-03-23T09:35:08.270 回答
0

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

假设是这种情况,那么它与其他库的设计目标不同:它们是从您的应用程序调用的,但 RESTeasy 负责调用您的应用程序。因此,它必须保护自己免受编写不佳的代码的影响。“最后一搏”异常处理程序是执行此操作的常用方法;你会在 Swing 中看到同样的东西。

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

于 2011-03-31T19:58:42.043 回答