サブリソースクラスは,リソースメソッド,サブリソースメソッド,またはサブリソースロケータのどれかを一つ以上持ち,クラスレベルでPath アノテーションでアノテートされていないJava のクラスです。
サブリソースクラスの例を次に示します。
package com.sample.resources; |
サブリソースクラスのインスタンスは,JAX-RSエンジンによって生成されません。サブリソースクラスは,対応するサブリソースロケータでインスタンス化する必要があります。
サブリソースクラスは,次のように生成され,HTTPリクエストを処理します。
サブリソースロケータについては,「17.1.1(6) サブリソースロケータ」を参照してください。
JAX-RSエンジンは,サブリソースロケータのメソッドシグネチャで宣言された戻り値型ではなく,実行時にサブリソースロケータが返すインスタンスをサブリソースクラスとして扱い,処理を委譲します。
例えば,M,N,およびOの三つのサブリソースクラスがあるとします。NはMを継承し,OはNを継承しています。同様に,戻り型Mを持つRというサブリソースロケータがあるとします。サブリソースロケータがMのインスタンスを返した場合,サブリソースクラスMがHTTPリクエストを実行します。同様に,サブリソースロケータがNのインスタンスを返す場合は,サブリソースクラスNがHTTPリクエストを実行します。Oのインスタンスを返す場合は,サブリソースクラスOがHTTPリクエストを実行します。
サブリソースクラスのインスタンスは,JAX-RSエンジンによって生成されません。サブリソースクラスは,対応するサブリソースロケータでインスタンス化する必要があります。このため,サブリソースロケータまたはサブリソースクラスで,コンストラクタのパラメタ,フィールド,およびbeanプロパティを初期化する必要があります。
サブリソースクラスのコンストラクタのパラメタでは,JAX-RS仕様のアノテーションを使用しないでください。使用されている場合は無視されます。
JAX-RS仕様のアノテーションをサブリソースクラスのフィールドおよびbeanプロパティで使用しないでください。使用されている場合は,無視されます。
サブリソースクラスのリソースメソッド,サブリソースメソッド,およびサブリソースメソッドは,次に説明する相違点を除いてルートリソースクラスの場合と同じです。ルートリソースクラスについては,次の個所を参照してください。
サブリソースロケータの戻り値の型がvoidの場合,エラーとなり,クライアントからのHTTPリクエストは処理されません。HTTPステータスコードには500が返されます。なお,ログはJAX-RS機能のログファイルではなく,J2EEサーバのログファイルを確認してください。
次に示す条件に当てはまる場合は,エラーとなり(KDJJ10006-E),例外マッピングプロバイダで処理できるjava.lang.RuntimeExceptionがスローされます。