WebサービスII (第7回) 2007年11月7日 植田龍男.

Slides:



Advertisements
Similar presentations
Web サービス II ( 第 13 回 )‏ 2008 年 1 月 9 日 植田龍男. 本日の目的 Web サービスの歴史と将来の展望 (1) WSDL 2.0 の登場 ‏ Jersey プロジェクト Ver 0.5 による開発.
Advertisements

応用 Java(Java/XML) 第 10 回 2006 年 7 月 14 日 植田龍男. 後半の内容の予定 XPath (6/9) 、 XSLT (6/16) 名前空間 (Namespace) (6/16) XML 文書の妥当性の検証 (6/23) DTD, W3C XML Schema SOAP.
WebサービスII (第12回)‏ 2007年12月19日 植田龍男.
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
2006年9月27日 植田龍男 Webサービス II (第1回) 年9月27日 植田龍男.
社会人学習講座 「Javaプログラミング概論」
Webサービスに関する基本用語 Masatoshi Ohishi / NAOJ & Sokendai
第9回 2007年6月22日 応用Java (Java/XML).
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
Visual Studio 2005による XML Web サービス入門
Applet 岡部 祐典 鈴木 敬幸.
WebサービスII (第10回) 2007年11月28日 植田龍男.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
WSDL と JAX-RPC 年10月13日 Webサービス II (第3回) WSDL と JAX-RPC 年10月13日.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
JavaServlet&JSP入門 01K0018 中村太一.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
2005年11月17日 Webサービス II (第6回) 年11月17日.
WebサービスII (第8回) 2007年11月14日 植田龍男.
社会人学習講座 「Javaプログラミング概論」
JavaBeans とJSP データベース論 第5回.
JSFによるWebアプリケーション開発 第6回
WSDL と JAX-RPC 年10月20日 Webサービス II (第4回) WSDL と JAX-RPC 年10月20日.
2005年10月6日 植田龍男 Webサービス II (第2回) 年10月6日 植田龍男.
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
Javaプログラムの実行まで バイト Javaの コード 実行 ソースコード Java ファイル名 ファイル名 abc.java
RMI ソフトウェア特論 第6回 /
入出力データ型に透過な Webサービス動的実行システム 松江工業高等専門学校 情報工学科 越田高志 情報処理学会第68回全国大会
コンパイラの解析 (2) GCJのデータ構造 - 1.
Webサービスを使った クライアント・プログラム
Stateful Session Beans
第12回 2007年7月13日 応用Java (Java/XML).
変数のスコープ クラス クラス変数 すべてのメソッドの外側でstaticで定義
第10回 2007年6月29日 応用Java (Java/XML).
SOAP/UDDI/WSDLによるB2Bシステムの開発
SOAP/UDDI/WSDLによるB2Bシステム構築の一事例
Webサービス II(第3回) 2007年10月10日.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第11回 2007年7月6日 応用Java (Java/XML).
暗黙的に型付けされる構造体の Java言語への導入
第3回 2007年4月27日 応用Java (Java/XML).
第6回 2007年6月1日 応用Java (Java/XML).
第2回 2007年4月20日 応用Java (Java/XML).
2006年11月8日 植田龍男 Webサービス II (第7回) 年11月8日 植田龍男.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
第13回 2007年7月20日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
応用Java(Java/XML) 第7回 2006年6月16日 植田龍男.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
Javaによる Webアプリケーション入門 第4回
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
2006年10月18日 植田龍男 Webサービス II (第4回) 年10月18日 植田龍男.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
応用Java(Java/XML) 第8回 2005年6月9日 植田龍男.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Presentation transcript:

WebサービスII (第7回) 2007年11月7日 植田龍男

この時間の目標 JAX-WS 2.0 のアーキテクチャのまとめ クライアント側のクラスの働き SOAPメッセージとメッソッド呼び出し

復習:Webサービスの構築開始 import javax.jws.*; @WebService public class Hello { public String sayHello( String name ) { return “Hello,” + name; }

Java SE 6:Javaの側から構築 実装クラスを「ごく普通の Java」のプログラ ムとして書く ( POJO = Plain Old Java Object ) Webサービスのアノテーションを付ける (最低限なら @WebService のみ) サーバに渡す サーバ(Glassfish ver 2)の側で自動生成

自動生成(wsgenツール) javac hello/Hello.java wsgen -cp . hello.Hello hello.jaxws 以下に sayHello.java, sayHelloResponse.java sayHello.class sayHelloResponse.class (HelloService.wsdl, HelloServiceTypes.xsd)

サーバ側のまとめ サービスの実装クラス( Hello ) メソッド呼び出しの引数と返り値のクラス メソッド名(sayHello) プロパティ args0, args1,… メソッド名+Response(sayHelloResponse) プロパティ _return WSDL – 公開のURL ( Schema定義は分離したファイルに格納)

管理画面でのWSDLの確認

管理画面でサービスの確認(3)

管理画面でサービスの確認(4)

クライアントプログラムの準備 自動生成ツール wsimport wsimport HelloService.wsdl または Hello.class, HelloService.class, ObjectFactory.class SayHello.class, SayHelloResponse.class

クライアント側の構成 サービスのインタフェース( Hello ) サービスのインスタンスを取り出す「サービ ス」のクラス ( HelloService ) メソッドの引数と返り値のクラス ( sayHello, sayHelloResponse ) JAXBでインスタンス生成に必要なクラス ObjectFactory ( XML => Java で必要)

生成されたクラスの正体は? ツール javap (単純な逆アセンブラ) javap Hello  interface Hello javap HelloService  class extends javax.xml.ws.Service javap sayHello  class sayHello javap sayHelloResponse  class sayHelloResponse

WSDL のどこにクラスの情報? sayHello, sayHelloResponse <definitions> <types> include schema </types> : クラスの内容はJAXBによって完全に復元 サーバ側と「同じクラス」がクライアント側にも 存在すると考えてよい (データとしてやり取りされるクラスも同様)

WSDLのどこに情報が?(2) Hello インタフェース <definitions> : <portType> <operation>メソッド定義</operation> </portType> サーバ側の実装の情報は存在しない

WSDLのどこに情報が HelloService クラス Helloインタフェースの情報 + javax.xml.ws.Service クラス 拡張部分は 自身のコンストラクタ getHelloPort() メソッド -- Helloを実装したインスタンスを得る

クライアントプログラムの作成 public class HelloClient { public static void main ( String[] args ) { HelloService service = new HelloService(); Hello hello = service.getHelloPort(); String message =hello.sayHello( "Tatsuo" ); System.out.printf ( message ); }

Hello hello の謎 hello は Helloを実装したクラス 「代理オブジェクト」として振る舞うクライア ント側のクラス hello.sayHello( “Tatsuo” ); // サービスを呼び出す でも、どこに存在? (クラスファイルは生成されていない?) 以前のWebサービスでは HelloStab.class

クラス名を強引に調べてみると Hello hello = service.getHelloPort(); System.out.println( hello.getClass().getName() ); Proxy16 のような不思議な名前が出力 指定されたインタフェースを元に動的に生 成されるクラス

SOAPとは? XMLの形式でメッセージを交換 中立なデータ形式(事実上の標準) システム、言語、アプリケーション非依存 ver 1.0 http://www.w3.org/2000/xp/Group/ ver 1.2 http://www.w3.org/TR/2003/REC- soap12-part1-20030624/ メッセージが「構造」を持つ データ構造の定義は XML Schema で

そもそも SOAP とは何の略? SOAP(Simple Object Access Protocol) 登場当時の認識 現在:広範囲の応用範囲を支える基礎技術 「SOAP は SOAP」

SOAP のメッセージの構造 <SOAP-ENV:Envelope xmlns:SOAP-ENV= “ http://schemas.xmlsoap.org/soap/envelope/”>   <SOAP-ENV:Header> </SOAP-ENV:Header> <SOAP-ENV:Body> <mymessage> Hello </mymessage> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

SOAPMessageの例(Hello) <SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/ "> <SOAP-ENV:Body> <sayHello> <arg0>Tomoharu</arg0> </sayHello> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

SOAPMessageの例(Hello) <SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/ "> <SOAP-ENV:Body> <sayHelloResponse> <return>Hello,Tomoharu</return> </sayHelloResponse> </SOAP-ENV:Body>

Java SE 6 : javax.xml.soap SOAPMessage クラス SOAPのメッセージを表す(送受信とも) getSOAPHeader(), getSOAPBody(), addAttachment(), getAttachment() など、メッセージ操作のメソッド群 SOAPConnection クラス 通信を実行 call() メソッド SOAPMessage response = sc.call( SOAPMessage request, Object url );

Java SE 6 : javax.xml.soap いずれもFactoryのパターンで利用 MessageFactory mf = MessageFactory.newInstance(); SOAPMessage request = mf.createMessage( new MimeHeaders(), new FileInputStream( source ) ); SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance() SOAPConnection connection = scf.createConnection();

サンプルソース(1) import java.io.*; import javax.xml.soap.*; public class SOAPTest { public static void main( String[] args ) { String url = "http://localhost:8080/HelloService/hello"; String source = "hello.xml";

サンプルソース(2) MessageFactory mf = MessageFactory.newInstance(); SOAPMessage request = mf.createMessage( new MimeHeaders(), new FileInputStream( source ) );

サンプルソース(3) SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); SOAPConnection connection = scf.createConnection(); SOAPMessage response = connection.call( request, url ); response.writeTo( System.out ); }