JAX-RS仕様に従った代表的なクライアントアプリケーションの作成方法について説明します。詳細については、JAX-RS仕様およびJakarta EE仕様を参照してください。
JAX-RSクライアントアプリケーションの作成方法
JAX-RSクライアントアプリケーションの開発ではJAX-RSのクライアントAPIを使用して、Jakarta EEアプリケーションまたはJakarta 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」を参照してください。