ページの先頭行へ戻る
Interstage Application Server V12.0.0 Java EE 7 設計・構築・運用ガイド
FUJITSU Software

3.1.11 JAX-RSクライアントアプリケーションの作成方法

JAX-RS仕様に従った代表的なクライアントアプリケーションの作成方法について説明します。詳細については、JAX-RS仕様およびJava EE仕様を参照してください。

JAX-RSクライアントアプリケーションの作成方法

JAX-RSクライアントアプリケーションの開発ではJAX-RSのクライアントAPIを使用して、Java EEアプリケーションまたはJava EE アプリケーションクライアントを作成します。

HTTP GETメソッドでテキストのコンテンツを取得するJAX-RSクライアントの作成例

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

public class SampleClient {
  public static void main(String[] args) {
    WebTarget target = ClientBuilder.newClient().target("アクセス先のURL");
    Response response = target.request().get();
    String contents = response.readEntity(String.class);
    System.out.println(contents);
  }
}

JAX-RSクライアントアプリケーションで送受信するデータとして利用できるJavaクラスとMIMEメディアタイプ(MIME型)はJAX-RSアプリケーションと同様です。詳細は、「JAX-RSアプリケーションで利用できる標準のデータ型」を参照してください。


HTTP接続関連の設定

タイムアウト

HTTP接続タイムアウトおよび受信タイムアウトはjavax.ws.rs.client.ClientBuilderクラスの以下のプロパティに設定できます。

プロパティ名

指定値

jersey.config.client.connectTimeout

java.lang.Integer型の0以上の値で、HTTP通信のサーバへの接続タイムアウトをミリ秒単位で指定します。0を指定した場合、読み込みタイムアウト制限をしません。この値は、java.net. HttpURLConnection#setConnectTimeoutメソッドに渡されます。

jersey.config.client.readTimeout

java.lang.Integer型の0以上の値で、HTTP通信の読み込みタイムアウトをミリ秒単位で指定します。0を指定した場合、接続タイムアウト制限をしません。この値は、java.net. HttpURLConnection#setReadTimeoutメソッドに渡されます。

接続タイムアウトを設定するJAX-RSクライアントの作成例

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

public class SampleClient {
  public static void main(String[] args) {
    ClientBuilder cb = ClientBuilder.newBuilder();
    cb.property("jersey.config.client.connectTimeout", 10000);  //接続タイムアウトの設定
    Client client = cb.build();
    WebTarget target = client.target("アクセス先のURL");
    Response response = target.request().get();
    String contents = response.readEntity(String.class);
    System.out.println(contents);
  }
}

プロキシ

プロキシを利用して接続先にアクセスする場合、JAX-RSクライアントアプリケーションが動作する環境に、Java標準のネットワークのシステムプロパティ(例. http.proxyHost)で必要な設定を行ってください。また、プロキシの認証を利用する場合は、java.net.Authenticatorクラスに対して必要な設定を行ってください。

認証のあるプロキシを利用するJAX-RSクライアントの作成例

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import java.net.Authenticator;
import java.net.PasswordAuthentication;

public class SampleClient {
  public static void main(String[] args) {
    System.setProperty("http.proxyHost", "ホスト");
System.setProperty("http.proxyPort", "ポート");

Authenticator.setDefault(new Authenticator() { //認証情報の設定
@Override
protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication("
ユーザー名", "パスワード".toCharArray());
}

});
WebTarget target = ClientBuilder.newClient().target("アクセス先のURL"); Response response = target.request().get(); String contents = response.readEntity(String.class); System.out.println(contents); } }

BASIC認証

BASIC認証が設定されている接続先にアクセスする場合は、リクエストのHTTPヘッダで設定することができます。

BASIC認証が設定されている接続先のコンテンツを取得するJAX-RSクライアントの作成例

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

public class SampleClient {
  public static void main(String[] args) {
    String namePass = "ユーザー名" + ":" + "パスワード";
    String basicAuthHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString(namePass.getBytes());
    WebTarget target = ClientBuilder.newClient().target("アクセス先のURL");
    Response response = target.request()
                      .header("Authorization", basicAuthHeaderValue)  //HTTPヘッダの設定
                      .get();
    String contents = response.readEntity(String.class);
    System.out.println(contents);
  }
}

HTTP Basic認証は通信路においてユーザ名およびパスワードは暗号化されません。HTTP Basic認証を利用する場合、通常はSSLを併用して通信路での盗聴を防止してください。

SSL

SSLで接続する場合の設定方法については、「5.3.3 SSL」を参照してください。