先週まで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サービスのクライアントは次のような手順で行ってきました。
- Serviceオブジェクトを生成
- 必要に応じてポートをServiceオブジェクトに追加
- Dispatchオブジェクトを生成
- Dispatchオブジェクトのinvokeメソッドをコール
- 戻り値の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)。
