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」を参照してください。