Webサービス II (第1回)

WebサービスII (第11回)
2007年12月5日
植田龍男
本日の目的
RESTful なwebサービスの提供(続き)
Webサービスの統合と規格化
WADL(Web Application Definition
Language)
WADLプロジェクト
クライアント側の自動生成
wadl2javaツールの利用
前回までやったこと
RESTfulなWebサービスとは?
それへのアクセス(JAXB)
Jerseyプロジェクト
RESTfulなWebサービスをPOJOから
WADLの情報の自動生成=>クライアントへ
Jersey の自動処理
HelloWorldService を記述するWADLが
自動生成
com/sun/ws/rest/wadl/resource
の下に application.wadl
 同じディレクトリに
WadlResouce のソースとバイトコード生成
=>application.wadlの情報を提供する

復習:開発手順の比較(1)


SOAP型
ツール wsgen によるソースとWSDLの自
動生成 => サーバが公開
http://sitename/servicename?wsdl
RESTful型
apt + 専用のプロセッサによるソースと
WADLの自動生成=>RESTfulサービスで
公開
http://sitename/applicaiton.wadl
WADLプロジェクト


http://wadl.dev.java.net/
バイナリパッケージを展開
~ -+- wadl -+- bin -+- wadl2java <-- UNIX用のツール本体
|
+- wadl2java.bat <-- Windows用のツール本体
+- lib -+- wadl-cmdline-1.0-SNAPSHOT.jar
+- samples -+- ant -+- build.xml <-- ant でビルド
+- cmdline -+- run <-- UNIX用
|
+- run.cmd <-- Windows用
+- maven -+- pom.xml <-- maven でビルド
+- share -+- YahooSearch.wadl
WADLからJavaへ


ツール wadl2java
WADL の情報から クライアント側を生成
Endpoint.java
サービスにアクセスするクラス
JAXBによるデータのクラス
YahooSearchのWADLの場合



Endpointクラス
NewsSearchクラス
サービスにアクセスするメソッドを提供
Endpointの内部クラスとして提供
ResultSet, Result など
返されるXML文書の各要素に対応
(cf. JAXB, xjc )
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) {
YahooSearchのクライアントの例
import java.util.List;
import com.yahoo.search.*;
public class Client {
public static void main( String[] args ) {
try {
:
:
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) {
YahooSearchのクライアントの例
Endpoint.NewsSearch search
= new Endpoint.NewsSearch();
ResultSet set = search.getAsResultSet(
"jaxws_restful_sample", args[0] );
// 第1引数はID情報、第2引数は検索ワード
// URI などの情報は表に現れない!
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) {
YahooSearchのクライアントの例
// 結果の取り出し
// ここでも POJO のみの記述
List<Result> list = set.getResultList();
for( Result result : list ) {
System.out.println( result.getTitle() + ":"
+ result.getSummary() );
}
別のWADLを指定してみる


前回の HelloWorldResponse から自動生
成された application.wadl
plain/text のメッセージを返す
生成された Endpoint.java
public class Endpoint {
public static class Helloworld {
public Helloworld() { … }
public DataSource getAsTextPlain()
{…}
}
}