先週までJAX-WSでSOAPによるWebサービスに関して解説を行ってきました。とはいうものの,SOAPだけがWebサービスではありません。そう,RESTを使ったWebサービスを忘れることはできません。そこで,今週はJAX-WSでRESTful Webサービスを扱う方法を紹介していきます。

ところで,RESTful Webサービスといえば,JAX-RS (Java API for RESTful Web Services)を思いだす方がいるかもしれません。JAX-RSはその名の通りRESTful Webサービスを扱うためのAPIです。その仕様はJSR 311で策定されており,java.netのJerseyプロジェクトにおいて参照実装が公開されています。また,次のメジャーバージョンであるJava EE 6で採用される予定になっています。

では,JAX-WSと同じように,RESTful WebサービスのクライアントもJAX-RSを使用すればいいのではないかと思うのも不思議はありません。ところが,JAX-RSはサーバ側の機能のみを提供しており,クライアントに関してはスコープ外となっているのです。

ということで,JAX-WSを使ってRESTful Webサービスのクライアントを構築する方法を紹介しましょう。

JAX-WSでRESTTful Webサービス

SOAPのWebサービスのクライアントは次のような手順で行ってきました。

  1. Serviceオブジェクトを生成
  2. 必要に応じてポートをServiceオブジェクトに追加
  3. Dispatchオブジェクトを生成
  4. Dispatchオブジェクトのinvokeメソッドをコール
  5. 戻り値のXMLを加工

RESTを使用する場合も,この流れは同じです。では,何が異なるのでしょう。

RESTではリソースごとにURLが割り振られ,そのリソースに対してにHTTPのコマンドで操作を行います。JAX-WSではエンドポイントのURLを指定する場合,javax.xml.ws.ServiceクラスのaddPortメソッドで行います。RESTの場合,ポートの指定をRESTのリソースに応じた形式で指定します。また,javax.xml.ws.DispatchインタフェースもHTTPのどのコマンド(GETやPOST)を使用するのかを指定する必要があります。

では,実際にクライアントをJAX-WSで作ってみましょう。

Flickrのクライアントを作成する

せっかくなので,実際に公開されているRESTful Webサービスのクライアントを作成してみましょう。今回作成するのは,写真共有サイトのFlickrが提供しているWeb APIを使用してイメージ検索を行うというアプリケーションです。

検索フォームに単語を入力して,検索ボタンを押すと,その単語に関連するイメージのサムネイルを最大24表示します。サムネイルをクリックすると,Webブラウザが起動し,そのイメージを参照することができるというアプリケーションです。Flickrでイメージ検索をするということで,ベタなネーミングですがFlickrSearcherという名前にしましょう(図1)。

図1●FlickrSearcherのスクリーンショット
図1●FlickrSearcherの画面