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-each
或all
来处理所有List
元素(如图here)。在 for-each
或 all
中,dom-to-xml-transformer
将起作用,因为消息负载将是一个 DOM 元素,
假设该列表是一个单例并将其第一个条目设置为 dom-to-xml-transformer
之前的有效负载:
<set-payload value="#[message.payload[0]]" />
我们是 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-each
或all
来处理所有List
元素(如图here)。在for-each
或all
中,dom-to-xml-transformer
将起作用,因为消息负载将是一个 DOM 元素, 假设该列表是一个单例并将其第一个条目设置为
dom-to-xml-transformer
之前的有效负载:<set-payload value="#[message.payload[0]]" />