17.1.8 例外ハンドリング

JAX-RSエンジンは,次に示す個所からスローされる例外をここで説明するようにハンドリングします。

<この項の構成>
(1) WebApplicationException(例外マッピングプロバイダがない場合)
(2) その他の例外(例外マッピングプロバイダがない場合)
(3) 例外マッピングプロバイダがある場合

(1) WebApplicationException(例外マッピングプロバイダがない場合)

WebApplicationExceptionがスローされる場合で,WebApplicationExceptionまたはその親以上の例外に対応する例外マッピングプロバイダがないとき,JAX-RSエンジンは次の表に示すようにWebApplicationExceptionをハンドリングします。

表17-10 WebApplicationExceptionのハンドリング(例外マッピングプロバイダがない場合)

項番条件ハンドリング結果
responseプロパティresponseプロパティのHTTPステータスコードHTTPレスポンスのHTTPステータスコードメッセージID
1設定されている
  • 499以下
  • 列挙型Response.Statusにある値
WebApplicationExceptionのresponseプロパティが持つ値が使用されます。KDJJ30021-I
2設定されている
  • 499以下
  • 列挙型Response.Statusにない値
WebApplicationExceptionのresponseプロパティが持つ値が使用されます。KDJJ30022-I
3設定されている
  • 500以上
  • 列挙型Response.Statusにある値
WebApplicationExceptionのresponseプロパティが持つ値が使用されます。KDJJ10018-E
4設定されている
  • 500以上
  • 列挙型Response.Statusにない値
WebApplicationExceptionのresponseプロパティが持つ値が使用されます。KDJJ10019-E
5設定されていない500KDJJ10018-E
(凡例)
-:該当しないことを示します。

WebApplicationExceptionを生成し,responseプロパティを設定する例を次に示します。

package com.sample.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;

//ルートリソースクラス
@Path("/root")
public class Resource {

 //サブリソースメソッド
 @Path("/subresourcemethod")
 @GET
 public String subResourceMethod() {
   //ResponseBuilderを使用してResponseインスタンスを生成
   ResponseBuilder rb = Response.status(208).
   entity("entity for WebApplicationException");

   //WebApplicationExceptionへResponseインスタンスを設定
   throw new WebApplicationException(rb.build());
}
}

この例では,ルートリソースクラスcom.sample.resources.Resourceを含むWebアプリケーション(WARファイル)のコンテキストルートが"resource"で,Webアプリケーションが"example.com"というホストで公開されているとします。その場合,URL"http://example.com/resource/root/subresourcemethod"に対するHTTP GETリクエストは,メソッドsubResourceMethod()にディスパッチされます。また,HTTPレスポンスは,WebApplicationExceptionのresponseプロパティから変換されます。

(2) その他の例外(例外マッピングプロバイダがない場合)

WebApplicationException以外の例外がスローされる場合で,その例外またはその親以上の例外に対応する例外マッピングプロバイダがないとき,JAX-RSエンジンは次の表に示すようにその例外をハンドリングします。

表17-11 その他の例外(例外マッピングプロバイダがない場合)

項番条件ハンドリングの結果
例外の種類JAX-RSエンジンの動作HTTPレスポンスのHTTPステータスコードメッセージID
1ランタイム例外そのランタイム例外をスローし直します。500KDJJ10010-E,
KDJJ10039-E
2上記以外RuntimeExceptionでその例外をラップしてスローします500KDJJ10017-E,
KDJJ10039-E

(3) 例外マッピングプロバイダがある場合

スローされる例外,またはその親以上の例外に対応する例外マッピングプロバイダがある場合は,例外マッピングプロバイダの動作に依存します。なお,スローされる例外とその親以上の例外に対応する例外マッピングプロバイダが複数存在する場合は,その例外に最も近い例外(スローされた例外を含む)を処理できる例外マッピングプロバイダが動作します。