我已经在我的WSO2 ESB上定义了一个代理服务,它使用XQuery转换传入的消息(我遵循示例390)。
问题在于 ESB 将定义为 ELEMENT
的变量 payload
转换为定义为 document-node()
的 XQuery vairable。但是,我的 XQuery 只接受element
() :
declare variable $payload as element(ns:payload) external;
有没有办法定义 ESB 变量或修改变量表达式,以便element
XQuery 的输入?
我试过了:
<xquery key="xquery-key-req">
<variable xmlns:nms="http://my.nms.com" name="payload" expression="$body/nms:payload" type="ELEMENT" />
</xquery>
但这会返回以下错误:
Required item type of first argument of xf:xqueryRequest() is element({http://my.nms.com}payload); supplied value has item type document-node(element({http://my.nms.com}payload))
好吧,您要么必须更改查询以期望文档节点,要么必须更改查询的客户端以提供元素。我不知道 ESB,所以我不知道如何在那里进行更改,但更改查询很容易:
declare variable $payloadDoc as document-node(element(ns:payload)) external;
declare variable $payload as element(ns:payload) := $payloadDoc/ns:payload;