WebサービスII (第13回) 2008年1月9日 植田龍男 本日の目的 Webサービスの歴史と将来の展望(1) WSDL 2.0 の登場 Jerseyプロジェクト Ver 0.5 による開発 この講義でやったこと Java SE 6 と JAXB, JAX-WS 2.0 のAPI JAX-WS 2.0の枠組みによる開発 サーバサイドは POJO + アノテーション アプリケーションサーバ Glassfish RESTful なWebサービスの存在 RESTful なWebサービスの新しい開発方法 Jerseyプロジェクト、WADL 2種類のWebサービス 「古典的」 Webサービス SOAPメッセージの交換 RPC型(メソッドの呼び出しをインタフェー スで定義) RESTful なWebサービス URIでアクセス可能、「裸の」XMLを送信 それぞれの長所・短所(昔) 古典的: WSDLによる厳格な定義 標準化・統合が保証 開発者の負担大、広い普及が遅れ RESTful: 開発の自由度大、手軽、普及が速い 標準化、統合は視野外 開発者にある程度のスキルは必要 それぞれの長所・短所(今) 古典的: WSDLによる厳格な定義 標準化・統合が保証 EoDの普及で負担は減 RESTful: 開発の自由度大、手軽、普及が速い 標準化・統合の可能性 EoDの導入も 復習:開発の手順の比較(1) Java SE 6 の SOAP型の開発 @Webservice アノテーションが付加され た POJO からスタート Jersey の RESTful 型の開発 @UriTemplate, @HttpMethod が付加さ れた POJO からスタート 復習:開発手順の比較(2) SOAP型 ツール wsgen によるソースとWSDLの自 動生成 => サーバが公開 http://sitename/servicename?wsdl RESTful型 apt + 専用のプロセッサによるソースと WADLの自動生成=>RESTfulサービスで 公開 http://sitename/applicaiton.wadl RESTful 型の課題 アノテーションの記述方法や処理方法のよ り洗練されたスタイル (Jerseyはまだ開発途上) すべてのサービスでWADLの存在の保証 WSDLとの統合 WSDL 2.0 まで 現行のWSDL Ver 1.1 (原理的にはSOAP、HTTPに非依存 実質的には HTTP上のSOAP ) その後に追加したい機能の登場 WS-I による標準化の試み RESTful なWebサービスの普及 (「HTTP と SOAP」という表現) Jersey 0.4 の自動処理 J2SE 5.0 の apt ツールでアノテーション を処理 HelloWorldService を記述するWADLを 自動生成 com/sun/ws/rest/wadl/resource の下に application.wadl WadlResouce のソースとバイトコード生成 =>application.wadlの情報を提供する Jersey 0.4 の不便だった点 apt の処理は「古い」スタイル 手動で apt の処理を呼び出す必要 (アノテーション処理の理解が必要) アノテーションの名称や形式の意味が直観 的にわかりにくい Jersey 0.5 では 処理は POJOのコンパイルのみ javac -cp $LIB/jsr311-api.jar Source.java application.wadl を提供するクラスの存在は 意識する必要がない(サーバ側で自動生成) よりわかりやすいアノテーション @Path, @GET など Jersey 0.4 の POJO @UriTemplate("/helloworld") public class HelloWorldResource { @HttpMethod("GET") @ProduceMime("text/plain") public String getClichedMessage() { return "Hello World!"; } } Jersey 0.5 の POJO @Path("/helloworld") public class HelloWorldResource { @GET @ProduceMime("text/plain") public String getClichedMessage() { return "Hello World!"; } } Jersey 0.4 => 0.5 WADLの利用はオプショナルではなくデフ ォルトとなった(常に利用可能) =WADLやそれを提供するクラスの存在は 意識しなくてより(知識がなくてもよい) apt やアノテーション処理の知識も不要 JAX-WS 2.0 の枠組みによる SOAP型の 開発スタイルのレベルにより近づいた 開発スタイルの「統合」も近い? 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 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月の予定 1/9 第13回:「Webサービスの未来(1)」 1/16 第14回:「Webサービスの未来(2)」 1/23 第15回:試験 (2階実習室にて)
© Copyright 2025 ExpyDoc