SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

JAX-RS/CDIのサポートでマイクロサービスの開発も容易に ~ Java EE 7正式対応で大幅強化された「WebSphere Application Server Liberty Core」

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード sample.zip (87.5 KB)

6 JAX-RS 2.0のクライアントAPIの利用

 JAX-RS 2.0における注目すべき変更点の一つが、クライアント用のAPIが追加されたことである。これまでのJAX-RSではRESTful Webサービスのサーバー側の実装にしか対応しておらず、クライアント側は依然としてJava標準のHTTPクライアントAPIで実装するか、サードパーティ製の非標準のライブラリを利用するしかなかった。それに対してJAX-RS 2.0では、サーバーからクライアントまで一貫して標準APIだけで容易に実装できるようになったわけでだ。

 そこで今度は、先ほど作成したZipcodeServiceに対して、JAX-RS 2.0のクライアントAPIを使ってリクエストを送ってみることにする。クライアントAPIを使ったリクエストの基本的な手順は次のようになる。

  1. Clientクラスのインスタンスを作成する
  2. リクエスト対象のURLを指定してWebTargetインスタンスを作成する
  3. リクエスト用のエンティティをEntityインスタンスとして作成する
  4. WebTargetからリクエストを処理するためのInvocation.Builderインスタンスを作成する
  5. Invocation.Builderを使ってリクエストを発行

 以上を踏まえて、ZipcodeServiceのjsonserachを利用するスタンドアロンなJavaプログラムを次のように実装した。

リスト6.1
public class JsonClientTest {
    public static void main(String[] args) {
        // リクエストターゲット
        Client client = ClientBuilder.newClient();
        WebTarget target = client.target("http://localhost:9080/ZipcodeService/ws/address/jsonsearch");
        
        String jsonText = "{\"zip\":\"5220002\"}";  // リクエスト用JSONデータの例
        
        // Entityとレスポンスの型を指定してリクエストを発行
        Entity<String> entity = Entity.entity(jsonText, MediaType.APPLICATION_JSON_TYPE);
        String response = target.request(MediaType.APPLICATION_JSON_TYPE).post(entity, String.class);
        
        System.out.println(response);
    }    
}

 ClientインスタンスはClientBuilderクラスのnewClient()メソッドで作成する。そして作成したClientインスタンスに対してtarget()メソッドを呼び出すことでWebTargetインスタンスが取得できる。リクエスト用のEntityはstaticなentity()メソッドを使って作成する。このメソッドには第1引数にエンティティデータ本体を、第2引数にエンティティデータのタイプを指定すればよい。ここではJSONデータを指定している。

 続いてWebTargetに対してrequest()メソッドを実行するとInvocation.Builderインスタンスが取得できるので、そこからpost()メソッドを実行することでリクエストを発行している。post()メソッドには引数としてEntityインスタンスと、レスポンスを受け取る型(この例ではString型)を指定する。

 このプログラムを実行すると、次のようなJSONデータが返ってくるはずだ。

リスト6.2
[
    { "address" : "滋賀県彦根市松原",
      "id" : "0075683",
      "zip" : "5220002" },
    { "address" : "滋賀県彦根市松原町",
      "id" : "0075684",
      "zip" : "5220002"}
]

 なお、Java EE 7を使わずにJAX-RS 2.0を単体で利用したい場合には、このサイトから参照実装をダウンロードすることができる。

次のページ
7 JSONを使ったWebサービス連携の試み

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

杉山 貴章(スギヤマ タカアキ)

有限会社オングスにて、Javaを中心としたソフトウェア開発や、プログラミング関連書籍の執筆、IT系の解説記事やニュース記事の執筆などを手がけている。そのかたわら、専門学校の非常勤講師としてプログラミングやソフトウェア開発の基礎などを教えている。著書に『Javaアルゴリズム+データ構造完全制覇』『Ja...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8834 2015/08/05 10:39

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング