E4Xは名前空間を認識しているため、デフォルト以外の名前空間にある要素にアクセスするには、名前空間/プレフィックスを宣言するか、ワイルドカード*を使用する必要があります。
編集:ESB自体のデバッグでは、「復帰」という単語を使用できないことがわかりました。これは予約語であり、xmlから "return"要素を取得するためのクエリ文字列の一部としてではなく、許可されていません。
var return = mc.getPayloadXML()..*::value.toString();
:
var ns = new Namespace('http://main.wsmediator');
var xmlValue = mc.getPayloadXML()..ns::value.toString();
別のオプションは、ワイルドカードを使用することです:
は、次のように要素が「値」の代わりに、コードをコンパイルし、仕事だろうと呼ばれた瞬間を前提とします
しかし、JavaScriptの標準に準拠するようにXMLペイロードを変更することは、あまり美しくはなく、おそらく実行可能な解決策ではありません。代わりに、別の方法で要素にアクセスしようとすることができます。あなたがmc.getPayloadXML()を行うときに
<inSequence>
<script language="js">
var ns = new Namespace('http://main.wsmediator');
var value = mc.getPayloadXML().*.toString();
mc.setProperty("Asterisk", value);
</script>
<log>
<property name="Asterisk" expression="get-
property('Asterisk')"/>
</log>
<respond/>
</inSequence>
getTestMethodResponse要素がルート要素である、アスタリスクはあなたに、この要素の子を与えます。これはうまくいきませんが、それはメッセージ構造に関するいくつかの前提に基づいているためです。
もう1つの選択肢は、スクリプトメディエーターを完全に使用せず、代わりにPayloadFactoryを使用することです。たとえば:E4Xの詳細について
<payloadFactory media-type="json">
<format>
{"return":"$1"}
</format>
<args>
<arg xmlns:ns="http://main.wsmediator"
evaluator="xml"
expression="//ns:return"/>
</args>
</payloadFactory>
は、PayloadFactoryMediatorの詳細についてはhere を確認する提案@ophychiusためhere
感謝をチェックしますが、このアプローチはどちらか動作しませんでした。 WSO2 Developer Studioでは、メディエーションロジックを保存できませんでした。 これはこの行と関係があります 'var return = mc.getPayloadXML().. :((ns:return).toString();' – StO
ありがとうございました。私が確認できるDeveloper Studioのログがあるかどうか知っていますか? – StO
名前空間接頭辞をワイルドカードに置き換えようとしましたか?それでも問題が発生する場合、Developer Studioが提供する完全なエラー/警告を共有できますか? – ophychius