WSO2 Micro Integrator 1.1.0 合法JSON被判定为格式错误问题咨询
根因分析
你遇到的报错不是JSON本身不合法,而是Micro Integrator 1.1.0底层依赖的Staxon JSON/XML转换库存在特殊字符解析逻辑:默认会把JSON字符串内的{字符识别为XML属性的起始标记,你 payload 里的{hit}刚好触发了该逻辑,导致解析时报Expected attribute value错误,只有在需要解析JSON负载做修改时才会触发,直接透传日志、返回响应不会触发解析所以能正常运行。
可行解决方案
方案1:修改全局Staxon配置(最简便,无需调整业务流程)
在Micro Integrator的配置文件<MI_HOME>/conf/synapse.properties中添加如下配置项,清空Staxon的属性前缀配置,关闭{作为属性标记的特殊解析逻辑:
synapse.commons.json.staxon.attributePrefix=
配置修改完成后重启Micro Integrator实例即可生效,后续处理包含{}的字符串时不会再触发解析错误。
方案2:以纯文本形式处理负载(适用无法修改全局配置的场景)
在对负载做任何修改操作前,先将完整负载以纯文本形式读取,绕过JSON解析逻辑,处理完成后再重新写入 payload,操作步骤如下:
- 用Enrich mediator将原始完整body存入属性,避免JSON路径解析:
<enrich> <source type="body" clone="true"/> <target type="property" property="rawJsonPayload"/> </enrich>
- 用Script mediator做字符串替换,清理不需要的标记后重新设置payload:
<script language="js"><![CDATA[ var rawStr = mc.getProperty('rawJsonPayload').toString(); // 清理hit标记,也可以按需做其他字符串处理 var cleanedStr = rawStr.replaceAll('{hit}', '').replaceAll('{/hit}', ''); mc.setPayloadJSON(cleanedStr); ]]></script>
该方案全程不会触发原始负载的JSON解析,不会触发报错。
方案3:升级Micro Integrator版本
如果环境允许升级,Micro Integrator 4.0及以上版本已经调整了Staxon的默认配置,不会再将{作为XML属性标记解析,也可以解决该问题。
内容的提问来源于stack exchange,提问作者Apoc
相关产品推荐
相关产品推荐

