3.4.2 document/literal使用時のソースコードの生成
document/literalに対応したWSDLからソースコードを生成する方法,およびWSDLとソースコードのマッピングについて説明します。また,wrapped形式のWSDLから,ソースコードを生成したときの要素展開規則について説明します。
(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に設定される値の関係を次の表に示します。
style属性の指定※ |
オペレーションのstyleの設定値 |
|
---|---|---|
soap:binding要素 |
soap:operation要素 |
|
○ |
○ |
soap:operation要素のstyle属性の値が設定されます。 |
○ |
× |
soap:binding要素のstyle属性の値が設定されます。 |
× |
○ |
soap:operation要素のstyle属性の値が設定されます。 |
× |
× |
"document"が設定されます。 |
- 注意事項
-
サービスデプロイ定義の構造上,オペレーションごとにstyle属性を設定することはできません。したがって,WSDLのwsdl:binding要素中に複数のsoap:operationを記述する場合,style属性はすべて同じ値を指定する必要があります。異なるstyle属性を指定した場合,WSDL2Javaコマンド実行時にKDCCC0266-Eのエラーが出力され,異常終了となります。
(b) wsdl:part要素から参照されているxsd:element要素の値とJavaソースコードの関係
リクエストメッセージおよびレスポンスメッセージのwsdl:part要素から参照されているxsd:element要素の値と,Javaソースコードの関係を次の表に示します。
項番 |
WSDL中の項目 |
条件 |
Javaへのマッピング |
---|---|---|---|
1 |
リクエストメッセージのwsdl:part要素から参照されているxsd:element要素 |
|
リクエストメッセージの要素の型およびレスポンスメッセージの要素の型に対応するJavaBeansクラスは生成されません。complexTypeの内部に持つ要素が展開され,それぞれがメソッドの引数および戻り値として設定されます。 |
2 |
レスポンスメッセージのwsdl:part要素から参照されているxsd:element要素 |
|
|
3 |
項番1および2以外の場合 |
リクエストメッセージの要素の型およびレスポンスメッセージの要素の型に対応するJavaBeansクラスがそれぞれ生成され,メソッドの引数および戻り値として設定されます。 |
一つのwsdl:portType要素内に複数のwsdl:operation要素が定義されている場合,一つのwsdl:operation要素でも項番3の条件を満たせば,すべてのwsdl:operationに対して項番3のマッピング規則が適用されます。
次に,complexTypeがJavaBeansクラスにマッピングされない例,およびマッピングされる例を示します。
(3) wrapped形式の要素展開規則
wrapped形式の要素展開規則を次の表に示します。展開した各子要素をpartと見なし,IN属性のものはWSDLの型から単純にJavaの型にマッピングされ,OUT属性およびINOUT属性のものはWSDLの型からHolderクラスにマッピングされます。なお,レスポンスメッセージにINOUT属性でない要素が2個以上存在する場合は,どれが戻り値か判断できないため,INOUT属性以外の要素はOUT属性となります。
リクエストメッセージの子要素※1数 |
レスポンスメッセージの子要素※2数 |
||
---|---|---|---|
0 |
1 |
2以上 |
|
0 |
|
|
|
1以上 |
|
レスポンスメッセージの子要素数−共通要素※3である子要素数=0の場合
|
|
レスポンスメッセージの子要素数−共通要素※3である子要素数=1の場合
|
|||
レスポンスメッセージの子要素数−共通要素※3である子要素数>1の場合
|
- 注意事項
-
-
レスポンスメッセージの子要素は,戻り値,INOUT属性,OUT属性の順序で定義してください。また,INOUT属性の場合,リクエストメッセージの子要素とレスポンスメッセージの子要素は同じ順序で定義してください。異なる順序で定義した場合,レスポンスメッセージの子要素の定義とは異なる順序で,応答時のSOAPメッセージを送受信します。
-
IN属性,OUT属性,およびINOUT属性の要素を合計した数は254個までです。255個以上は定義できません。合計で255個以上定義した場合,不正なソースが生成されます。
-
リクエストメッセージの子要素数およびレスポンスメッセージの子要素数が,それぞれ1以上となる次の場合の例を示します。
-
レスポンスメッセージの子要素数−共通要素数の子要素数=0の場合
-
レスポンスメッセージの子要素数−共通要素数の子要素数=1の場合
-
レスポンスメッセージの子要素数−共通要素数の子要素数>1の場合
図3‒20 レスポンスメッセージの子要素数−共通要素数の子要素数=0の場合 図3‒21 レスポンスメッセージの子要素数−共通要素数の子要素数=1の場合 図3‒22 レスポンスメッセージの子要素数−共通要素数の子要素数>1の場合
document/literal対応のソースコードから,Java2WSDLコマンドによって生成されたWSDLは,オペレーション名と同一名称の要素で引数がラップされます。また,生成されたWSDLは,メソッドの引数および戻り値をラップする要素が定義されます。このWSDLに対してWSDL2Javaコマンドを実行した場合,ラップした要素が分解されて元の引数,戻り値を持つインタフェースとなります。
document/literal使用時に生成されるWSDL,および生成されるソースコードの関係を次の図に示します。
ただし,一部の型については,WSDL2Javaコマンド実行後に異なる型で生成される場合があります。例えば,元となるJavaインタフェースで使用している型が配列でも,生成されたJavaインタフェースでは,配列をラップしたクラスになるといった場合があります。