HTTPクライアントとして使うjersey-client

JAX-RSのリファレンス実装であるJerseyには、RESTサービスを提供するサーバ側の実装(jersey-server)と、RESTサービスを利用するクライアント側の実装(jersey-client)とがあります。

RESTサービスではHTTPを介してサーバとクライアントとがやりとりしますから、当然jersey-clientはHTTPクライアントの機能を備えています。今回はJerseyの使い方の番外編として、RESTサービスを抜きにHTTPクライアントとしても、jersey-clientは使い勝手が良いという話をします。

ちなみに、JAX-RS 1.1にはクライアント側のAPIは定義されておらず、今年(2012年)のQ2にリリース予定のJAX-RS 2.0から定義されることになっています。(本稿執筆時点ではEarly Draft Reviewの段階)

まず使ってみる

何はともあれ、使ってみましょう。

Mavenを使用する場合は、以下のdependencyを追加します。

<dependency>
	<groupId>com.sun.jersey</groupId>
	<artifactId>jersey-client</artifactId>
	<version>1.11</version>
</dependency>

あるいは、http://jersey.java.net/からjarをダウンロードしてクラスパスに含めます。

まずは簡単なところで、あるサイトのHTMLを取得したいとしましょう。その場合以下のようなコードになります。

Client c = Client.create();
WebResource r = c.resource("http://www.example.com/");
String html = r.get(String.class);

これだけです。説明も不要なくらいごく簡潔ですね。ClientとWebResource

  1. Clientインスタンスを作る
  2. URLからWebResourceインスタンスを作る
  3. リクエストの結果をオブジェクトとして取得する

基本的にはこの3ステップで進んでいきます。 続きを読む HTTPクライアントとして使うjersey-client

JAX-RSのリファレンス実装、Jerseyの使い方(2)

前回は基本となるアノテーションを軸に、きわめて単純なRESTサービスを構築する手順を紹介しました。今回はやはりRESTといえばXML/JSONということで、XMLやJSONを返すサービスを構築しましょう。

(前回と言っても、ポストしたのがだいたい1年前の日付だということにたった今気づきました。)

XMLを返す

次のようなリソースクラスを作成します。

jerseytest.resources.LocalDocumentResource

package jerseytest.resources;

import java.io.IOException;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;

@Path("/indianTeas")
public class LocalDocumentResource {
	@GET
	public Document getDocument() {
		try {
			File f = new File("/path/to/indianTeas.xml");
			Document doc = DocumentBuilderFactory.newInstance()
					.newDocumentBuilder().parse(f);
			return doc;
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		return null;
	}
}

少しコード量が増えたもののやっていることは単純で、ローカルにあるXMLファイルをDocumentオブジェクトにして返しているだけです。 続きを読む JAX-RSのリファレンス実装、Jerseyの使い方(2)

JAX-RSのリファレンス実装、Jerseyの使い方(1)

標準のAPIを使ってプログラムを書いておくと色々と都合がいいので、RESTfulなWebサービスを作成しようとするときはJAX-RSを使いたいものです。

JavaEE6には初めから入っているJAX-RSですが、現場ではTomcat5.5(もちろんJava5です)とかが頑張っているのでそのままでは使えません。Apache Tomcat 5.5 と、JAX-RSのリファレンス実装である Jersey 1.4 を使って、単純なRESTサービスを実装する手順を紹介します。

インストールする

まずはJersey1.4のインストールから。Maven2を使っている場合は、java.netのリポジトリを設定します。

(pom.xml に以下を追加)
<repositories>
    <repository>
        <id>maven2-repository.dev.java.net</id>
        <name>Java.net Repository for Maven</name>
        <url>http://download.java.net/maven/2/</url>
        <layout>default</layout>
    </repository>
</repositories>

サーバアプリケーション側のライブラリは以下です。

(pom.xml に以下を追加)
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.4</version>
</dependency>

jarをそのまま使いたい場合は、 http://jersey.java.net/ のDownloadからライブラリをダウンロードしてクラスパスに含めましょう。 続きを読む JAX-RSのリファレンス実装、Jerseyの使い方(1)