我们是EE客户,目前在3.5.2。我正在将应用程序从3.5.2迁移到3.6。我注意到3.5.2中的工作不再适用于3.6下面是代码片段
<logger message="PANPW2 #[message.payload]" level="INFO" doc:name="Logger"/>
<set-property propertyName="Content-Type" value="text/xml" doc:name="Property"/>
<mulexml:xquery-transformer name="xqueryAvatier">
<mulexml:xquery-text>
<![CDATA[
xquery version "3.0";
declare namespace soapenv = "http://www.w3.org/2003/05/soap-envelope";
declare namespace ivr = "http://example.com/IVR";
declare variable $document external;
<soapenv:Envelope xmlns:soapenv = "http://www.w3.org/2003/05/soap-envelope" xmlns:ivr="http://example.com/IVR">
<soapenv:Header/>
<soapenv:Body>
{$document}
</soapenv:Body>
</soapenv:Envelope>
]]>
</mulexml:xquery-text>
</mulexml:xquery-transformer>
<logger message="PANPWFlow3 #[message.payload]" level="INFO" doc:name="Logger"/>
<mulexml:dom-to-xml-transformer doc:name="DOM to XML"/>
<logger message="PANPWFlow4 #[message.payload]" level="INFO" doc:name="Logger"/>
xml转换器的最后一个dom没有生成xml文档并返回一个DOM对象net.sf.saxon.dom.ElementOverNodeInfo@104000 PANPW2记录器输出xml文档。记录器PANPWFlow3正在输出一个正确的DOM对象。成功的dom-xml变换器无能为力。这与3.5.2一起工作任何帮助将不胜感激。
感谢。
答案 0 :(得分:0)
xquery-transformer
的返回类型在3.5.2和3.6之间发生了变化。
setReturnDataType(DataTypeFactory.create(Element.class));
setReturnDataType(DataTypeFactory.create(List.class));
dom-to-xml-transformer
不支持List
作为源类型,因此只是跳过它。
要解决此问题,您需要决定要对返回的列表执行的操作:
for-each
或all
来处理所有List
元素(如here所示)。在for-each
或all
内,dom-to-xml-transformer
将起作用,因为消息有效内容将成为DOM元素,假设列表是一个单例,并将其第一个条目设置为dom-to-xml-transformer
之前的有效负载:
<set-payload value="#[message.payload[0]]" />