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() {…} } }
© Copyright 2024 ExpyDoc