XQuery转换

时间:2015-08-21 13:09:43

标签: mule

我们是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一起工作任何帮助将不胜感激。

感谢。

1 个答案:

答案 0 :(得分:0)

xquery-transformer的返回类型在3.5.2和3.6之间发生了变化。

  • 3.5.2setReturnDataType(DataTypeFactory.create(Element.class));
  • 3.6.2setReturnDataType(DataTypeFactory.create(List.class));

dom-to-xml-transformer不支持List作为源类型,因此只是跳过它。

要解决此问题,您需要决定要对返回的列表执行的操作:

  • 使用for-eachall来处理所有List元素(如here所示)。在for-eachall内,dom-to-xml-transformer将起作用,因为消息有效内容将成为DOM元素,
  • 假设列表是一个单例,并将其第一个条目设置为dom-to-xml-transformer之前的有效负载:

    <set-payload value="#[message.payload[0]]" />