Cosminexus SOAPアプリケーション開発ガイド

[目次][用語][索引][前へ][次へ]

3.4.2 document/literal使用時のソースコードの生成

document/literalに対応したWSDLからソースコードを生成する方法,およびWSDLとソースコードのマッピングについて説明します。また,wrapped形式のWSDLから,ソースコードを生成したときの要素展開規則について説明します。

<この項の構成>
(1) ソースコードの生成
(2) WSDLとJavaソースコードのマッピング
(3) wrapped形式の要素展開規則

(1) ソースコードの生成

document/literal使用時のソースコードはWSDL2Javaコマンドで生成できます。WSDL2Javaコマンド実行時に,document/literal使用時のソースコードの生成に対応したWSDLを指定すると,クライアントアプリケーションおよびサーバアプリケーションに必要なソースコードが生成されます。

WSDL2Javaコマンドの使用方法については,「9.2 WSDL2Javaコマンド(ソースコードの生成)」を参照してください。

注意事項
DOCUMENTスタイルを使用する場合,次の構造を持つWSDLを指定することはできません。
  • 一つのwsdl:messageに対応するwsdl:part要素が二つ以上ある。
  • wsdl:part要素でelement属性ではなく,type属性を使用している。
  • WSDL 1.1のスキーマに沿っていない。
WSDL2Javaコマンドで指定できないWSDLを指定した場合,エラーメッセージが出力され,異常終了となります。

(2) WSDLとJavaソースコードのマッピング

document/literalに対応したWSDLからソースコードを生成する場合に,注意が必要なマッピング規則について説明します。

(a) WSDLのstyle属性の指定とオペレーションのstyleの設定

soap:binding要素のstyle属性およびsoap:operation要素のstyle属性の指定と,オペレーションのstyleに設定される値の関係を,次の表に示します。

表3-10 style属性の指定とオペレーションのstyleの設定値

style属性の指定 オペレーションのstyleの設定値
soap:binding要素 soap:operation要素
soap:operation要素のstyle属性の値が設定されます。
× soap:binding要素のstyle属性の値が設定されます。
× soap:operation要素のstyle属性の値が設定されます。
× × "document"が設定されます。

(凡例)
○:指定されていることを示します。
×:指定されていない,または無効な値が指定されていることを示します。

注※
style属性の有効値は"rpc"または"document"です。

注意事項
サービスデプロイ定義の構造上,オペレーションごとにstyle属性を設定することはできません。したがって,WSDLのwsdl:binding要素中に複数のsoap:operationを記述する場合,style属性はすべて同じ値を指定する必要があります。異なるstyle属性を指定した場合,WSDL2Javaコマンド実行時にKDCCC0266-Eのエラーが出力され,異常終了となります。
(b) wsdl:part要素から参照されているxsd:element要素の値とJavaソースコードの関係

リクエストメッセージおよびレスポンスメッセージのwsdl:part要素から参照されているxsd:element要素の値と,Javaソースコードの関係を次の表に示します。

表3-11 xsd:element要素の値とJavaのマッピング

項番 WSDL中の項目 条件 Javaへのマッピング
1 リクエストメッセージのwsdl:part要素から参照されているxsd:element要素
  • 型がcomplexTypeの場合。
  • name属性の値が対応するwsdl:operation要素のname属性の値と一致する場合。
リクエストメッセージの要素の型およびレスポンスメッセージの要素の型に対応するJavaBeansクラスは生成されません。complexTypeの内部に持つ要素が展開され,それぞれがメソッドの引数および戻り値として設定されます。
2 レスポンスメッセージのwsdl:part要素から参照されているxsd:element要素
  • 型がcomplexTypeの場合。
  • name属性の値が対応するwsdl:operation要素のname属性+Responseの値と一致する場合。
3 項番1および2以外の場合 リクエストメッセージの要素の型およびレスポンスメッセージの要素の型に対応するJavaBeansクラスがそれぞれ生成され,メソッドの引数および戻り値として設定されます。

一つのwsdl:portType要素内に複数のwsdl:operation要素が定義されている場合,一つのwsdl:operation要素でも項番3の条件を満たせば,すべてのwsdl:operationに対して項番3のマッピング規則が適用されます。

次に,complexTypeがJavaBeansクラスにマッピングされない例,およびマッピングされる例を示します。

図3-18 complexTypeがJavaBeansクラスにマッピングされない例

[図データ]

図3-19 complexTypeがJavaBeansクラスにマッピングされる例

[図データ]

(3) wrapped形式の要素展開規則

wrapped形式の要素展開規則を次の表に示します。展開した各子要素をpartとみなし,IN属性のものはWSDLの型から単純にJavaの型にマッピングされ,OUT属性およびINOUT属性のものはWSDLの型からHolderクラスにマッピングされます。なお,レスポンスメッセージにINOUT属性でない要素が2個以上存在する場合は,どれが戻り値か判断できないため,INOUT属性以外の要素はOUT属性となります。

表3-12 wrapped形式の要素展開規則

リクエストメッセージの子要素※1 レスポンスメッセージの子要素※2
0 1 2以上
0

[引数]
なし

[戻り値]
void

[引数]
なし

[戻り値]
レスポンスメッセージの子要素の型

[引数]
レスポンスメッセージの各子要素の型に対応するHolderクラスが,要素の順序どおりに引数として定義されます。

[戻り値]
void
1以上

[引数]
リクエストメッセージの各子要素の型

[戻り値]
void

レスポンスメッセージの子要素数-共通要素※3である子要素数=0の場合

[引数]
次の項目の順序で引数が定義されます。
  • リクエストメッセージの各子要素の型
  • レスポンスメッセージの各子要素の型に対応するHolderクラス

[戻り値]
void
レスポンスメッセージの子要素数-共通要素※3である子要素数=1の場合

[引数]
次の項目が引数として定義されます。
  • 共通要素以外のリクエストメッセージの子要素の型
  • 共通要素の型に対応するHolderクラス
引数の順序はリクエストメッセージの子要素の順序どおりとなります。

[戻り値]
共通要素以外のレスポンスメッセージの子要素の型
レスポンスメッセージの子要素数-共通要素※3である子要素数>1の場合

[引数]
次の項目が引数として定義されます。
  • 共通要素以外のリクエストメッセージの子要素の型
  • 共通要素の型に対応するHolderクラス
  • 共通要素以外のレスポンスメッセージの子要素の型に対応するHolderクラス
引数の順序は,まずリクエストメッセージの子要素の順序どおりに定義され,続いて共通要素以外のレスポンスメッセージの子要素の順序となります。

[戻り値]
void

注※1
リクエストメッセージの子要素とは,WSDLの中で,リクエストメッセージに対応するpart要素から参照されているelementの子要素を指します。

注※2
レスポンスメッセージの子要素とは,WSDLの中で,レスポンスメッセージに対応するpart要素から参照されているelementの子要素を指します。

注※3
共通要素とは,リクエストメッセージの子要素と,レスポンスメッセージの子要素で,要素名と型が一致する要素を指します。

注意事項
  • レスポンスメッセージの子要素は,戻り値,INOUT属性,OUT属性の順序で定義してください。また,INOUT属性の場合,リクエストメッセージの子要素とレスポンスメッセージの子要素は同じ順序で定義してください。異なる順序で定義した場合,レスポンスメッセージの子要素の定義とは異なる順序で,応答時のSOAPメッセージを送受信します。
  • IN属性,OUT属性,およびINOUT属性の要素を合計した数は254個までです。255個以上は定義できません。合計で255個以上定義した場合,不正なソースが生成されます。

リクエストメッセージの子要素数およびレスポンスメッセージの子要素数が,それぞれ1以上となる次の場合の例を示します。

document/literal対応のソースコードから,Java2WSDLコマンドによって生成されたWSDLは,オペレーション名と同一名称の要素で引数がラップされます。また,生成されたWSDLは,メソッドの引数および戻り値をラップする要素が定義されます。このWSDLに対してWSDL2Javaコマンドを実行した場合,ラップした要素が分解されて元の引数,戻り値を持つインタフェースとなります。

document/literal使用時に生成されるWSDL,および生成されるソースコードの関係を,次の図に示します。

図3-23 WSDL生成とJavaソースコード生成の関係(document/literal)

[図データ]

ただし,一部の型については,WSDL2Javaコマンド実行後に異なる型で生成される場合があります。例えば,元となるJavaインタフェースで使用している型が配列でも,生成されたJavaインタフェースでは,配列をラップしたクラスになるといった場合があります。