3.3.9 WSDLの生成時および定義時の注意事項
WSDLを生成および定義するときに注意が必要な内容について説明します。
- 〈この項の構成〉
-
(1) ソースコード生成時のWSDL検証機能の実行について
WSDL2Javaコマンドを実行してソースコードを生成するときは,WSDL検証機能を有効にしてください。WSDL検証機能は,コマンド実行時に-Cオプションを指定することで有効にできます。
WSDL検証機能については,「9.2 WSDL2Javaコマンド(ソースコードの生成)」を参照してください。
(2) Javaインタフェースのメソッドのパラメタ名と生成されるWSDLの対応
Java2WSDLコマンドを実行してJavaインタフェースからWSDLを生成する場合,Javaインタフェースのメソッドのパラメタ名は,WSDLに「inXX」(XXは整数)の名称でマッピングされます。
Javaインタフェースおよび生成されるWSDLの例を示します。
-
Javaインタフェース
package localhost; public interface UserInfo extends java.rmi.Remote { public String getUserData(String user_no1, String user_no2) throws java.rmi.RemoteException; }
-
生成されるWSDL
... <wsdl:message name="getUserDataResponse"> </wsdl:message> <wsdl:message name="getUserDataRequest"> <wsdl:part name="in0" type="xsd:string"/> <wsdl:part name="in1" type="xsd:string"/> </wsdl:message> <wsdl:portType name="UserInfo"> <wsdl:operation name="getUserData" parameterOrder="in0 in1"> <wsdl:input message="intf:getUserDataRequest" name="getUserDataRequest"/> <wsdl:output message="intf:getUserDataResponse" name="getUserDataResponse"/> </wsdl:operation> ...
(4) WSDLを手動で定義する場合の注意
WSDLを手動で定義する場合は,Application ServerでサポートしているWSDL 1.1仕様の範囲で記述してください。Application ServerでサポートしているWSDL 1.1仕様の範囲については「12.2 WSDL 1.1との対応」を参照してください。
(5) extension要素を使用した場合のメッセージ形式について
次に示す例のように,多段的にextension baseを使用した場合,多段的なcomplexType要素の一部が上位要素の属性と見なしたSOAPメッセージが送信されます。
-
WSDL定義
<complexType name="arrayList"> <complexContent> <extension base="tns:list"> <sequence /> </extension> </complexContent> </complexType> <complexType name="list"> <complexContent> <extension base="tns:collection"> <sequence /> </extension> </complexContent> </complexType> <complexType name="collection"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="anyType[]" /> </restriction> </complexContent> </complexType>
-
SOAPメッセージ
<ns1:checkArrayList soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://testdata"> <in xsi:type="ns1:ArrayList"> <collection xsi:type="soapenc:Array" soapenc:arrayType="soapenc:string[2]" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <item xsi:type="xsd:string">testdata</item> <item xsi:type="xsd:int">1</item> </collection> </in> </ns1:checkArrayList>
(6) 他社クライアントおよび他社サービスと通信する場合のデータ型に関する注意
他社クライアントまたは他社サービスと通信するためのWSDL定義を作成する場合,双方で扱えるデータ型をWSDL定義に記述してください。
SOAP通信基盤で扱えるデータ型については,「12.2.3 XML Schemaのデータ型のサポート範囲」を参照してください。他社クライアントまたは他社サービスで扱えるデータ型については,各製品のマニュアルを参照してください。
(7) 派生データ型の定義に関する注意
データ型を派生させるために使用する,制限(restriction),ユニオン(union),およびリスト(list)の中で,SOAP通信基盤で有効になるのは制限(restriction)の列挙(enumeration)だけです。WSDL定義に派生データ型を定義する場合,またはWSDL定義からソースを生成する場合に,列挙(enumeration)以外は使用しないでください。列挙(enumeration)以外を使用した場合,指定値が有効にならなかったり,生成されたソースがコンパイルできなかったりする場合があります。
(8) nillable属性に"false"を指定した場合の動作について
WSDL定義でnillable属性に"false"を指定した変数(データ型)にnullを設定しても,SOAPメッセージの送受信時エラーにはなりません。その場合,他社製品と通信できない場合があります。nullを指定した場合のSOAPメッセージの例を次に示します。
<変数名 xsi:nil="true"/>
(9) WSDL2Javaコマンド実行時のKDCCC0289-Wメッセージについて
Java2WSDLコマンドを実行して生成されたWSDLファイル定義では,名前空間URI「http://schemas.xmlsoap.org/soap/encoding/」に属する型を参照していても,その名前空間URI「http://schemas.xmlsoap.org/soap/encoding/」のインポート文が記述されません。そのため,WSDL2Javaコマンド実行時に,Java2WSDLコマンドを使用して生成されたWSDLファイルを指定すると,KDCCC0289-Wメッセージが出力されます。
WSDL2Javaコマンドを実行したときにKDCCC0289-Wメッセージが出力されても,名前空間URI「http://schemas.xmlsoap.org/soap/encoding/」のインポート文が記述されている場合と同様に,正常に処理されます。
KDCCC0289-Wメッセージは,次のすべての条件が重なる場合に出力されます。
-
Java2WSDLコマンドの入力であるJavaインタフェースで,次に示すJavaクラスを使用している。
- <この現象の原因となるJavaクラス名とWSDL内のデータ型の対応>
-
(Javaクラス名)→(WSDL内データ型)
java.lang.String → soapenc:string
java.lang.Boolean → soapenc:boolean
java.lang.Double → soapenc:double
java.lang.Float → soapenc:float
java.lang.Integer → soapenc:int
java.math.BigInteger → soapenc:integer
java.math.BigDecimal → soapenc:decimal
java.lang.Long → soapenc:long
java.lang.Short → soapenc:short
java.lang.Byte → soapenc:byte
byte[] → soapenc:base64
- 注
-
プレフィクスsoapencは,「http://schemas.xmlsoap.org/soap/encoding/」です。
-
Java2WSDLコマンド実行時に,-Tオプションに"1.2"を指定してWSDLファイルを生成する。
-
上記で生成したWSDLファイルを指定してWSDL2Javaコマンドを実行する。
KDCCC0289-Wメッセージを出力させないためには,WSDLファイルを手動で編集し,名前空間URI「http://schemas.xmlsoap.org/soap/encoding/」のインポート文を追加してください。WSDL2Javaコマンドを実行するときには,編集したWSDLファイルを指定してください。
(10) WSDLとSOAPサービスの対応
一つのWSDLに複数のSOAPサービスを対応させることはできません。