我有一个序列将从注册表中从注册表特定的JSON验证架构中加载,具体取决于请求正文的值:
<switch description="" source="get-property('uri.var.service')">
<case regex="1">
<property expression="base64Decode(get-property('registry', 'conf:/schemas/1'))" name="schema" scope="default" type="STRING"/>
</case>
<case regex="2">
<property expression="base64Decode(get-property('registry', 'conf:/schemas/2'))" name="schema" scope="default" type="STRING"/>
</case>
</switch>
然后我尝试从中进行验证:
<validate cache-schema="true" source="json-eval($)">
<schema key="{get-property('schema')}"/>
</validate>
但是,这引发了我这个错误:
ValidateMediator Can not find JSON Schema {
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"uin": {
"type": "string"
}
},
"required": [
"uin"
]
}
为什么我不能从属性加载正确的模式?另外,在WSO2 EI的文档中,没有关于用于JSON验证的动态密钥的示例。
答案 0 :(得分:2)
根据验证中介器实现 [1],只能从注册表中加载架构密钥,而不能从整个架构中加载。在您的情况下,将加载整个架构来代替架构键。作为解决方案,您可以将schema属性定义为一个字符串值。
<property name="schema" scope="default" type="STRING" value="conf:/schema.json"/>