DSS サービスを呼び出して XML を受け取り、イテレーター メディエーターを使用して XML 内のタグを反復処理します。イテレーター内では、enrich メディエーターを使用していくつかの XML ノードを XML に追加しますが、ループするたびに、またはイテレーターを離れるたびに変更が失われます。最後のループでも、返された XML は変更を保持しません。
2 に答える
反復メディエーターはクローン メディエーターのように機能します。違いは、最初のメッセージをいくつかのフラグメントに分割することです (最初のメッセージを複製しません)。
メディエーターの反復後に親メディエーションを続行することを選択した場合 (属性 continueParent を true に設定)、最初のメッセージ (反復が発生する前にメディエーションしていたメッセージ) が表示されます。
最初のメッセージの内容を変更したい場合は、enrich / XSLT / javascript を iterate または clone の外で使用する必要があります
これが古い投稿であることは知っていますが、しばらくの間、イテレータを使用してメッセージ ペイロード構造を変更しようとしてきましたが、それが設計されたものではないことがわかりました。
イテレータは、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 メディエータでキーを参照するだけです。