Hitachi

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


17.1.7 サブリソースクラス

サブリソースクラスは,リソースメソッド,サブリソースメソッド,またはサブリソースロケータのどれかを一つ以上持ち,クラスレベルでPath アノテーションでアノテートされていないJava のクラスです。

サブリソースクラスの例を次に示します。

package com.sample.resources;
 
import javax.ws.rs.GET;
import javax.ws.rs.Path;
 
public class Resource {
  @Path("/subresourcemethod1")
  @GET
  public String subResourceMethod1() {
    return "from sub resource method1";
  }
  @GET
  public String resourceMethod() {
    return "from resource method";
  }
}

サブリソースクラスのインスタンスは,JAX-RSエンジンによって生成されません。サブリソースクラスは,対応するサブリソースロケータでインスタンス化する必要があります。

〈この項の構成〉

(1) メカニズム

サブリソースクラスは,次のように生成され,HTTPリクエストを処理します。

  1. HTTPリクエストがサブリソースロケータにディスパッチされます。

  2. サブリソースロケータはサブリソースクラスを生成し,HTTPリクエストの処理を生成したサブリソースクラスに委譲します。

  3. 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リクエストを実行します。

(2) ライフサイクル

サブリソースクラスのインスタンスは,JAX-RSエンジンによって生成されません。サブリソースクラスは,対応するサブリソースロケータでインスタンス化する必要があります。このため,サブリソースロケータまたはサブリソースクラスで,コンストラクタのパラメタ,フィールド,およびbeanプロパティを初期化する必要があります。

(3) コンストラクタ

サブリソースクラスのコンストラクタのパラメタでは,JAX-RS仕様のアノテーションを使用しないでください。使用されている場合は無視されます。

(4) フィールドおよびbeanプロパティ

JAX-RS仕様のアノテーションをサブリソースクラスのフィールドおよびbeanプロパティで使用しないでください。使用されている場合は,無視されます。

(5) リソースメソッド,サブリソースメソッド,およびサブリソースロケータ

サブリソースクラスのリソースメソッド,サブリソースメソッド,およびサブリソースメソッドは,次に説明する相違点を除いてルートリソースクラスの場合と同じです。ルートリソースクラスについては,次の個所を参照してください。

サブリソースロケータの戻り値の型がvoidの場合,エラーとなり,クライアントからのHTTPリクエストは処理されません。HTTPステータスコードには500が返されます。なお,ログはJAX-RS機能のログファイルではなく,J2EEサーバのログファイルを確認してください。

次に示す条件に当てはまる場合は,エラーとなり(KDJJ10006-E),例外マッピングプロバイダで処理できるjava.lang.RuntimeExceptionがスローされます。