我正在尝试在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服务方法未被调用.在这个link中它说如果我使用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>
解决方法
您可以使用XSLT介体(Payload工厂介体不支持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