Download presentation
Presentation is loading. Please wait.
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階実習室にて)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.