プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

Restlet-1.0b9の初歩を試す。

JavaでRESTなサービスにアクセスしたり、逆にRESTなサービスを提供したりするためのライブラリです。
http://www.restlet.org/
今回は、チュートリアル(http://www.restlet.org/tutorial)中の「3. Listening to Web browsers」を参考にRESTサービスをつくり、「2. Retrieving the content of a Web page」を参考に作ったRESTサービスにアクセスするクライアントを作成しました。
<サンプルを試す手順>

  • http://www.restlet.org/downloads/restlet-1.0b9.zipより、Restletの最新バージョンをダウンロードする
  • restlet-1.0b9.zipを適当な場所に展開する
  • http://briefcase.yahoo.co.jp/taka_javaより、RestletSample.zipをダウンロードする
  • RestletSample.zipを展開し、ファイルをrestlet-1.0b9.zipを展開したフォルダの直下にコピーする
  • compile.batを実行する
  • runServer.batを実行する (ポート8182で待ち受けを開始する)
  • runClient.batを実行する (http://localhost:8182/にアクセスする)

RestletClientは、チュートリアルのままだと何も表示されませんでした。

		Client client = Manager.createClient(Protocols.HTTP, "My client");
		client.get("http://localhost:8182/").getOutput().write(System.out);

おかしいなぁと思って以下のように書き換えてみたところ、なぜか表示されました。

		Client client = Manager.createClient(Protocols.HTTP, "My client");
		System.out.println(client.get("http://localhost:8182/").getOutput());

なんかあんまり釈然としないので、ソースを追ってみたところ、flushしてない疑惑が沸いてきたので、

		Client client = Manager.createClient(Protocols.HTTP, "My client");
		client.get("http://localhost:8182/").getOutput().write(System.out);
		System.out.flush();

としてみたところ、同様に正しく表示されました。ベータ版だから?

RestletServer.java

import org.restlet.AbstractRestlet;
import org.restlet.Manager;
import org.restlet.Restlet;
import org.restlet.RestletCall;
import org.restlet.data.MediaTypes;
import org.restlet.data.Protocols;

import com.noelios.restlet.data.StringRepresentation;

public class RestletServer
{
	public static void main(String[] args) throws Exception
	{
		// Creating a minimal Restlet returning "Hello World"
		Restlet handler = new AbstractRestlet()
		{
			public void handle(RestletCall call)
			{
				call.setOutput(new StringRepresentation("Hello World!", MediaTypes.TEXT_PLAIN));
			}
		};

		// Create the HTTP server and listen on port 8182
		Manager.createServer(Protocols.HTTP, "My server", handler, null, 8182).start();
	}
}

RestletClient.java

import org.restlet.Manager;
import org.restlet.connector.Client;
import org.restlet.data.Protocols;

public class RestletClient {
	public static void main(String[] args) throws Exception
	{
		// Outputting the content of a Web page
		Client client = Manager.createClient(Protocols.HTTP, "My client");
		client.get("http://localhost:8182/").getOutput().write(System.out);
		System.out.flush();	// ←**この行を追加**
	}
}