PowerPoint プレゼンテーション

情報処理学会第68回全国大会
入出力データ型に透過な
Webサービス動的実行システム
2006年3月7日
松江工業高等専門学校 情報工学科
越田高志
1
1.はじめに
• Webサービスとは
– データアクセスプロトコルとしてSOAPを用い,XML形式で
データ交換を行う分散処理プログラムのこと.
• Webサービスの基本技術
– SOAP,UDDI,WSDLである.
• Webサービス実用化の問題点
– 1.必要とする適切なWebサービスを検出・連携し,目的と
する処理を実行する適切な手段が存在しないこと,
– 2.ユーザ側でWebサービスの実行を制御するスタブを開
発しなければならないこと,及び,
– 3.入力データ型が複合型であるWebサービスを利用でき
ないこと.
2
その問題点の解決
プリミティブWebサービスの提案[1,2]
1. 必要とする適切なWebサービスを検出・連携し,
目的とする処理を実行する適切な手段が存在し
ないこと
Webサービス動的実行システム[3]
2. ユーザ側でWebサービスの実行を制御するスタ
ブを開発しなければならないこと,
3. 入力データ型が複合型であるWebサービスを利
用できないこと.
本論文で解決手法を提案する.
3
2.Webサービスの問題点
• Webサービスの入出力データ型について
– WSのデータ型は大きく2種類ある.
• 基本型と複合型(基本型を複数個組み合わせたもの)
– 出力データ型に依存しない,自動化・統合化され
たWS動的実行システムは開発済み.
• 出力データも自動処理可能となった.
– 現在WSの入力データ型は,全て基本型である.
(何故なら,複合型にすると,実行時にユーザ側で複合型に
対応したJavaBeansクラスを用意しなければならない.
⇒ユーザへの負荷が大きい
4
入力データ型が複数の基本型パラメータをまとめた複
合型であれば,
1つのオブジェクトとして操作できるので,コードが
シンプルになり,開発と処理操作が容易になる利点が
あり, 入出力データ型の一元化も可能になる.
public class GoodsService6{ // (A) 基本型入力データ
public SData6 getStocks(String btype, Stirng id, String gcode,
int quantity, int price) throws Exception{
public class GoodsService6{ // (B) 複合型入力データ
public SData6 getStocks(GData6 details) throws Exception{
5
UDDIレジストリ
Webサービス実行の流れ
Webサービス提供者
Webサービスに関する情報
・Webサービス,WSDLのア
ドレス
Webサービスの
登録
①検索
②情報
Webサービス
WSDLファイル
④結果
ユーザ
クライアント・プログラム
の作成
③実行
クライアント・プログラムの作
成と③,④を自動化した. 6
3.入出力データ型に依存しないWeb
サービス動的実行システム
ユーザ側
入力
本システム
WSDLURL と Web サービ
スへの入出力パラメータ値
Web サービス提供側
入出力データ型の確認
入 出 力デ ータ 型に 対
応した JavaBeans ク
ラスの自動生成
出力データ
インターネット
serialization
出力 JavaBeans
クラス
出力 JavaBeans
クラス
入力データ
入力 JavaBeans クラス
deserialization
SOAP
データ
Web サービス
入力 JavaBeans
クラス
入 力 デ ー タ を
JavaBeans クラスに
格納
serialization
SOAP
データ
deserialization
7
3.1 プリミティブWebサービス(PWS)
– Webサービスに関して,その名称,機能説明,入出力
IFに関する規約などはなく,全て提供者に委ねられて
いる.
従って,
– ユーザは利用するWS個々に機能,入出力データの
確認と理解が必要である.
– 標準化することによって,理解と確認を容易にする.
8
定義
• 様々なビジネス分野で,共通に利用可能な一
意に統一された名称,機能,入出力IFをもつ標
準化されたWebサービスとして定義する.
– WSに対する曖昧さ,不確定性が無くなる.
– 一度,それについて理解すれば良い.
– 任意のビジネスプロセスに対しても,ユーザ主
体で PWSの組合せとして処理できる.
9
10
11
入力データ部分
<wsdl:types> <schema >
<complexType name="Dat1"> <sequence>
<element name="name" nillable="true" type="xsd:string"/>
<element name="tel" nillable="true" type="xsd:string"/>
</sequence> </complexType>
<element name="Dat1" nillable="true" type="tns1:Dat1"/>
<complexType name="CDat1">
出力データ部分
<sequence>
<element name="address" nillable="true" type="xsd:string"/>
<element name="credit" nillable="true" type="xsd:string"/>
<element name="head" nillable="true" type="xsd:string"/>
<element name="name" nillable="true" type="xsd:string"/>
<element name="tel" nillable="true" type="xsd:string"/>
</sequence> </complexType>
<element name="CDat1" nillable="true" type="tns1:CDat1"/>
</schema>
</wsdl:types>
12
複合型WSのWSDL記述の一部
<wsdl:types>
<schema targetNamespace="http://10.70.51.20:8080/axis/services"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="GData6"> <sequence>
<element name="beertype" nillable="true" type="xsd:string" />
<element name="quantity" type="xsd:int" />
</sequence> </complexType>
<element name="GData6" nillable="true" type="tns1:GData6" />
<complexType name="SData6"> <sequence>
<element name="beercode" nillable="true" type="xsd:string" />
<element name="beername" nillable="true" type="xsd:string" />
<element name="casevalue" type="xsd:int" />
<element name="totalcost" type="xsd:int" />
<element name="unitvalue" type="xsd:int" />
</sequence> </complexType>
<element name="SData6" nillable="true" type="tns1:SData6" />
</schema> </wsdl:types> <wsdl:message name="getStocksRequest">
<wsdl:part name="in0" type="tns1:GData6" /> </wsdl:message>
<wsdl:message name="getStocksResponse">
<wsdl:part name="getStocksReturn" type="tns1:SData6" />
</wsdl:message>
13
基本型と複合型の比較
• 基本型
– そのままデータをWSに送付・実行できる.
– 実行時に,入力順番を常に確認する必要がある.
– 全ての入力データ名を指定するので,プログラミ
ングが煩雑になる.
• 複合型
– その複合型データに対応したJavaBeansクラスを
用意する必要がある.
– 実行時に,全ての入力データをJavaBeansクラス
のオブジェクトとしてまとめて扱える(入力順番を
気にする必要はない.)
14
基本型の場合
public class GoodsService6{
public SData6 getStocks(String beertype, int quantity)
throws Exception{
複合型の場合
public class GoodsService6{
public SData6 getStocks(GData6 details) throws Exception{
GData6クラスを共通に定義すれば良い.
15
複合型の利点
• WSの連携がシンプルになる.
– あるWSの出力を次のWSの入力とする場合など,
同じJavaBeansクラスのオブジェクトを利用できる.
• 入力データのカプセル化
– ユーザは入力データの意味さえ分かればよい.
その変数名や入力順番などを気にしなくてよい.
プログラミングが簡略化される.
• WSメソッドのシグニチャ(メソッド名と引数)
は同じ,でも引数の内容が異なるWSも可能.
16
3,2 システムの機能
17
• Webサービスの検出
– ユーザが必要とする最適なWebサービスを如
何に効率良く,検出するか.
– そのWebサービスの使い方をどう理解させる
か.
• その機能,出力タイプ,入力パラメータの数とその
タイプをユーザに伝えること.
• Webサービスの結合
– 複数のWebサービスをどう結びつけるか?
– セマンテックWeb.
18
3.3 実験結果
19
4.おわりに
本システムを利用することにより,
複合型入力データをもつWebサービスに対しても,動的実
行が可能になる.これにより,Webサービス提供側でも複
合型入力データをもつWebサービスが提供可能となり,提
供側のWebサービス開発工数と処理効率の向上が期待で
きる.Webサービスメソッドの入力IFの統一が容易になる.
従って,基本的なビジネスプロセスに対応した,一意に定
義されたWebサービス名,メソッド名,入力IFをもつWeb
サービス標準化が実現でき,またWebサービスの動的連携
も容易になると考えられる.
20