尝试使用最新Eclipse版本(v4.11,2019-03)的JSON模式验证功能时-我在日志中注意到错误:
Eclipse v4.11(版本2019-03)引发有效JSON架构异常
不是字符串:{“ type”:“ string”,“ format”:“ uri-reference”}
获得最小的JSON模式
{
"$schema": "http://json-schema.org/schema#",
"$id": "http://localhost/person.schema.json"
}
以及
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://localhost/person.schema.json"
}
我尝试将$ id的URI更改为有效的网址(我拥有)-并尝试了有效的本地文件URI位置-但仍然遇到相同的错误。
根据我对JSON Schema规范的阅读-这些是有效的$ schema和$ id值。
Eclipse仍将使用这些$ schema和$ id值来验证模式-并且我还确认了该模式已通过python 3.7验证(使用jsonschema)
例如:
此JSON
{
"name": "Joe Smith",
"email": "me@example.com",
"address": "101 main st",
"telephone": "206-910-5555",
"myColor": "red"
}
可以使用此JSON模式进行验证(但仍会引发异常)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://localhost/person.schema.json",
"title": "person",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"address": {
"type": "string"
},
"telephone": {
"type": "string"
},
"myColor": {
"type": "string",
"enum": ["red", "blue"],
"description": "we expect red or blue"
}
},
"additionalProperties": false,
"required": [
"name",
"email",
"address",
"myColor"
]
}
“异常堆栈跟踪”显示:
java.lang.UnsupportedOperationException: Not a string: {"type":"string","format":"uri-reference"} at org.eclipse.json.provisonnal.com.eclipsesource.json.JsonValue.asString(JsonValue.java:364) at org.eclipse.json.provisonnal.com.eclipsesource.json.JsonObject.getString(JsonObject.java:643) at org.eclipse.json.impl.schema.JSONSchemaNode.resolveReferences(JSONSchemaNode.java:88) at org.eclipse.json.impl.schema.JSONSchemaNode.resolveReferences(JSONSchemaNode.java:81) at org.eclipse.json.impl.schema.JSONSchemaNode.(JSONSchemaNode.java:48) at org.eclipse.json.impl.schema.JSONSchemaDocument.(JSONSchemaDocument.java:31) at org.eclipse.wst.json.schemaprocessor.internal.JSONSchemaProcessor.getSchema(JSONSchemaProcessor.java:57) at org.eclipse.wst.json.core.internal.schema.SchemaProcessorRegistryReader.getSchemaDocument(SchemaProcessorRegistryReader.java:84) at org.eclipse.wst.json.core.internal.validation.eclipse.Validator.validate(Validator.java:133) at org.eclipse.wst.json.core.internal.validation.eclipse.Validator.validate(Validator.java:112) at org.eclipse.wst.json.core.internal.validation.core.AbstractNestedValidator.validate(AbstractNestedValidator.java:283) at org.eclipse.wst.json.core.internal.validation.core.AbstractNestedValidator.validateInJob(AbstractNestedValidator.java:154) at org.eclipse.wst.json.ui.internal.validation.DelegatingSourceValidator.validate(DelegatingSourceValidator.java:239) at org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.validate(ReconcileStepForValidator.java:252) at org.eclipse.wst.sse.ui.internal.reconcile.validator.ReconcileStepForValidator.reconcileModel(ReconcileStepForValidator.java:210) at org.eclipse.jface.text.reconciler.AbstractReconcileStep.reconcile(AbstractReconcileStep.java:92) at org.eclipse.wst.sse.ui.internal.reconcile.validator.ValidatorStrategy.reconcile(ValidatorStrategy.java:270) at org.eclipse.wst.sse.ui.internal.reconcile.DocumentRegionProcessor.process(DocumentRegionProcessor.java:323) at org.eclipse.wst.sse.ui.internal.reconcile.StructuredRegionProcessor.process(StructuredRegionProcessor.java:260) at org.eclipse.wst.sse.ui.internal.reconcile.DirtyRegionProcessor$BackgroundThread.run(DirtyRegionProcessor.java:694)
不应为此抛出异常。
对于抛出异常的原因,我感到有些困惑(缺少明显的东西?)。 在深入研究JDK源代码之前-想知道是否有人遇到过这个问题吗?
2019-04-17更新: 错误提交给Eclipse项目
https://bugs.eclipse.org/bugs/show_bug.cgi?id=546541
2019-04-20更新:
其他测试显示以下内容
通过将@schema字符串值更改为
$schema": "http://json-schema.org/draft-04/schema#",
似乎不再抛出异常。
但是,当我将字符串更改为以下任意一项时:
"$schema": "http://json-schema.org/draft-05/schema#",
或
"$schema": "http://json-schema.org/draft-06/schema#",
日志中显示了不同的错误消息-引发了不同的异常。
注意:有关我的Eclipse错误提交链接的更多信息,请参见上文。