[英]CDATA in payload factory in WSO2 ESB
我正在尝试在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>
这个问题的解决方案是什么? 任何其他设置有效载荷或任何变通方法的调解员将不胜感激。
您可以在有效负载工厂介体中使用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。
您可以使用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
如果要传递CDATA,可以使用XSLT介体构造此类消息。 Payload工厂,AFAIK不支持CDATA参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.