Hitachi

Cosminexus V11 アプリケーションサーバ Webサービス開発ガイド


17.1.8 例外ハンドリング

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

〈この項の構成〉

(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

設定されていない

500

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

ランタイム例外

そのランタイム例外をスローし直します。

500

KDJJ10010-E,

KDJJ10039-E

2

上記以外

RuntimeExceptionでその例外をラップしてスローします

500

KDJJ10017-E,

KDJJ10039-E

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

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