XQuery 转换

XQuery Transformation

我们是 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"/>

最后一个 dom 到 xml 的转换器没有生成 xml 文档并返回一个 DOM 对象 net.sf.saxon.dom.ElementOverNodeInfo@104000 PANPW2 记录器输出 xml 文档。记录器 PANPWFlow3 正在输出一个正确的 DOM 对象。 dom-xml transformer successful 什么都不做。这适用于 3.5.2 任何帮助将不胜感激。

谢谢。

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

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

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

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

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

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