【问题标题】:XQuery input error : document-node type where element expected, for WSO2 ESBXQuery 输入错误:WSO2 ESB 的预期元素的文档节点类型
【发布时间】:2023-10-18 07:46:01
【问题描述】:

我在我的 WSO2 ESB 上定义了一个代理服务,它使用 XQuery 转换传入的消息(我关注 Sample 390)。

问题在于 ESB 将变量 payload(定义为 ELEMENT)转换为定义为 document-node() 的 XQuery 变量。但是,我的 XQuery 只接受 element() :

declare variable $payload as element(ns:payload) external;

有什么方法可以定义 ESB 变量或修改变量表达式以使 XQuery 的输入为element

我试过了:

<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)) 

【问题讨论】:

    标签: xpath wso2 xquery wso2esb esb


    【解决方案1】:

    好吧,您要么必须更改查询以期望文档节点,要么必须更改查询的客户端以提供元素。我不知道 ESB,所以我不知道如何在那里进行更改,但是更改查询很容易:

    declare variable $payloadDoc as document-node(element(ns:payload)) external;
    declare variable $payload as element(ns:payload) := $payloadDoc/ns:payload;
    

    【讨论】:

    • 谢谢,这行得通。我希望有一个解决方案可以将 ESB 配置为传入 element,但在任何地方都找不到。