При экспериментировании с возможностями JSON Schema Validation последнего выпуска Eclipse (v4.11, 2019-03) - я заметил ошибку в журнале:
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"
}
Я попытался изменить URI для $ id на действительный веб-адрес (который у меня есть) - а также попытался указать правильное местоположение URI локального файла -но все равно получаю ту же ошибку.
Из моего прочтения спецификации схемы JSON - это допустимые значения $ 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 см. Выше.