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(); // ←**この行を追加** } }