ここでは、WSDL 定義がインポートされるときに生成されるオブジェクトと、知っておく必要のあるいくつかの制約事項について説明します。
SOAP 1.2 インスタンス文書を構文解析する必要がある場合、手動で SOAP 1.1 定義を除去し、「IBM 提供メッセージ」を選択して、「メッセージ定義ファイル」ウィザードから SOAP 1.2 定義をインポートする必要があります。
メッセージ・セットに TDS または CWF レイヤーがある場合、インポートされた SOAP 定義に対する警告を多数受け取っていることに気付くかもしれません。 これらの大多数は無視できますが、ブール属性については許容値を考慮する必要があります。 SOAP 1.1 では、ブール値は 1 または 0 ですが、SOAP 1.2 では、値は true および false です。 メッセージ・セットのブール値の XML 表記は、XML 物理形式の物理プロパティーで指定され、それに応じて設定する必要があります。
メッセージの xsi:type 出力ポリシーは「Never」に設定されます。
入力メッセージ | 出力メッセージ | |
---|---|---|
派生元 | WSDL 操作の wsdl:input の子 (あれば) および WSDL メッセージとそれが識別する部分 | WSDL 操作の wsdl:output の子 (あれば) および WSDL メッセージとそれが識別する部分 |
エレメントの名前 | WSDL 操作エレメントの名前属性の値 | WSDL 操作エレメントで、接尾部が "Response" になっている名前属性の値 |
エレメントのネーム・スペース | 対応する soap:body エレメントのネーム・スペース属性の値 | 対応する soap:body エレメントのネーム・スペース属性の値 |
それぞれのメッセージはローカル複合タイプで、一連のエレメントになっています。 各エレメントの名前は、入力エレメントまたは出力エレメントによってそれぞれ識別されたメッセージの WSDL 部分の名前属性の値です。 それらのエレメントにはネーム・スペースがありません (基礎となるスキーマ表記は form="unqualified")。さらに、名前の競合を避けるためにローカルにスコープ設定されます。 こうしたローカル・エレメントのタイプは、対応する部分エレメントのタイプ属性によって参照される XML スキーマ・タイプです。 (タイプは WSDL スキーマにおいてグローバルになります。)
WSDL 定義で soap:body が use="encoded" とともに定義されていた場合、メッセージ定義には SOAP-ENV ネーム・スペースの属性グループ encodingStyle への参照が含まれ、メッセージの xsi:type 出力ポリシーは「SOAP エンコード規則に従う」に設定されます。 そうでない場合、メッセージの xsi:type 出力ポリシーは「Never」に設定されます。
<xsd:complexType name="t"> <xsd:complexContent> <xsd:restriction base="SOAP-ENC:Array"> <xsd:sequence> <xsd:element name="item" type="string" maxOccurs="unbounded"/> </xsd:sequence> <xsd:attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[]"/> </xsd:restriction> </xsd:complexContent> </xsd:complexType>
SOAP 配列構文によっては、その使用が完全にサポートされているわけではありません。 構文解析時に、役立つツリーが作成されます (さらに書き込み時にシリアライズできます) が、以下の点に注意してください。
例えば、offset[2] に指定された配列の最初のエレメントは ESQL で InputRoot.MRM.array.item[3] としてではなく、InputRoot.MRM.array.item[1] としてアクセスされます。
<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]"> <item xsi:type="xsd:string">A general text string</item> <item xsi:type="xsd:token">A restriction of the string type</item> <item xsi:type="xsd:Name">ARestrictionOfTheTokenType</item> </SOAP-ENC:Array>
ブローカー・モデルはこれを予期したとおりに処理しますが、SOAP エンコードでは、SOAP エンコード・ネーム・スペースからのタイプ・エレメントを使用するために、配列エレメントのエンコードも許可されています。 これは、同じ WSDL 定義を使用するアプリケーションは、以下の形式のインスタンス文書を作成する可能性があることを意味します。
<SOAP-ENC:Array SOAP-ENC:arrayType="xsd:string[3]"> <SOAP-ENC:string>A general text string</SOAP-ENC:string> <SOAP-ENC:token>A restriction of the string type</SOAP-ENC:token> <SOAP-ENC:Name>ARestrictionOfTheTokenType</ SOAP-ENC:Name> </SOAP-ENC:Array>
パーサーに自己定義エレメントとして見なされることが受け入れられていなければ、WSDL をインポートして作成されたブローカー・モデルは、このケースを扱うために手動で編集する必要があります。