Introduction to Web Service
Download
Report
Transcript Introduction to Web Service
Introduction to Web Service
01k1024
Hiroyuki Morohoshi
Web Serviceとは
オープンな技術を使って、記述、呼び出し、
公開、発見が可能な、ネットワーク上に存
在するソフトウェア部品のこと
XML、HTTP、SOAP、WSDL,UDDIなどの基
本技術によって実現される
Web Serviceの利点
Web Serviceはファイアウォール内外の
ネットワーク経由で容易にメッセージ交換
が出来る
利用したいWeb ServiceがどんなOSで動
いているか、どんな言語で開発されたかな
ど、相手のプラットフォームに関係なく呼び
出せる
サービスの公開、発見、結合
サービス提供者は自分の
Web Serviceをサービス仲
介者に公開する
サービス要求者は仲介者
が管理する情報からWeb
Serviceを発見し、利用す
るための仕様などの情報
を入手する
サービス仲介者自分のシ
ステムと提供者のシステ
ムを結合し、サービスを利
用する
サービス
仲介者
発見
サービス
要求者
公開
結合
サービス
提供者
Web Serviceを実現する
3つの技術
SOAP
Web Service間で交換するメッセー
ジのフォーマットの規格
WSDL
Web Serviceのインターフェース仕
様を記述するためのXML文書
UDDI
サービスを公開、発見するための仕
組みを定めた規格
UDDI
WSDL
SOAP
XML
HTTP,SMTP等
SOAP
SOAPとは
Web Service間で交換されるメッセージのデータフォーマットや、
メッセージの処理ルールを定めた通信プロトコル
HTTPやSMTP上などのトランスポートプロトコル上でXML形式の
メッセージをやりとりする
一方向で1回限りのメッセージ送信が基本で、直前の通信状態
を保持しない(ステートレス)プロトコル
要求メッセージ
Client
Server
応答メッセージ
SOAPメッセージの構造
Protocol Binding Header
実装するプロトコルに依存するヘッダで、プロ
トコルごとに定められたヘッダ情報を記述
SOAP Envelope
<SOAP-ENV:Envelope>をルート要素とする
XMLデータで、SOAPを使ったオブジェクト間
通信に必要なメッセージを記述
SOAP Header
<SOAP-ENV:Header>のタグに囲まれた部分
によるヘッダ宣言で、実際のメッセージのヘッ
ダとなる情報を記述(任意)
SOAP Body
<SOAP-ENV:Body>のタグに囲まれた部分に
よる本体の宣言で、メッセージの本文を記述。
具体的には、RPCを呼び出すメソッド名や引
数、またエラー情報などを記述する(必須)
Protocol Binding Header
SOAP Message
SOAP Envelope
SOAP Header
ヘッダ情報
SOAP Body
メッセージ&データ
SOAPメッセージ例(Request)
POST /QueryHotel HTTP/1.1
Host: www.utj.co.jp
Content-Type: text/xml; charset=“utf-8”
Content-Length: nnnn
SOAPAction: “http://www.utj.co.jp/schemas/soapbody#QueryEmptyRoom”
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=“http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=“http://schemas.xml.soap.org/soap/encoding/”>
<SOAP-ENV:Header>
<q:QueristInfo xmlns:q=“http://www.utj.co.jp/schemas/soapheader/querist”
SOAP-ENV:actor=“http://schemas.xmlsoap.org/soap/actor/next”
SOAP-ENV:mustUnderstand=“1”>
<q:reference>uuid:09876ab1-c234-777d-efab65cd4e32</q:reference>
<q:dateAndTime>2002-05-27T14:30:00.000-05:00</q:dateAndTime>
<q:name>Minoru Ohta</q:name>
</q:QueristInfo>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<m:QueryEmptyRoom xmlns:m=“http://www.utj.co.jp/schemas/soapbody”>
<m:RoomType>Twin</m:RoomType>
<m:CheckInDate>2002-07-01</m:CheckInDate>
<m:CheckOutDate>2002-07-03</m:CheckOutDate>
</m:QueryEmptyRoom>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAPメッセージ例(Response)
HTTP/1.1 200 OK
Content-Type: text/xml; charset=“utf-8”
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=“http://schemas.xmlsoap.org/soap/envelope/”
SOAP-ENV:encodingStyle=“http://schemas.xml.soap.org/soap/encoding/”>
<SOAP-ENV:Body>
<m:QueryEmptyRoomResponse
xmlns:m=“http://www.utj.co.jp/schemas/soapbody”>
<m:rooms>30</m:rooms>
</m:QueryEmptyRoomResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
UDDI
UDDIとは
Webサービスを公開し、
発見させるためのディ
レクトリサービス
UDDIのデータはUDDIレ
ジストリ(UDDI registry)
と呼ばれる場所に保管
される
データはXMLベースで
保存される
WSDL
WSDLとは
発見したWebサービスを利用するためのインターフェイス仕様を、
コンピュータが理解できる形式で記述したXML 形式の言語のこと
WSDL文書から、Webサービスを呼び出して利用するモジュール
(スタブ)を自動生成することができる
サービス要求側
アプリケーション
WSDL文書
サービス提供側
アプリケーション
スタブモジュール
開発ツール
スタブモジュール
SOAPメッセージ
WSDLの構成要素
types
WSDL文書例
メッセージのフォーマット定義に使用する抽象的な型を定義する
message
Webサービスで使用するメッセージのフォーマットを抽象的に定義する
operation
入出力メッセージやフォルトメッセージで構成される操作を抽象的に定義する
portType
関連する操作をひとまとめにした抽象的なポートであるポートタイプを定義する
binging
ポートタイプ内の個々の抽象的な操作に、具体的なトランスポートプロトコルをバインドする
port
定義されたバインディングに、通信エンドポイントのネットワークアドレスを関連付けて具体的
なポートを定義する
service
定義されたポートのうち、関連するもの同士を1つにまとめてWebサービスとして定義する
Web Serviceの実装例(1)
次のプログラムをWeb Service化してみよう
SimpleAddBean.java
サービスを提供するために、今回はAxisエンジンを使う
上のプログラムをコンパイルし、Axisエンジン配下に保存しする。そして、
配置記述子(Deployment Descriptor)を作成し、配置(Deploy)するこ
とでサービス化する
SimpleAddService.wsdd (配置記述子)
このファイルをAdminClientにて配置する
配置コマンド
>java org.apache.axis.client.AdminClient SimpleAddService.wsdd
Web Serviceの実装例(2)
配置記述子よって、JavaBeansは「SimpleAddService」
というサービス名として動き始める
Web Serviceの実装例(3)
WSDLを生成する
AxisにあるJava2WSDLというユーティリティで自動生成する
>java org.apache.axis.wsdl.Java2WSDL -o SimpleAddService.wsdl -l
http://localhost:8080/axis/servlet/AxisServlet -n SimpleAddService
SimpleAddBean
生成されたWSDL文書
SimpleAddService.wsdl
Web Serviceの実装例(4)
Webサービスクライアントを生成する
作成したWebサービスにアクセスするためのクライアントプログラム
を準備する。このWebサービス・クライアントは、
「SimpleAddService」に接続し、このWebサービスの持つ機能を呼
び出します
Web Serviceの実装例(5)
Webサービスクライアントを生成する(続)
Webサービスクライアント用のクラスを生成するには次のコマンドを
使って、作成されたWSDLをもとに生成します
>java org.apache.axis.wsdl.WSDL2Java SimpleAddService.wsdl
作成されたファイル
AdminServletSoapBindingStub.java
SimpleAddBeanService.java
SimpleAddBean.java
SimpleAddBeanServiceLocator.java
Web Serviceの実装例(6)
Webサービスクライアントを生成する(続)
作成されたインターフェイスをうまく
使うことで、Webサービス・クライア
ントを容易に作ることができるよう
になります
次のクライアントプログラムを作成
SimpleAddProxyClient.java
下のインターフェースを利用しない
プログラムよりも格段に楽になって
います
SimpleAddClient.java
Web Serviceの実装例(7)
プログラムの実行
最後に次のコマンドでプログラムを実行すると次のよう
な結果が得られます
>java SimpleAddService.SimpleAddProxyClient 2 5
2
7
また、TCP Monitorというツールを使うと送られているSOAPメッセージを見る
ことが出来ます。
>start java org.apache.axis.utils.tcpmon
参考資料
Webサービス技術 基礎と実践 徹底解説
JavaによるWebサービス構築
http://www.atmarkit.co.jp/fjava/index/index_wbsrvic.
html
http://www.utj.co.jp/xml/dev/soap/soap1_1.html
インストールから実行まで(1)
Tomcat をダウンロードする
http://jakarta.apache.org/site/binindex.cgi
から最新版のものをダウンロードする
(今回は Tomcat 5.0.24 zip)
AXISエンジンをダウンロードする
http://ws.apache.org/axis/releases.html
上のURLから最新版のものをダウンロードする (今回は
Version 1.1 Binary - zip)
適当な場所に解凍してください
インストールから実行まで(2)
AxisエンジンをTomcatに配置する
Tomcatがあるディレクトリを<TOMCAT_HOME>
Axisがあるディレクトリを<AXIS_HOME>とします
<AXIS_HOME>\webapps\axisディレクトリを
<TOMCAT_HOME>\webapps以下にコピーします
<TOMCAT_HOME>\webapps\axis\WEB-INF\libにあるsaaj.jar、
jaxrpc.jarを<TOMCAT_HOME>\common\libに移動します
これで、Axisエンジンがインストールされた状態になります。
インストールから実行まで(3)
環境変数の設定
<AXIS_HOME>\libにあるライブラリをすべてCLASSPATHに設定します
<例>
JAVA_HOME=C:\j2sdk1.4.2_04
CATALINA_HOME=D:\jakarta-tomcat-5.0.18
AXIS_HOME=D:\axis-1_1
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%CATALINA_HOME%
\common\lib\servletapi.jar;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axisant.jar;%AXIS_HOME%\lib\commonsdiscovery.jar;%AXIS_HOME%\lib\commonslogging.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\log
4j1.2.8.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j.j
ar;
インストールから実行まで(4)
サービスを動かしてみる
サービス化したいClassファイルを
<TOMCAT_HOME>\webapps\axis\WEB-INF\classes
ディレクトリに置きます
Tomcatを動かします
D:\jakarta-tomcat-5.0.18\bin\startup.bat
次に配置記述ファイルを作業ディレクトリに作成しコマンド
で配置します。
>java org.apache.axis.client.AdminClient
SimpleAddService.wsdd
インストールから実行まで(5)
サービスを動かしてみる(2)
次に下のコマンドでWSDLを生成します
>java org.apache.axis.wsdl.Java2WSDL -o
SimpleAddService.wsdl -l
http://localhost:8080/axis/servlet/AxisServlet -n
SimpleAddService SimpleAddBean
出来たら、下のコマンドでスタブを生成します
>java org.apache.axis.wsdl.WSDL2Java
SimpleAddService.wsdl
インストールから実行まで(6)
サービスを動かしてみる(3)
SimpleAddServiceディレクトリが生成されたら、クライアント
サービスプログラムを作成し、ディレクトリの中に置き、全
てのJavaファイルをコンパイルします。
最後に下のコマンドで、正しい結果が得られれば差成功です
>java SimpleAddService.SimpleAddProxyClient 2 5
サンプルで使ったプログラムをここに置いておきますので利
用してください