JavaEE 6リリースはRestful Webサービス(JAX-RS)サポートを含んでいる。これは、Representational State Transfer (REST)スタイルのソフトウェアアーキテクチャに従う軽量のWebサービスの構築をPOJOベースのフレームワークを提供する。JAX-RS APIはJSR 311の一部であり、JavaクラスメソッドをWebサービスとして外部に提供するために使われる行くつかのアノテーションを提供する。
JAX-RSは自動的にJavaの型をMIMEメディアタイプに変換する。例えば、クラスメソッドに"@Produces (MediaType.TEXT_PLAIN)"というアノテーションをつけたら、JAX-RSはそのJavaの型をプレーンテキストをあらわす"text/plain"MIMEタイプに変換し、クライアントへのHTTPレスポンスの中にそのタイプの内容を返すだろう。
Java EE 6はこの技術の最新のリリースJAX-RS 1.1に含まれている。このバージョンはメンテナンスリリースであり、JAX-RSをJava 6 EEの新しい機能に合わせるためのものだ。Jerseyは、そのJAX-RS仕様のオープンソースリファレンス実装である。Jersey 1.1.5はJAX-RS 1.1を実装している。
アノテーションはリソースを識別しHTTPリクエストを扱うために必要とされる情報を付与する。JAX-RSでサポートされているアノテーションをいくつかあげると次のようなものがある:
Path: このアノテーションはリソースの相対パスを指示する。@Pathはリソースクラスまたはクラスメソッドがリクエストを扱うことになるURIパスを特定する。
GET: @GETアノテーションはアノテーションのついたメソッドがHTTP GETリクエストを扱うものであるということを示す。クライアントがウェブリソースのURIにリクエストを行った時、JAX-RSランタイムはそのGETリクエストを扱うためにこのアノテーションのついたjavaメソッドを起動する。
POST: @POSTアノテーションはアノテーションのついたメソッドがHTTP POSTリクエストに応答するものであることを示す。
Produces: このアノテーションはリソースのメソッドが生成し、クライアントに返却することができるMIMEメディアタイプを示す。
Consumes: @Consumesアノテーションはリソースのメソッドがクライアントから受け入れられるMIMEメディアタイプを示す。@Producesアノテーションの場合と同じように、@Consumesがあるクラスに対して指示されたら、そのクラスのすべてのメソッドに適用される。@Consumesがメソッドに対して指示されたら、クラスに対して指示したいかなる@ConsumesアノテーションもそのMIMEタイプで上書きされる。
JAX-RSはまた、リクエストから情報を取り出すのに使われるパラメータベースのアノテーションのような便利な機能を他にも持っている。これらのアノテーションの一つが@QueryParamであり、これはリクエストURLのクエリ構成要素からクエリパラメータを取り出すために使われる。他にもパラメータベースのアノテーションがあり、@MatrixParamはURLパスの断片から情報を取り出すために、@HeaderParamはHTTPヘッダから情報を取り出すために、そして@CookieParamはcookieに関連したHTTPヘッダに宣言されたcookieから情報を取り出すために利用される。
他にも、JavaでRESTfulWebサービスを構築し利用することに関する作業をずっと簡単にするかなりの数のユーティリティクラスやインターフェースがある。これらのクラスには以下のようなものがある:
- MediaTypeクラスはMIMEメディアタイプを抽象化するために使われる。
- UriInfoはアプリケーションとリクエストURIの情報にアクセスするためのインターフェースである。
- UriBuilderはユーティリティクラスを把握しているURIテンプレートであり、その構成要素からURIを構築するために利用される。
- ResponseはHTTPレスポンスを表現する抽象クラスである。これはアプリケーションがランタイムにメタデータを提供する必要があるときに戻り値インスタンスとランタイムの間の契約を定義する。アプリケーションクラスはこのクラスを直接拡張することもできるし、ResponseBuilderを使ってインスタンスを作成するためにスタティックメソッドの一つを利用することもできる。
- Response.ResponseBuilderはビルダーパターンにそってResponseオブジェクトを生成するクラスである。
JBoss由来のRESTEasyフレームワークはJAX-RS仕様のもう一つの実装である。ApacheのオープンソースサービスフレームワークCXFもそのバージョン2.3リリースの一部としてJAX-RS 1.1のサポートを提供するだろう。