WSO2 EI 6.6.0 JSONTransformMediator Schema验证报错咨询
问题根因
WSO2 EI 6.6.0内置的JSON Schema验证模块基于旧的Draft 04规范实现,且存在已知的解析逻辑BUG,和新版Micro Integrator使用的高版本兼容验证器逻辑不同,因此会出现同一份schema跨环境验证结果不一致的问题。你提交的schema存在两处不符合旧版本验证器要求的写法:
type字段使用数组形式声明多类型兼容(如"type": ["null","object"]):WSO2 EI 6.6.0的JSONTransformMediator在解析该写法时,若对应字段下嵌套了array类型的子节点,会错误将整个schema判定为false,触发JSON schema is false报错items字段使用数组包裹验证规则:该写法用于元组验证场景,仅当你需要对数组不同位置的元素做不同规则校验时使用,旧版验证器对该写法的兼容性极差,普通的全数组元素同规则校验无需包裹数组
解决方案
按以下规则修改schema即可兼容WSO2 EI 6.6.0环境:
- 将所有
"type": ["null", "目标类型"]的写法,替换为Draft 04兼容的oneOf组合规则:
// 原写法 "type": ["null", "object"] // 替换后写法 "oneOf": [ {"type": "null"}, {"type": "object"} ]
- 普通数组同规则校验场景下,去掉items外层的数组包裹:
// 原写法 "items": [{"type": "object"}] // 替换后写法 "items": {"type": "object"}
- 显式指定schema使用Draft 04规范,避免解析器版本识别异常:在schema根节点添加
"$schema": "http://json-schema.org/draft-04/schema#"
修改后示例(简化版schema)
{ "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "result": { "oneOf": [ {"type": "null"}, { "type": "object", "properties": { "uos": { "type": "array", "items": {"type": "object"} } } } ] } } }
内容的提问来源于stack exchange,提问作者Mewster
相关产品推荐
相关产品推荐

