web サービス ii ( 第 1 3 回 )
DESCRIPTION
Web サービス II ( 第 1 3 回 ) . 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 サービスの存在 - PowerPoint PPT PresentationTRANSCRIPT
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 + アノテー
ション アプリケーションサーバ GlassfishRESTful な 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階実習室に
て )