Presentation is loading. Please wait.

Presentation is loading. Please wait.

WebサービスII (第12回)‏ 2007年12月19日 植田龍男.

Similar presentations


Presentation on theme: "WebサービスII (第12回)‏ 2007年12月19日 植田龍男."— Presentation transcript:

1 WebサービスII (第12回)‏ 2007年12月19日 植田龍男

2 おわび: 先週は急に休講となりすみませんでした

3 本日の目的 Webサービスの統合と規格化(続き)‏ Jerseyプロジェクト+WADLプロジェクト
サーバ側 (WADLの自動生成) - Jersey  クライアント側の自動生成 - WADL

4 前回までやったこと Jerseyプロジェクト RESTfulなWebサービスをPOJOから WADLの情報の自動生成=>クライアントへ
wadl2javaツール

5 Jersey の自動処理 HelloWorldService を記述するWADLが 自動生成
com/sun/ws/rest/wadl/resource の下に application.wadl 同じディレクトリに WadlResouce のソースとバイトコード生成 =>application.wadlの情報を提供する

6 サーバ側の開発の仕組み apt + 専用のプロセッサによるソースと WADLの自動生成=>RESTfulサービスで 公開

7 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

8 WADLからJavaへ ツール wadl2java WADL の情報から クライアント側を生成 Endpoint.java
サービスにアクセスするクラス JAXBによるデータのクラス

9 YahooSearchのWADLの場合 Endpointクラス NewsSearchクラス サービスにアクセスするメソッドを提供
ResultSet, Result など 返されるXML文書の各要素に対応 (cf. JAXB, xjc )‏

10 YahooSearch の WADL(1)‏ <application xmlns=" "> <grammars> <include href="NewsSearchResponse.xsd"/> <include href="NewsSearchError.xsd"/> </grammars> :

11 YahooSearch の WADL(2)‏ <resources base=" sSearchService/V1/"> <resource path="newsSearch"> : <method href="#search"/> </resource> </resources>

12 YahooSearch の WADL(3)‏ <method name="GET" id="search">
<request> <param name="query" type="xsd:string" required="true" style="query"> </param><param name="results" type="xsd:int" default="10" </param>

13 対応する URLのパターン SearchService/V1/newsSearch?query=Ja pan&results=20&.....

14 YahooSearch の WADL(4)‏ <response> <representation
mediaType="application/xml" element="yn:ResultSet"> </representation> </response> </method> </application>

15 返されるXML文書の例 <ResultSet xmlns=”urn:yahoo:yn”> <Result>
<title>... </title> <url> ... </url> : </Result> <Result> ... </Result> </ResultSet>

16 YahooSearchのクライアントの例
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) { 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 { :

17 YahooSearchのクライアントの例
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) { 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_sa mple", args[0] ); // 第1引数はID情報、第2引数は検索ワード // URI などの情報は表に現れない!

18 YahooSearchのクライアントの例
import java.util.List; import com.yahoo.search.*; public class Client { public static void main( String[] args ) { 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() ); }

19 別のWADLを指定してみる 前回の HelloWorldResponse から自動生 成された application.wadl
plain/text のメッセージを返す

20 Helloworld の WADL(全体) <application xmlns=" <resources base=" <resource path="/helloworld"> <method name="GET"> <response> <representation mediaType="text/plain"/> </response> </method> </resource> </resources> </application>

21 Helloworld の WADL(前半部)
<application xmlns=" <resources base=" <resource path="/helloworld"> <method name="GET"> <response> <representation mediaType="text/plain"/>

22 生成された Endpoint.java public class Endpoint {
public static class Helloworld { public Helloworld() { … } public DataSource getAsTextPlain()‏ { … } }

23 クライアントプログラム import hello.Endpoint; import java.io.*; import javax.activation.DataSource; public class HelloClient { public static void main( String[] args ) {

24 クライアントプログラム(2) Endpoint.Helloworld service = new Endpoint.Helloworld(); DataSource source = service.getAsTextPlain(); Reader reader = new InputStreamReader( source.getInputStream() );

25 手順のまとめ Jerseyによるサーバサイドと WADLの提供 POJOからの自動生成 第10回の課題を参照:ポイントは apt
によるアノテーションの処理 WADL の取得(クライアント側) WADLからのJavaの自動生成 第11回の課題を参照: ポイントは wadl2java

26 今後の予定 1/9 第13回:「Webサービスの未来(1)」 1/16 第14回:「Webサービスの未来(2)」
1/23 第15回:試験 (2階実習室にて)


Download ppt "WebサービスII (第12回)‏ 2007年12月19日 植田龍男."

Similar presentations


Ads by Google