WSO2 EI,从属性加载验证模式

时间:2019-05-31 09:15:16

标签: wso2 wso2esb wso2ei

我有一个序列将从注册表中从注册表特定的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验证的动态密钥的示例。

1 个答案:

答案 0 :(得分:2)

根据验证中介器实现 [1],只能从注册表中加载架构密钥,而不能从整个架构中加载。在您的情况下,将加载整个架构来代替架构键。作为解决方案,您可以将schema属性定义为一个字符串值。

<property name="schema" scope="default" type="STRING" value="conf:/schema.json"/>