You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 MI使用PayloadFactory的json-eval()时出现XPathSyntaxException

问题分析与解决方案

错误原因

你遇到的XPathSyntaxException是因为在PayloadFactory中介器的<arg>标签里,指定了evaluator="xml"(默认也是xml),但使用了JSONPath语法$.client_id。XML evaluator会把这个表达式当作XPath解析,而XPath不支持$开头的语法,因此报错。

修正方案

有三种可行的修正方式,任选其一即可:

方式1:使用JSON Evaluator

将<arg>的evaluator属性改为json,直接用JSONPath表达式:

<payloadFactory media-type="json">
    <format>{"client_id":"$1","client_secret":"$2"}</format>
    <args>
        <arg evaluator="json" expression="$.client_id"/>
        <arg evaluator="json" expression="$.client_secret"/>
    </args>
</payloadFactory>

方式2:用json-eval()包裹表达式

保持evaluator="xml",但用json-eval()函数包裹JSONPath,让MI正确解析:

<payloadFactory media-type="json">
    <format>{"client_id":"$1","client_secret":"$2"}</format>
    <args>
        <arg evaluator="xml" expression="json-eval($.client_id)"/>
        <arg evaluator="xml" expression="json-eval($.client_secret)"/>
    </args>
</payloadFactory>

方式3:引用已提取的属性

你已经通过<property>标签将client_id和client_secret提取到了默认作用域,直接引用这些属性更高效,无需重复解析JSON:

<payloadFactory media-type="json">
    <format>{"client_id":"$1","client_secret":"$2"}</format>
    <args>
        <arg evaluator="xml" expression="$ctx:client_id"/>
        <arg evaluator="xml" expression="$ctx:client_secret"/>
    </args>
</payloadFactory>

额外建议

  • 确保在使用json-eval()时,当前载荷确实是JSON格式(你已经设置了正确的Content-Type,这部分没问题)。
  • Iterate中介器使用json-eval($)会遍历整个JSON结构,如果你的JSON是数组,建议指定具体的数组路径(比如json-eval($.items))来避免不必要的遍历。

内容的提问来源于stack exchange,提问作者Roy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 13:52:40