WebサービスII (第8回) 2007年11月14日 植田龍男
本日の目的 RESTful なWebサービス(再び) RESTful 用の新しい Java の API JSR-311 で策定中(ほぼ確定) 参照実装の提供 Jerseyプロジェクト (Glassfishのサブプロジェクトの1つ) 現在 ver 0.4 (年内に 0.5 ?)
前回までやったこと JAX-WS 2.0 のアーキテクチャ POJO+アノテーションを利用した開発 SOAPメッセージとメッソッド呼び出し WSDL
復習:Webサービスの構築開始 import javax.jws.*; @WebService public class Hello { public String sayHello( String name ) { return “Hello,” + name; }
RESTful なWebサービス REST(Representational State Transfer) HTTP で XMLのデータなどを交換するスタ イルのWebサービス SOAP(XML-RPC) vs. REST ?? JAX-WS は JAX-RPC の後継だが RESTに も対応可能 – JAXB がベース サービス固有のXML Java のクラス
javax.xml.ws パッケージ Service クラス Serviceのインナクラス enum ServiceMode ServiceMode.MESSAGE ServiceMode.PAYLOAD Provider, Dispatch, Response などのイ ンタフェース群
サンプル(Yahoo Image検索) Yahoo Image Search の API http://developer.yahoo.com/search/image /V1/imageSearch.html XML Schema も公開 http://search.yahooapis.com/ImageSearc hService/V1/ImageSearchResponse.xsd
サンプル実行までの手順 スキーマから xjc でJavaのソースを生成 生成されたソースのコンパイル(javac)
以前にやったことのまとめ Java SE 6 の新しいAPIとJAXBを利用 既存のRESTful なWebサービスにアクセス クライアント側はある程度対応できた
これからやりたいこと RESTful な Webサービスのサーバ側 JAX-WS の枠組みの中に構築 POJO + アノテーションのスタイル GlassFish サーバへ組み込み?
JSR-311 RESTful なWebサービスのAPIを策定 参照実装 Jerseyプロジェクト
サービスのサンプル @UriTemplate("/helloworld") public class HelloWorldResource { @HttpMethod("GET") @ProduceMime("text/plain") public String getClichedMessage() { return "Hello World!"; }
サービスのコンパイル ライブラリ jsr311-api.jar をクラスパスに指定 javac -cp ~/jersey-0.4-ea/lib/jsr311-api.jar HelloWorldResouce.java
サービスを確認するには? Webサーバと 「コンテナ」が必要 今回は Jerseyと共に配布されている
サーバのプログラム(1) public class Main { public static void main(String[] args) { HttpHandler handler = ContainerFactory.createContainer( HttpHandler.class, HelloWorldResource.class);
サーバのプログラム(2) HttpServer server = HttpServer.create( new InetSocketAddress(9998), 0); server.createContext("/", handler); server.setExecutor(null); server.start(); :
サーバのコンパイルと実行 ant もしくはシェルスクリプトで構築 #!/bin/bash LIB=~/jersey-0.4-ea/lib javac -classpath.:$LIB/activation.jar: $LIB/ant.jar:$LIB/comresrcgen.jar: $LIB/grizzly-1.0.13.jar:$LIB/http.jar: $LIB/jaxb-api.jar:$LIB/jaxb-impl.jar ….
確認 ブラウザからアクセス http://localhost:9998/helloworld