RESTfullなWebサービスとJerseyプロジェクト

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)
クライアントのコンパイル(javac)
実行(java)
以前にやったことのまとめ



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と共に配布されている
軽量Webサーバにプログラムを直接組み
込む
サーバのプログラム(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