ClientAPI事始め
【前提条件】
[参考資料]
JavaEE7 JavaDoc
Java(TM) EE 7 Specification APIs
JAX-RS2.0 仕様書
The Java Community Process(SM) Program - communityprocess - final
【概要】
JAX-RSのClientAPIを試してみます。
【クライアントクラス】
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 jp.glory.resources.client.bean.FirstClientBean; public class FirstClient { public static void main(final String[] args) { sendStringResouceRequest(); sendBeanResouceRequest(); } private static void sendStringResouceRequest() { final Client client = ClientBuilder.newClient(); final WebTarget target = client.target("http://localhost:8080/JAX-RS/service/FirstClient/String"); final Invocation.Builder builder = target.request(); final String responseString = builder.get(String.class); System.out.println(responseString); } private static void sendBeanResouceRequest() { final Client client = ClientBuilder.newClient(); final WebTarget target = client.target("http://localhost:8080/JAX-RS/service/FirstClient/Bean"); final Invocation.Builder builder = target.request(); final FirstClientBean responseBean = builder.get(FirstClientBean.class); System.out.println(responseBean.getFirstName()); System.out.println(responseBean.getLastName()); } }
クライアントAPIを使用するにはjavax.ws.rs.client.Clientクラスのオブジェクトを作成します。
Clientクラスはjavax.ws.rs.client.ClientBuilderクラスの
newClientメソッドを使用します。
Client#targetメソッドに対象となるURLをパラメータとして渡します。
targetメソッドを実行するとjavax.ws.rs.client.WebTargetクラスのオブジェクトが返却されます。
WebTarget#requestメソッドを実行するとリクエストを作成する
javax.ws.rs.client.Invocation.Builderクラスのオブジェクトが作成されます。
Builder#getメソッドを実行するとリクエストが投げられます。
getメソッドにはレスポンスの型を指定します。
【Bean】
先ほどのサンプルでは独自に作成したFirstClientBeanクラスを
getメソッドの戻り値の型として指定しています。
独自のBeanを戻り値に指定する場合は
デフォルトコンストラクタか、パラメータが0個のコンストラクタが必要になります。
【リソースクラス】
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.core.Response; import jp.glory.resources.client.bean.FirstClientBean; @Path("/FirstClient") public class FirstClientResource { @GET @Path("/String") public Response getString() { return Response.ok("Response is returining.").build(); } @GET @Path("/Bean") public Response getBean() { final FirstClientBean bean = new FirstClientBean(); bean.setFirstName("firstName"); bean.setLastName("lastName"); return Response.ok(bean).build(); } }
リソースクラスは文字列を返すものと
Beanを返却するものを作成します。
【実行結果】
クライアントのクラスを実行すると↓のような結果が出力されます。
Response is returining. firstName lastName
ちゃんと文字列とBeanが返却されていることがわかります。