Hitachi

Cosminexus V11 アプリケーションサーバ SOAPアプリケーション開発の手引


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に設定される値の関係を次の表に示します。

表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インタフェースでは,配列をラップしたクラスになるといった場合があります。