Cosminexus アプリケーションサーバ V8 Webサービス開発の手引
WSDLのメッセージのパート(wsdl:message要素のwsdl:part子要素)からJavaのメソッドのパラメタおよび戻り値へのマッピングについて説明します。
ここでは,wrapperスタイルの場合について説明します。
wrapperスタイルの場合,WSDLのメッセージのパートから参照するwrapper子要素と,Javaメソッドのパラメタおよび戻り値がマッピングされます。マッピング例を次の図に示します。
図12-4 メッセージのパートとパラメタおよび戻り値のマッピング例(wrapperスタイル)
マッピングするときに,WSDLのwrapper子要素名の先頭文字は小文字に変換されます。
(変換前)WrapperName (変換後)wrapperName
表12-8 パートの種類とJavaソースへのマッピングの関係(wrapperスタイル)
| 項番 | WSDLパートの種類 | Javaへのマッピング | |
|---|---|---|---|
| マッピング先 | マッピング方法 | ||
| 1 | in | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。 |
| 2 | inout | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。※ |
| 3 | out | パラメタ | javax.xml.ws.Holder<T>クラスでマッピングされます。※ |
| 4 | 戻り値 | javax.xml.ws.Holder<T>クラスでマッピングされません。java.lang.Stringなどのクラスでマッピングされます。 | |
wrapper子要素名には,次の表に示すすべての条件を満たす文字列を記述できます。ただし,バインディング宣言でカスタマイズする場合は,XML Schema仕様のxsd:NCName型として使用できる文字列を記述できます。
表12-9 wrapper子要素名に記述できる文字列の条件(wrapperスタイル)
| 項番 | 条件 | 不正な文字列の例 | 不正な文字列を指定した場合の動作 |
|---|---|---|---|
| 1 | 半角英数字(0〜9,A〜Z,a〜z),およびアンダースコア(_)だけを使用した文字列 | 日立_wrapper | 動作は保証されません(エラーメッセージは表示されません)。 |
| 2 | Javaの予約語以外の文字列※ | abstract | 標準エラー出力とログにエラーメッセージが出力され,処理が終了されます(KDJW51018-E)。 |
| 3 | 先頭が数字以外の文字列 | 1User_wrapper | 標準エラー出力とログにエラーメッセージが出力され,処理が終了されます。 |
inputメッセージまたはoutputメッセージに出現するwrapper子要素をWSDL内に複数記述した場合,wrapper子要素のローカル名とXML Schemaの型が同じか異なるかによって,wrapper子要素の扱いは次の表のとおり異なります。
表12-10 wrapper子要素のローカル名とXML Schemaの型によって異なるwrapper子要素の扱い
| 項番 | wrapper子要素のローカル名 | wrapper子要素のXML Schema型 | wrapper子要素の扱い |
|---|---|---|---|
| 1 | ローカル名が同じ場合 | XML Schema型が同じ場合 | 同じwrapper子要素として扱われます。それぞれのwrapper子要素が,xsd:element要素のref属性で間接的に同じグローバル要素を参照している場合も,同じwrapper子要素として扱われます。 |
| 2 | XML Schema型が異なる場合 | 別のwrapper子要素として扱われます。 | |
| 3 | ローカル名が異なる場合 | XML Schema型が同じ場合 | 別のwrapper子要素として扱われます。 |
| 4 | XML Schema型が異なる場合 |
複数の同じwrapper子要素と,異なるwrapper子要素を複合型の子要素として同時にWSDLファイルに定義している場合,そのWSDLファイルを指定してcjwsimportコマンドに実行したときに,SEIがnon-wrapperスタイルでマッピングされます。
SEIがnon-wrapperスタイルでマッピングされるWSDLファイルの例を次に示します。
<wsdl:definitions name="TestJaxWsService"
xmlns:soap=http://schemas.xmlsoap.org/wsdl/soap/
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://example.com/example"
targetNamespace="http://example.com/example">
<xsd:element name="getUserData" type="tns:getUserData"/>
...
<xsd:complexType name="getUserData">
<xsd:sequence>
<xsd:element name="in0" type="xsd:string"/>
<xsd:element name="in0" type="xsd:string"/>
<xsd:element name="hoge" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
...
</xsd:schema>
</wsdl:types>
...
<wsdl:message name="getUserDataRequest">
<wsdl:part name="inputParameters" element="tns:getUserData"/>
</wsdl:message>
...
</wsdl:definitions>
|
outのwrapper子要素が1個の場合,またはoutのwrapper子要素のローカル名が"return"の場合,その値がメソッドの戻り値へマッピングされます。ただし,型は異なっていてもローカル名が"return"であるwrapper子要素を複数記述した場合,標準エラー出力とログにエラーメッセージが出力され,処理が終了されます。
All Rights Reserved. Copyright (C) 2008, 2011, Hitachi, Ltd.