2

DSS サービスを呼び出して XML を受け取り、イテレーター メディエーターを使用して XML 内のタグを反復処理します。イテレーター内では、enrich メディエーターを使用していくつかの XML ノードを XML に追加しますが、ループするたびに、またはイテレーターを離れるたびに変更が失われます。最後のループでも、返された XML は変更を保持しません。

4

2 に答える 2

3

反復メディエーターはクローン メディエーターのように機能します。違いは、最初のメッセージをいくつかのフラグメントに分割することです (最初のメッセージを複製しません)。

メディエーターの反復後に親メディエーションを続行することを選択した場合 (属性 continueParent を true に設定)、最初のメッセージ (反復が発生する前にメディエーションしていたメッセージ) が表示されます。

最初のメッセージの内容を変更したい場合は、enrich / XSLT / javascript を iterate または clone の外で使用する必要があります

于 2014-08-05T15:53:32.793 に答える
1

これが古い投稿であることは知っていますが、しばらくの間、イテレータを使用してメッセージ ペイロード構造を変更しようとしてきましたが、それが設計されたものではないことがわかりました。

イテレータは、XPATH 式に基づいてメッセージを小さなメッセージに複製するために設計されています。ターゲット シーケンス内では、メッセージに対して好きなことを行うことができます。これは通常、別の Web サービスを呼び出しています。しかし、このメッセージは多かれ少なかれイテレータ操作のコンテキストに限定されています。反復子が定義済みのターゲット シーケンスを終了すると、そのメッセージは廃棄されます。反復が完了した後に親シーケンスを続行することを指定した場合、WSO2 は既定で古いメッセージ コンテキストを取得します。

XSLT による救助

私はあなたが何を考えているか知っています - 「なんてこった、私は何か新しいことを学ばなければならない」. これが、私がこれまで XSLT をほとんど無視してきた理由です。Synapse 構成言語ですべてを実行できると考えていました。しかし、XSLT は本当に爆弾です。W3Schools のチュートリアルをチェックして、何ができるかを確認することをお勧めします: http://www.w3schools.com/xsl/

XSLT の強力な点は、テンプレート内で for-each 式を使用できることです: http://www.w3schools.com/xsl/xsl_for_each.asp

その式への引数として、実際にメッセージを構造化することを除いて、(反復メディエーターと同様に) XPATH を指定できます。

ESB 内で XSLT を使用するには、XSLT スタイルシートを含むローカル XML エントリを追加し、XSLT メディエータでキーを参照するだけです。

于 2016-02-04T02:11:42.317 に答える