Webサービス II (第1回)

Webサービス II (第4回)
WSDL と JAX-RPC
http://www.wakhok.ac.jp/~tatsuo/ws2/
2005年10月20日
この時間の目的




Webサービスと JAX-RPC
JWSDP 1.6 における取り扱い
WSDLの理解
Antツールによる開発
(ビルドファイルの活用)
開発作業のポイント
サービスの定義は WSDLに
(Web Service Definition Language)
 WSDL からサーバ側を構築
(War 形式のファイルを生成、配備)
 WSDL からクライアント側も構築
 サービスの実行までの手順は
Antのビルドファイルに

復習:WSDL の概説



Document Type は <definitions> 要素
WSDL の名前空間名
"http://schemas.xmlsoap.org/wsdl/
以下の記述ではPrefixを省略
他に SOAP, XML Schema の定義も利用
内部に5個の要素が順に登場
<types>, <message>, <portTyp>,
<binding>, <service>
<types> データ型の定義
W3C XML Schema でデータの型を定義
<types>
<schema
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Organization">
<sequence>
<element name="id" type="xsd:string"/>
<element name="name" type="xsd:string"/>
</sequence>
</complexType>
</schema>
</types>

<messages> 交換されるデータ
Javaのメソッドの引数、返り値に対応
<message name="HelloIF_sayHelloBack">
<part name="String_1" type="xsd:string"/>
</message>
<message
name="HelloIF_sayHelloBackResponse">
<part name="result" type="xsd:string"/>
</message>

<portType> インタフェース
サービスのインタフェースに対応
<portType name="HelloIF">
<operation name="sayHelloBack"
parameterOrder="String_1">
<input
message="tns:HelloIF_sayHelloBack"/>
<output
message="tns:HelloIF_sayHelloBackResponse"/>
</operation>
</portType>

<binding> 通信の実装へ
サービスの通信手段(Soapメッセージ等)
<binding name="HelloIFBinding"
type="tns:HelloIF">
<operation name="sayHelloBack">
<input>
<soap:body
encodingStyle=
"http://schemas.xmlsoap.org/soap/encoding/"
use="encoded" />
</input>

<service> サービスにアクセス
サービスのエンドポイントなどを指定
<service name="HelloWorldService">
<port name="HelloIFPort"
binding="tns:HelloIFBinding">
<soap:address
location=“http://localhost:8080/hello"/>
</port>
</service>

では、サンプルHelloWorldから


最初に存在するもの
HelloWorldService.wsdl
その他の設定ファイル
web.xml, config.xml, jaxrpc-ri.xml
tomcat.xml
Ant による開発
build.xml, build.properties
補足: JWSDP 1.6 の Ant
単体のものと同じ+少し便利な環境設定
 環境変数 JAVA_HOME, JWSDP_HOME
ANT_HOMEなど
 jwsdp-shared\bin\setenv.bat
を呼び出す
 %ANT_HOME%\bin は PATHに追加
 CATALINA_HOMEも設定不要
(配備情報はbuild.properties, tomcat.xml)

HelloWorld のbuild.xml (1)
主要なターゲット
 サーバ側の構築
generate-server, compile-server
create-war, build-war, deploy-war
(デフォルトは build = build-war)
 クライアント側の構築
generalte-client, comile-client
run-client

HelloWorld のbuild.xml (2)


generate-server
ツール wscompile
WSDL を元にサーバ側に必要なソース
ファイルを自動生成
HelloIF.java, HelloIF_Impl.java,
それらのコンパイル
(自動生成されたファイルは作業領域に)
HelloWorld のbuild.xml (3)



compile-server
サービスの実装とそのコンパイル( javac )
HelloImpl クラス
HelloIF に定義されたメソッド(WSDLで定義)を
実装する
HelloWorld のbuild.xml (4)


create-war
Warアーカイブの生成(第1段階)
コンパイルされたバイトコードをまとめる
HelloWorld-raw.war
HelloWorld のbuild.xml (5)
build-war
 実際に配備されるWarファイルの生成
 ツール wsdeploy
必要なライブラリ等も付加
 HelloWorldディレクトリに
HelloWorld.warを生成
(デフォルトの作業)
 一時ファイルの消去などの後始末

HelloWorld のbuild.xml (6)


deploy-war
WarファイルをWebコンテナへ配備
build.properties
tomcat.xml の情報を元にコピー
HelloWorld のbuild.xml (7)




generate-client
ツール wscompile
WSDLの情報を元にクライアント側のソー
スファイルを自動生成、コンパイル
HelloIF.java, Stubのクラス他
作業は一時的な作業領域に
HelloWorld のbuild.xml (8)


compile-client
クライアントのプログラム HelloClientのコ
ンパイル
javac で実行
HelloWorld のbuild.xml (9)



run-client
クライアントプログラムの実行
java コマンドによる
作業手順のまとめ
Webコンテナ(Tomcat)の起動
 サーバ側の構築 ant
 Warファイルの配備 ant deploy-war
(サービスの開始)
 クライアント側の構築と実行
ant run-client

丁寧に手順を追うと








ant
ant
ant
ant
ant
ant
ant
ant
generate-server
compile-server
create-war
build-war
deploy-war
generate-client
compile-client
run-client
別のサンプル(BusinessData)


企業情報の登録と検索サービス
クラス Organization
サービス
Organization getOrganization( String name )
String addOrganizaiton( Organization org )
String 情報のみのHelloWorldより少し複雑
サンプルのポイント(<types>)
<types>
<schema
xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="Organization">
<sequence>
<element name="id" type="xsd:string"/>
<element name="name" type="xsd:string"/>
</sequence>
</complexType>
</schema>
</types>

クラス Organizationが自動生成される