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

実際の例外のスタックはログに記録されません。コードをでラップしtry..catch、キャッチされた例外をログに記録すると、コードに問題があることを確認できます。私のシステムの他のライブラリは、深くラップされた例外であっても、これを実行しません。したがって、RESTEasy、おそらくUnhandledException

この動作を回避する方法はありますか?それが実際の例外を隠すべきであるという正当な理由を私は考えることができません。

  • 桟橋
  • Java
  • 春3.0.3
  • RESTEasy 2.0.1GA
4

3 に答える 3

1

ExceptionMapper はありますか? 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 を使用していませんが、RESTful Web サービスのディスパッチ メカニズムのようです。

これが事実であると仮定すると、他のライブラリとは異なる設計目標があります。それらはアプリケーションから呼び出されますが、RESTeasy はアプリケーションの呼び出しを担当します。したがって、不適切に記述されたコードから自身を保護する必要があります。「最後の溝」例外ハンドラは、これを行うための一般的な方法です。Swing でも同じことがわかります。

キャッチされていない例外をログに記録する必要があるかどうかは別の問題です。おそらく、これを行うための構成オプションがあります。あるいは、数行のコードを追加する必要があるかもしれません。結局のところ、それはオープンソースであり、メンテナーはパッチ付きのよく書かれたバグレポートを高く評価すると確信しています.

于 2011-03-31T19:58:42.043 に答える
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 に答える