2017-06-01 3 views
0

こんにちは私はSOAPを行うには、スクリプトのメディエータを使用しようとしている - > JSON変換WSO2 - getPayloadXML()を使用したスクリプト・メディエータXMLプロパティの取得。

<ns:getTestMethodResponse xmlns:ns="http://main.wsmediator"> 
<ns:return>getTestMethod is called</ns:return> 
</ns:getTestMethodResponse> 

は、これは私が私が作成したテストサービスから受け取ってる応答の一部です。質問は、私はWO2 ESBの文書に記載されているように要素データを取得することができません。私も

mc.getPayloadXML()..::ns:return.toString(); 

を試してみた

mc.getPayloadXML()..::return.toString(); 

ある は、私がここで間違ってやっていますか? ヘルプに感謝します。

答えて

1

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

+0

感謝をチェックしますが、このアプローチはどちらか動作しませんでした。 WSO2 Developer Studioでは、メディエーションロジックを保存できませんでした。 これはこの行と関係があります 'var return = mc.getPayloadXML().. :((ns:return).toString();' – StO

+0

ありがとうございました。私が確認できるDeveloper Studioのログがあるかどうか知っていますか? – StO

+0

名前空間接頭辞をワイルドカードに置き換えようとしましたか?それでも問題が発生する場合、Developer Studioが提供する完全なエラー/警告を共有できますか? – ophychius

関連する問題