WSDL からインポートした場合、 いくつかのオブジェクトが生成されますが、制約事項が適用される可能性があります。
WSDL インポーターは、インポート操作の結果をレポート・ファイルに追加し、プロセス中に発生したすべてのエラーをリストします。 レポート・ファイルのファイル名は、application または library.wsdl.report.txt、あるいは message set.wsdl.report.txt です。
必要な SOAP .xsds ファイルが、アプリケーションまたはライブラリーに追加されます。 メッセージ・セットを使用している場合、.mxsds ファイルがメッセージ・セットに追加されます。
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>
<xsd:sequence>
<xsd:element ref="s:schema"/>
</xsd:sequence>
</xsd:complexType>
このタイプの WSDL ファイルを妥当性検査エラーなしで WebSphere® Message
Broker Toolkit に正常にインポートするには、ネーム・スペース・インポート・ステートメントを手動でスキーマのネーム・スペースに追加する必要があります。例:<xsd:import namespace="http://www.w3.org/2001/XMLSchema"/>
インポート・ステートメントはまずスキーマ・エレメント内に配置し、どの複合タイプまたはエレメント定義よりも確実に前に置いてください。 更新された WSDL を右クリックし、「妥当性検査」をクリックして、WSDL を再度妥当性検査します。
<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 をインポートして作成されたブローカー・モデルは手動で編集する必要があります。