3 RESTful Webサービス・クライアントの開発

Jersey 2.x Java API for RESTful Web Services (JAX-RS) 2.1参照実装(RI)を使用して、Representational State Transfer (REST)アーキテクチャ・スタイルに従ったJava EE Webサービス・クライアントを開発できます。

ノート:

Jersey 1.18 (JAX-RS 1.1RI)クライアントAPIのサポートは、今回のリリースのWebLogic Serverで非推奨になりましたが、下位互換性のために維持されています。Jersey 1.18 (JAX-RS 1.1 RI)を使用したRESTful Webサービス・クライアントの開発を参照してください

Jersey 2.x (JAX-RS 2.1 RI)クライアントAPIを使用するように(この章の説明を参照)、RESTfulクライアント・アプリケーションを早急に更新することをお薦めします。

この章の内容は次のとおりです:

RESTful Webサービス・クライアントを開発するタスクの概要

RESTful Webサービス・クライアントの開発に必要なタスクには、クライアント・クラスの作成、Webリソースのターゲティング、ターゲットでのリソースの識別などが含まれています。次の表に、Jersey 2.x (JAX-RS 2.0 RI)を使用してRESTful Webサービス・クライアントを開発する場合に必要なタスクの一部の概要を示します。

表3-1 RESTful Webサービス・クライアントを開発するタスクの概要

タスク 詳細情報

javax.ws.rs.client.Clientクラスのインスタンスを作成および構成します。

『Jersey 2.29 User Guide』「Creating and configuring a Client instance」

Webリソースをターゲット指定します。

『Jersey 2.29 User Guide』「Targeting a web resource」

WebTargetでリソースを指定します。

『Jersey 2.29 User Guide』「Identifying resource on WebTarget」

HTTPリクエストを呼び出します。

『Jersey 2.29 User Guide』「Invoking a HTTP request」

Oracle JDeveloperを使用したRESTful Webサービス・クライアントの開発の詳細は、Oracle JDeveloperによるアプリケーションの開発RESTful Webサービスおよびクライアントの作成を参照してください。

RESTful Webサービス・クライアントの例

RESTful Webサービス・クライアントの作成方法についてさらに学習するには、例を参照してください。次の例では、RESTful Webサービス・クライアントを使用して、例2-1で定義されたRESTful Webサービスを呼び出す方法を示します。この例の内容は次のとおりです。
  • Clientインスタンスが作成され、WebTargetが定義されます。

  • Webリソースにアクセスするためのリソース・パスが定義されます。

  • Invocation.Builderを使用してgetリクエストがリソースに送信されます。

  • レスポンスは文字列値で返されます。

例3-1 Jersey 2.x (JAX-RS 2.0 RI)を使用した簡単なRESTful Webサービス・クライアント

package samples.helloworld.client;
...
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
 
public class helloWorldClient{
    public static void main(String[] args) {
        Client client = ClientBuilder.newClient();
        WebTarget target = client.target("http://localhost:7101/restservice");
        WebTarget resourceWebTarget;
        resourceWebTarget = target.path("resources/helloworld");
        Invocation.Builder invocationBuilder;
        invocationBuilder = resourceWebTarget.request(
          MediaType.TEXT_PLAIN_TYPE);
        Response response = invocationBuilder.get();
        System.out.println(response.getStatus());
        System.out.println(response.readEntity(String.class));
...
    }
...
}

詳細は、『Jersey 2.29 User Guide』「Client API」を参照してください。

スタンドアロン・クライアントからのRESTful Webサービスの呼出し

Oracle Fusion MiddlewareまたはWebLogic Serverがローカルにインストールされていない環境からRESTful Webサービスを呼び出す場合、CLASSPATHにOracle Fusion MiddlewareまたはWebLogic Serverクラスの完全なセットがなくても、スタンドアロン・クライアントJARファイルを使用してWebサービスを呼び出すことができます。

スタンドアロンRESTful Webサービス・クライアントJARは、基本的なJAX-RSのクライアント側の機能およびOWSMセキュリティ・ポリシーをサポートしています。

クライアント・アプリケーションでスタンドアロンのRESTful Webサービス・クライアントJARファイルを使用するには、次のステップを実行します。

  1. Oracle JDeveloperなど好みのIDEを使用して、Java SEクライアントを作成します。Oracle JDeveloperによるアプリケーションの開発Webサービスの開発と保護に関する項を参照してください。

  2. ファイルORACLE_HOME/oracle_common/modules/clients/com.oracle.jersey.fmw.client.jarを、Oracle Fusion Middlewareをホストするコンピュータからクライアント・コンピュータにコピーします。ORACLE_HOMEは、Oracle Fusion Middlewareのインストール時にOracleホームに指定したディレクトリです。

    たとえば、クライアント・アプリケーションで使用している他のクラスが格納されているディレクトリにファイルをコピーします。

  3. JARファイルをCLASSPATHに追加します。

    ノート:

    CLASSPATHには、スタンドアロン・クライアントJARファイルで使用されるAntクラスのサブセットを含むJARファイル(ant.jar)が確実に格納されるようにしてください。このJARファイルは通常、Antディストリビューションのlibディレクトリ内にあります。

リアクティブJAX-RSクライアントAPIの使用

リアクティブ・クライアントAPIはJAX-RS 2.1仕様に含まれています。

クライアントAPIでの呼出しはすべて、デフォルトでは同期モードに設定されます。同期処理では、各リクエストが1つのHTTPスレッド内で処理されます。処理が終了すると、スレッドはプールに戻されます。この方法では、完了するまでに時間がかかり、リソースの不必要なブロックが発生する可能性があります。

JAX-RSの非同期プログラミングでは、クライアントがバックグラウンド・スレッドに作業をプッシュすることで、特定のスレッドのブロックを解除できます。バックグラウンド・スレッドはモニタリングして後で結合できます。リソースが最適に使用されて、迅速なレスポンス時間を実現できます。

JAX-RS 2.1では、InvocationCallbackインスタンスを提供して、非同期プログラミングを達成できます。これを使用すると、特定のイベントが発生した場合のみユーザー提供コードが反応するといった、さらにリアクティブなプログラミング・スタイルも可能になります。コールバックは単純なケースでは正常に機能しますが、複数のイベントが関係する場合にはコーディングが複雑になります。非同期プログラミングを読みやすくするために、非同期計算専用の多数のメソッドを管理する新しいインタフェースCompletionStageが導入されています。

CompletionStageに基づいた様々なタイプの呼出し方法の詳細は、『Jersey 2.29 User Guide』「Usage and Extension Modules」を参照してください。

詳細は、『Jersey 2.29 User Guide』「Reactive JAX-RS Client API」を参照してください。

ノート:

WebLogic Serverでは、次のリアクティブ・ライブラリはサポートされません。
  • RxJava (Observable)
  • RxJava (Flowable)
  • Guava (ListenableFuture)