web サービス ii ( 第 1 3 回 )

24
Web ササササ II ( サ 13 サ ) 2008 サ 1 サ 9 サ ササササ

Upload: baka

Post on 12-Jan-2016

48 views

Category:

Documents


4 download

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 Presentation

TRANSCRIPT

Page 1: Web サービス II ( 第 1 3 回 )

Web サービス II ( 第 13 回 )

2008 年 1 月 9 日植田龍男

Page 2: Web サービス II ( 第 1 3 回 )

本日の目的Web サービスの歴史と将来の展望 (1)WSDL 2.0 の登場Jersey プロジェクト  Ver 0.5 による開発

 

Page 3: Web サービス II ( 第 1 3 回 )

この講義でやったこと Java SE 6 と JAXB, JAX-WS 2.0 の

API JAX-WS 2.0 の枠組みによる開発 サーバサイドは POJO + アノテー

ション アプリケーションサーバ GlassfishRESTful な Web サービスの存在RESTful な Web サービスの新しい開発

方法 Jersey プロジェクト、 WADL

Page 4: Web サービス II ( 第 1 3 回 )

2種類の Web サービス 「古典的」 Web サービス SOAP メッセージの交換 RPC 型 ( メソッドの呼び出しをインタ

フェースで定義 ) RESTful な Web サービス URI でアクセス可能、「裸の」 XML を

送信

Page 5: Web サービス II ( 第 1 3 回 )

それぞれの長所・短所 ( 昔 ) 古典的: WSDL による厳格な定義 標準化・統合が保証 開発者の負担大、広い普及が遅れ RESTful:

開発の自由度大、手軽、普及が速い 標準化、統合は視野外 開発者にある程度のスキルは必要

Page 6: Web サービス II ( 第 1 3 回 )

それぞれの長所・短所 ( 今 ) 古典的: WSDL による厳格な定義 標準化・統合が保証 EoD の普及で負担は減 RESTful:

開発の自由度大、手軽、普及が速い 標準化・統合の可能性 EoD の導入も

Page 7: Web サービス II ( 第 1 3 回 )

復習:開発の手順の比較 (1) Java SE 6 の SOAP 型の開発 @Webservice アノテーションが付加

された POJO からスタート Jersey の RESTful 型の開発 @UriTemplate, @HttpMethod が付

加された POJO からスタート

Page 8: Web サービス II ( 第 1 3 回 )

復習 : 開発手順の比較 (2) SOAP 型 ツール wsgen によるソースと

WSDL の自動生成 => サーバが公開 http://sitename/servicename?wsdl RESTful 型 apt + 専用のプロセッサによるソース

と WADL の自動生成 =>RESTful サービスで公開

http://sitename/applicaiton.wadl

Page 9: Web サービス II ( 第 1 3 回 )

RESTful 型の課題 アノテーションの記述方法や処理方法

のより洗練されたスタイル (Jersey はまだ開発途上 ) すべてのサービスで WADL の存在の保

証 WSDL との統合

Page 10: Web サービス II ( 第 1 3 回 )

WSDL 2.0 まで 現行の WSDL Ver 1.1

( 原理的には SOAP 、 HTTP に非依存 実質的には HTTP 上の SOAP ) その後に追加したい機能の登場 WS-I  による標準化の試み RESTful な Web サービスの普及 ( 「 HTTP と SOAP 」という表現 )

Page 11: Web サービス II ( 第 1 3 回 )

Jersey 0.4 の自動処理 J2SE 5.0 の apt ツールでアノテー

ションを処理HelloWorldService を記述する

WADL を自動生成 com/sun/ws/rest/wadl/resource の下に application.wadl WadlResouce のソースとバイトコー

ド生成=> application.wadl の情報を提供す

Page 12: Web サービス II ( 第 1 3 回 )

Jersey 0.4 の不便だった点 apt の処理は「古い」スタイル 手動で apt の処理を呼び出す必要 ( アノテーション処理の理解が必要 )アノテーションの名称や形式の意味が

直観的にわかりにくい

Page 13: Web サービス II ( 第 1 3 回 )

Jersey 0.5 では 処理は POJO のコンパイルのみ javac -cp $LIB/jsr311-api.jar

Source.java application.wadl を提供するクラスの存

在は意識する必要がない ( サーバ側で自動生成 )

よりわかりやすいアノテーション @Path, @GET など

Page 14: Web サービス II ( 第 1 3 回 )

Jersey 0.4 の POJO

@UriTemplate("/helloworld")

public class HelloWorldResource {

@HttpMethod("GET")

@ProduceMime("text/plain")

public String getClichedMessage() {

return "Hello World!";

} }

Page 15: Web サービス II ( 第 1 3 回 )

Jersey 0.5 の POJO

@Path("/helloworld")

public class HelloWorldResource {

@GET

@ProduceMime("text/plain")

public String getClichedMessage() {

return "Hello World!";

} }

Page 16: Web サービス II ( 第 1 3 回 )

Jersey 0.4 => 0.5 WADL の利用はオプショナルではなくデ

フォルトとなった ( 常に利用可能 )

= WADL やそれを提供するクラスの存在は意識しなくてより ( 知識がなくてもよい )

apt やアノテーション処理の知識も不要 JAX-WS 2.0 の枠組みによる  SOAP 型

の開発スタイルのレベルにより近づいた 開発スタイルの「統合」も近い?

Page 17: Web サービス II ( 第 1 3 回 )

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

Page 18: Web サービス II ( 第 1 3 回 )

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>

Page 19: Web サービス II ( 第 1 3 回 )

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"/>

Page 20: Web サービス II ( 第 1 3 回 )

生成された Endpoint.java

public class Endpoint { public static class Helloworld { public Helloworld() { … } public DataSource

getAsTextPlain() { … } } }

Page 21: Web サービス II ( 第 1 3 回 )

クライアントプログラム

import hello.Endpoint;

import java.io.*;

import javax.activation.DataSource;

   public class HelloClient {

     public static void main(

                String[] args ) {

Page 22: Web サービス II ( 第 1 3 回 )

クライアントプログラム (2)

Endpoint.Helloworld service

= new Endpoint.Helloworld();

DataSource source

= service.getAsTextPlain();

Reader reader

= new InputStreamReader(

source.getInputStream() );

Page 23: Web サービス II ( 第 1 3 回 )

手順のまとめ Jersey によるサーバサイドと WADL の提

供 POJO からの自動生成 第 10 回の課題を参照 : ポイントは apt

によるアノテーションの処理 WADL の取得 ( クライアント側 ) WADL からの Java の自動生成 第 11 回の課題を参照: ポイントは wadl2java

Page 24: Web サービス II ( 第 1 3 回 )

1月の予定 1/9 第13回:「 Web サービスの未

来 (1) 」 1/16 第14回:「 Web サービスの未

来 (2) 」 1/23  第15回:試験 ( 2階実習室に

て )