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

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

3.4.1 document/literal使用時のWSDLの生成

document/literalに対応したWSDLの生成方法,およびJavaインタフェースとWSDLのマッピングについて説明します。

<この項の構成>
(1) WSDLの生成
(2) Java2WSDLコマンドで生成されるWSDL
(3) JavaソースコードとWSDLのマッピング例

(1) WSDLの生成

document/literalに対応したWSDLは,Java2WSDLコマンドで生成できます。Java2WSDLコマンドの-zオプションで「DOCUMENT」,-uオプションで「LITERAL」を指定します。

Java2WSDLコマンドの使用方法については,「9.1 Java2WSDLコマンド(WSDLの生成)」を参照してください。

注意事項
DOCUMENTスタイルを使用する場合,メソッドをオーバーロードしているJavaインタフェースを指定することはできません。
DOCUMENTスタイルでは,Javaインタフェースのメソッド名を要素名とする要素がWSDLに定義され,その要素によって引数および戻り値がラップされます。したがって,Javaインタフェースでメソッドをオーバーロードしている場合,同一名称のメソッドが複数存在することになり,WSDLにも同一要素名の要素が多重定義されてしまいます。
Java2WSDLコマンドで指定できないJavaインタフェースを指定した場合は,エラーメッセージが出力され,異常終了となります。

(2) Java2WSDLコマンドで生成されるWSDL

document/literal使用時のJavaインタフェースとWSDLのマッピング,および生成されるWSDLの詳細仕様について説明します。

(a) JavaインタフェースとWSDLのマッピング

次に示すWSDLの生成例を基に,document/literal使用時のJavaインタフェースとWSDLのマッピングについて説明します。

図3-17 JavaインタフェースとWSDLのマッピング(document/literal)

[図データ]

JavaインタフェースとWSDLのマッピング
  • wsdl:types要素内のxsd:element要素に,対象メソッドの「メソッド名」が要素名として定義されます。また,「メソッド名」要素の子要素に,対象メソッドの引数が定義されます(図中の(1)および(2))。
  • wsdl:types要素内のxsd:element要素に,対象メソッドの「メソッド名」+「Response」が要素名として定義されます。また,「メソッド名」+「Response」要素によって,対象メソッドの戻り値および引数で与えられたHolderクラスがラップされます。なお,対象メソッドの戻り値は,「メソッド名」+「Return」要素の子要素として定義されます(図中の(3)および(4))。
  • 対象メソッドの引数および戻り値をラップした要素が,wsdl:message要素の子要素であるwsdl:part要素のelement属性で参照されます(図中の(5)および(6))。

Java2WSDLコマンドでdocument/literalに対応したWSDLを生成する場合,常にwrapped形式のWSDLが生成されます。

なお,次のどちらかが該当する場合,子要素に空のcomplexType要素(<complexType/>)を持つ「メソッド名」要素および「メソッド名」+「Response」要素が生成されます。

(b) 生成されるWSDLの定義内容

次の表に,Java2WSDLコマンドでdocument/literalに対応したWSDLを生成した場合の定義内容を示します。

表3-9 Java2WSDLコマンドで生成されたWSDLの定義内容(document/literal)

WSDL中の要素 定義内容
wsdl:types要素 xsd:schema要素 xsd:schema要素 elementFormDefault属性の値は"qualified"が定義されます。
リクエストメッセージに対応するxsd:element要素
  • name属性で"メソッド名"が定義されます。
  • 子要素としてxsd:complexType要素が定義されます。xsd:complexType要素では,メソッドの引数を表す要素がxsd:sequenceで並べられます。
  • xsd:sequence下の要素の並び順は,メソッドシグネチャの引数の順序どおりとなります。
  • xsd:sequence下の要素の要素名は"in"+"通し番号"※1で,型は引数に対応する型が定義されます。ただしHolderクラスの場合は内部に持つ値の型となります。
  • メソッドの引数がない場合は子要素として空のxsd:complexType要素が定義されます。
レスポンスメッセージに対応するxsd:element要素
  • name属性で"メソッド名"+"Response"が定義されます。
  • 子要素としてxsd:complexType要素が定義されます。xsd:complexType要素では,メソッドの戻り値および引数で与えられたHolderクラスを表す要素がxsd:sequenceで並べられます。
  • xsd:sequence下の要素の並び順は,1番目が戻り値で,その後はメソッドシグネチャの引数の順序どおりとなります。
  • xsd:sequence下の戻り値を表す要素の要素名は"メソッド名"+"Return"で,型は戻り値に対応する型が定義されます。
  • xsd:sequence下のHolderクラスを表す要素は,リクエストメッセージの対応する要素と同じ要素名で同じ型※2が定義されます。
メソッドの戻り値がvoid,かつメソッドの引数にHolderクラスが含まれない場合は子要素として空のxsd:complexType要素が定義されます。
リクエストメッセージに対応するwsdl:message要素※3 wsdl:part要素 element属性でxsd:schema要素下で定義されている,name属性が"メソッド名"の要素が定義されます。
レスポンスメッセージに対応するwsdl:message要素※3 wsdl:part要素 element属性でxsd:schema要素下で定義されているname属性が"メソッド名"+"Response"の要素が定義されます。
wsdl:binding要素 soap:binding要素 style属性で"document"が定義されます。
wsdl:input要素/wsdl:output要素 soap:body要素
  • use属性で"literal"が定義されます。
  • namespace属性は存在しません。

注※1
1番目の引数からn番目の引数まで,in0,in1,・・・,in(n-1)となります。

注※2
例えば2番目の引数と4番目の引数がHolderクラスの場合は,in1とin3がxsd:sequence下に含まれます。

注※3
子要素としてpart要素が一つ定義されます。

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

Javaインタフェース,Javaクラス,およびdocument/literalに対応したWSDLの生成例を示します。