WSDL と JAX-RPC http://www.wakhok.ac.jp/~tatsuo/ws2/ 2005年10月20日 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) (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"/>
<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 generate-server ant compile-server ant create-war ant build-war ant deploy-war ant generate-client ant compile-client ant run-client
別のサンプル(BusinessData) 企業情報の登録と検索サービス クラス Organization サービス Organization getOrganization( String name ) String addOrganizaiton( Organization org ) String 情報のみのHelloWorldより少し複雑
サンプルのポイント(<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が自動生成される