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

Slides:



Advertisements
Similar presentations
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
Advertisements

Web サービス II ( 第 13 回 )‏ 2008 年 1 月 9 日 植田龍男. 本日の目的 Web サービスの歴史と将来の展望 (1) WSDL 2.0 の登場 ‏ Jersey プロジェクト Ver 0.5 による開発.
プログラミング第5回 1 while ループ 文字列の操作
応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
Apache Camel Data Format Component Apache Camel
2006年9月27日 植田龍男 Webサービス II (第1回) 年9月27日 植田龍男.
社会人学習講座 「Javaプログラミング概論」
第9回 2007年6月22日 応用Java (Java/XML).
JPAを利用した RESTful Webサービスの開発
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Java I 第2回 (4/18)
Applet 岡部 祐典 鈴木 敬幸.
Apache Camel Data Format Component Apache Camel
WebサービスII (第10回) 2007年11月28日 植田龍男.
Iアプリプログラミング その1  鳥居秀徳.
アルゴリズムとプログラミング (Algorithms and Programming)
ネットワークプログラミング論 平成27年10月12日 森田 彦.
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
プログラミング基礎I(再) 山元進.
第5回 2007年5月25日 応用Java (Java/XML).
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
WebサービスII (第8回) 2007年11月14日 植田龍男.
JSFによるWebアプリケーション開発 第6回
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
2005年10月6日 植田龍男 Webサービス II (第2回) 年10月6日 植田龍男.
第20章 Flyweight ~同じものを共有して無駄をなくす~
Bridge Pattern
ネットワークプログラミング論 平成28年10月17日 森田 彦.
RMI ソフトウェア特論 第6回 /
Webサービスを使った クライアント・プログラム
Stateful Session Beans
第12回 2007年7月13日 応用Java (Java/XML).
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
8.1 例外処理 8.2 catchブロックの検索 8.3 throwステートメント 8.4 例外とエラークラス 8.6 独自の例外
第10回 2007年6月29日 応用Java (Java/XML).
Webサービス II(第3回) 2007年10月10日.
UDPマルチキャストチャット                    空川幸司.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
第11回 2007年7月6日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第8回 2007年6月15日 応用Java (Java/XML).
第3回 2007年4月27日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
WebサービスII (第7回) 2007年11月7日 植田龍男.
第6回 2007年6月1日 応用Java (Java/XML).
Javaによる Webアプリケーション入門 第6回
暗号技術 ~JAVAプログラム①~ (5週目)
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
Jakarta Struts (2) ソフトウェア特論 第11回.
Javaによる Webアプリケーション入門 第2回
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
2006年11月8日 植田龍男 Webサービス II (第7回) 年11月8日 植田龍男.
Javaによる Webアプリケーション入門 第11回
第13回 2007年7月20日 応用Java (Java/XML).
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
Servlet ソフトウェア特論 第7回.
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
Servlet J2EE I (データベース論) 第12回 /
Servlet データベース論 第6回.
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
EntityManager と EJB QL EJB 3.0 コース 第8回 2006年8月5日.
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
Presentation transcript:

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

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

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

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

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

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

WADLプロジェクト http://wadl.dev.java.net/ バイナリパッケージを展開  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クラス サービスにアクセスするメソッドを提供 ResultSet, Result など 返されるXML文書の各要素に対応 (cf. JAXB, xjc )‏

YahooSearch の WADL(1)‏ <application xmlns="http://research.sun.com/wadl/2006/10 "> <grammars> <include href="NewsSearchResponse.xsd"/> <include href="NewsSearchError.xsd"/> </grammars> :

YahooSearch の WADL(2)‏ <resources base="http://api.search.yahoo.com/New sSearchService/V1/"> <resource path="newsSearch"> : <method href="#search"/> </resource> </resources>

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>

対応する URLのパターン http://http://api.search.yahoo.com/News SearchService/V1/newsSearch?query=Ja pan&results=20&.....

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

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

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 { :

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 などの情報は表に現れない!

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() ); }

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

Helloworld の WADL(全体) <application xmlns="http://research.sun.com/wadl/2006/10"> <resources base="http://localhost:9998/"> <resource path="/helloworld"> <method name="GET"> <response> <representation mediaType="text/plain"/> </response> </method> </resource> </resources> </application>

Helloworld の WADL(前半部) <application xmlns="http://research.sun.com/wadl/2006/10"> <resources base="http://localhost:9998/"> <resource path="/helloworld"> <method name="GET"> <response> <representation mediaType="text/plain"/>

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

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

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

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

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