WSDL からのインポート: 生成されるオブジェクトと制約事項

ここでは、WSDL 定義がインポートされるときに生成されるオブジェクトと、知っておく必要のあるいくつかの制約事項について説明します。

生成されるオブジェクト

コマンド行インポートによってコピーされるファイル
mqsicreatemsgdefsfromwsdl コマンドは、インポート・プロセスが実行される前に、必要とする WSDL ファイルをワークスペースにコピーします。 これらはトップレベルの WSDL ファイルで、インポートは相対位置を使用して解決されます。 ファイルは、importFiles というフォルダーの、指定されたメッセージ・セットの下にコピーされます。
レポート・ファイル
WSDL インポーターは、インポート操作の結果をレポート・ファイルに追加し、プロセス中に発生したエラーがあればリストします。 レポート・ファイルのファイル名は <message set>.wsdl.report.txt です。
SOAP メッセージ定義
必要な SOAP mxsd がメッセージ・セットに追加されます。 現在、SOAP 1.1 定義が常にインポートされます。これにはいくつかの理由があります。
  • SOAP 1.1 が SOAP 1.2 よりも広く使用されている。
  • WSDL 1.1 用の標準の SOAP 1.2 バインディングがない。 これは、WSDL インポーターは、SOAP 1.2 が必要であることを確実には判別できないことを意味します。
  • SOAP 1.1 定義と SOAP 1.2 定義は同じメッセージ名を使用するため (例えば、「Envelope」)、両方をインポートすることはできない。

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 物理形式の物理プロパティーで指定され、それに応じて設定する必要があります。

メッセージ定義ファイル
その他のメッセージ定義ファイル名は <input file name>.mxsd として作成され、その内容は WSDL スタイルに従います。
文書スタイル
style=”document”の WSDL メッセージ部分 (すべての SOAP ヘッダー、fault、および headerfault 部分を含む) は、XML スキーマで定義されたエレメントを参照します。 このエレメントは、mxsd でグローバル・エレメントおよびブローカー・メッセージとしてインポートされます。

メッセージの xsi:type 出力ポリシーは「Never」に設定されます。

rpc スタイル
style=”rpc”の WSDL メッセージ部分 (および SOAP 本体に割り振られているもののみ) は、XML スキーマで定義されたタイプを参照します。 この場合、入力メッセージと出力メッセージは次のように作成されます。
  入力メッセージ 出力メッセージ
派生元 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」に設定されます。

制約事項

WSDL 定義のインポートに関連したいくつかの制約事項について説明します。 以下は WSDL 定義が WS-I に準拠していないものです。
SOAP 配列
WSDL 1.1 定義は SOAP 配列を定義します (WSDL rpc エンコード・スタイルにのみ該当し、WS-I には準拠しません)。
    <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 配列構文によっては、その使用が完全にサポートされているわけではありません。 構文解析時に、役立つツリーが作成されます (さらに書き込み時にシリアライズできます) が、以下の点に注意してください。

  • モデルは SOAP-ENC:arrayType 属性を考慮しません。
  • 部分的に伝送された配列のモデルは SOAP-ENC:offset 属性を考慮しません。

    例えば、offset[2] に指定された配列の最初のエレメントは ESQL で InputRoot.MRM.array.item[3] としてではなく、InputRoot.MRM.array.item[1] としてアクセスされます。

  • 多次元配列のモデルの表示は単一次元に平板化されます。 例えば、2 次元配列は ESQL で InputRoot.MRM.array.item[x][y] としてではなく、InputRoot.MRM.array.item[i] としてアクセスされます。ここで、指標 i は適宜計算する必要があります。
無名エレメント
上記の WSDL の抜粋は、以下の形式の SOAP インスタンス文書を記述しています。
    <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 をインポートして作成されたブローカー・モデルは、このケースを扱うために手動で編集する必要があります。

関連概念
メッセージのモデル化
メッセージ・モデル
関連タスク
メッセージ・モデルの開発
メッセージ定義ファイルの処理
メッセージ・モデル・オブジェクトの処理
関連資料
メッセージ・モデルの参照情報
インポート形式
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ad30560_