2017-01-09 42 views
0

我正在使用Anypoint Studio 6.2和Mule 3.8.1,并且添加了一个raml和JSON模式,该模式在api-workbench中没有显示错误,但在Anypoint中显示Json模式无效错误工作室。RAML文件在Anypoint Studio中引发无效的Json模式响应

我发现如果我从链接到raml的所有Json模式(即raml,特征和类型)中删除必需的字段,那么一切正常。有没有办法来解决这个问题?

我使用所需的语法:

"required": [ 
    "Organisation", 
    "Address" 
    ], 

更新

,我也看到了org.mule.common.metadata.parser.json.SchemaException: java.net.MalformedURLException: no protocol:,其中使用JSON模式时的$裁判不能得到解决创建要在Dataweave中使用的元数据类型:

{ 
    "id": "http://localhost:8000/schemas/products.json#", 
    "$schema": "http://json-schema.org/draft-04/schema#", 
    "title": "Products", 
    "type": "object", 
    "properties": { 
     "Products": { 
      "$ref": "common/text.json" 
     } 
    }, 
    "additionalProperties": false 
} 

谢谢

+0

也许它仅支持V3架构。尝试在每个字段中使用put“required”:“true”(这是v3架构格式) – Pedro

回答

1

我这样做,所以它在Studio中绝对支持。没有看到你的整个JSON模式文件,我必须猜测原因,我的假设是,你要么没有指定JSON模式版本,要么你指定了错误的版本(应该至少是v4,而不是v3才能工作)。对我来说,以下工作:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "object", 
    "properties": { 
    "Organisation": { "type": "string" }, 
    "Address": { "type": "string" } 
    }, 
    "required": [ "Organisation", "Address" ] 
} 
+0

我发现当我遵循Pedro的建议时,它解决了所有问题,并且如果我恢复使用所需的数组,则错误所以看起来像它目前唯一与v3兼容。有什么我需要做的更多它到最新版本? – user3165854

+0

您是否按照Brad的建议将“$ schema”:“http://json-schema.org/draft-04/schema”添加到您的json模式中? – Pedro

+0

是的,根据Pedro的评论和我的回答,你需要指定模式版本4.正如我最初所说,这绝对适用于我正在从事的项目的工作室。 –

0

至于新增加 - $裁判 - 我们也用这个,它似乎被APIKit正确解析(即邮件正确验证),但我不使用这些模式创建Dataweave元数据,所以我不能保证它会表现相同(我希望它使用相同的分析器,但不能肯定地说)。

Common.json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "definitions": { 
     "emailAddress": { 
      "description": "Basic RegEx for an email address", 
      "type": ["string","null"], 
      "pattern": "^[a-zA-Z0-9'._%+-][email protected][a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$" 
     } 
    } 
} 

Sample.json:

{ 
    "$schema": "http://json-schema.org/draft-04/schema", 
    "type": "object", 
    "properties": { 
     "email": { 
      "$ref": "common.json#/definitions/emailAddress" 
     } 
    } 
}