0

私は安らかなウェブサービスを書いていました。RESTful Web サービスのコントラクトは、パラメーターを受け取り、SSL を介して外部サービスと通信し、クライアントに応答することです。サービス契約およびサービスに問題はありません。サービスの設計は良好で、チェック済みの例外はすべて catch ブロックでキャッチされていましたが、いくつかのサービス テストの後、未チェックの例外が適切に処理されていないように見えました。ドメイン例外を使用して、これらの未チェックの例外をカプセル化する方法はありますか? 簡単にするために、チェックされていない例外を処理または予測する方法。

4

3 に答える 3

0

安らかなWebサービスの特定のケースでは、フレームワークには、望ましくないことを行う「キャッチオール」ハンドラーがあります。したがって、ここでの他のいくつかの回答とは対照的に、処理を追加したり、処理を変更したりすることは何も悪いことではありません。フレームワークのハンドラーは確かにあなたのためにクリーンアップするわけではないので、自分でクリーンアップすることによってのみ物事を改善することができます. したがって、2 つの選択肢があります。

  1. JAX-RS 標準に従って、プロバイダーのリストに例外マッパーを追加できます。

  2. コードを Throwable の try/catch でラップし、キャッチ ハンドラーでアピールする Response を作成できます。

JAX-RS に使用しているツールキットを知らなければ、(1) についてこれ以上詳しく説明することはできません。

于 2012-07-19T12:45:53.963 に答える
0

コードには常に、すべての例外を処理する場所が 1 か所ある必要があります。チェックされた例外を宣言するメソッドが呼び出されるたびに、コードの処理が混乱しているように見えます。チェック例外が発生する下位レベルのコードでは、次のコードを使用します。

try { 
  ...
catch (RuntimeException e) { throw e;} 
catch (Exception e) { throw new RuntimeException(e); }

そして、例外バリア(言及された中央の場所)で使用

try {
  ...
catch (Throwable t) { // logging, returning error response, whatever
}
finally { // global resource cleanup
}

これ以上のことを行う必要があるのは、コード ベースではあまり一般的ではない特殊な場合のみです。これは、下位レベルのメソッドが各リクエストで既に取得したリソースに加えて追加のリソースを取得する場合です。例として、ファイル I/O があります。そのような場合、その余分なリソースを処理するために a を使用することはもちろん必須try-finallyですが、それでも例外を飲み込んではいけませんcatch。メインの例外バリアは、問題があったことを認識し、そのクリーンアップを行う必要があります。

于 2012-07-19T12:08:59.780 に答える