Hitachi

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


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

document/literalに対応したWSDLの生成方法,および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」要素が生成されます。

  • 対象メソッドの引数がない場合

  • 戻り値がvoidで,引数にHolderクラスが含まれない場合

(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の生成例を示します。