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

6

您可以在有效负载工厂调解器中使用 CDATA。您唯一需要做的是,您需要将格式存储在注册表中并从那里使用它。注册表资源

以下是一个示例。在此示例中,我使用我之前调用的响应作为我正在使用有效负载工厂调解器准备的消息的输入。

     <property xmlns:ns="http://org.apache.synapse/xsd"
               name="ALLRESULTS"
               expression="$body/child::*[fn:position()=1]"
               scope="default"
               type="STRING"/>

     <payloadFactory media-type="xml">
        <format key="conf:/repository/esb/myPF"/>
        <args>
           <arg evaluator="xml" expression="$ctx:ALLRESULTS"/>
           <arg value="1"/>
        </args>
     </payloadFactory>

注册表资源的内容如下。

                       <ns:testMethod xmlns:ns="http://example.com">
                            <xs:xmlBody xmlns:xs="http://example.com"><![CDATA[$1]]></xs:xmlBody>
                            <xs:sessionId xmlns:xs="http://example.com">$2</xs:sessionId>
                        </ns:testMethod>

通过这种方式,您可以在有效负载工厂调解器中使用 CDATA。

于 2016-02-25T02:42:36.597 回答
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 回答