【问题标题】:RESTEasy hides real exceptionRESTEasy 隐藏了真正的异常
【发布时间】:2012-03-23 17:35:08
【问题描述】:

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

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 中的问题,也许在 UnhandledException

有没有办法绕过这种行为?我想不出它应该隐藏实际异常的充分理由。

  • 码头
  • Java
  • 春季 3.0.3
  • RESTEasy 2.0.1GA

【问题讨论】:

    标签: java resteasy


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        是的,你的异常被 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
        

        【讨论】:

          猜你喜欢
          • 2021-01-29
          • 2014-11-20
          • 2015-05-05
          • 2015-07-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多