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
サンプルで使ったプログラムをここに置いておきますので利
用してください