4

以下の例で述べたように、ESB でシーケンスを記述し、ペイロード ファクトリを使用してペイロード データを入力しようとしています。

  <payloadFactory>
     <format>
        <p:echoInt xmlns:p="http://echo.services.core.carbon.wso2.org">
           <in xmlns="">$1</in>
        </p:echoInt>
     </format>
     <args>
        <arg xmlns:ns="http://org.apache.synapse/xsd" expression="an-xml-formatted-string"/>
     </args>
  </payloadFactory>
 <send>
     <endpoint>
        <address uri="http://noon101:8280/services/echo" format="soap11"/>
     </endpoint>
  </send>

このペイロードをサービスに送信すると文字列が xml としてフォーマットされるため、サービスは xml パラメータを解析しようとし、(正確な理由がわかりません) Web サービス メソッドが呼び出されません。このリンクでは、cdata を使用すると、パーサーが xml 形式の文字列を解析せず、問題が発生しないことが示されています。

しかし問題は、Payload Factory メディエーターがそのコンテンツで Cdata を受け入れないことです。以下に示すように Payload Factory の構成を記述すると、そこから CDATA キーワードが削除され、問題が発生します。

  <payloadFactory>
     <format>
        <p:echoInt xmlns:p="http://echo.services.core.carbon.wso2.org">
           <in xmlns=""> <![CDATA[ $1 ]]> </in>
        </p:echoInt>
     </format>
     <args>
        <arg xmlns:ns="http://org.apache.synapse/xsd" expression="an-xml-formatted-string"/>
     </args>
  </payloadFactory>

この問題の解決策は何でしょうか? ペイロードを設定する他のメディエーターまたは回避策を高く評価します。

4

3 に答える 3

3

それに XSLT メディエーターを使用できます (ペイロード ファクトリ メディエーターは CDATA をサポートしていません)。でも、使えば。また、メディエーション フローで CDATA を保持するには、次の構成を行う必要があります。[1]

これも役に立ちます。 http://tharindumathew.com/2012/05/24/adding-cdata-tags-through-xslt/

[1] http://blog.shelan.org/2013/03/how-to-send-cdata-inside-your-soap.html

于 2013-05-22T12:23:02.247 に答える
0

CDATA を渡したい場合は、XSLT メディエーターを使用してそのようなメッセージを作成できます。ペイロード ファクトリ、AFAIK は CDATA 引数をサポートしていません。

于 2013-05-22T10:32:00.963 に答える