Eclipse v4.11 (выпуск 2019-03) - "Не строка: {" type ":" string "," format ":" uri-reference "}" - PullRequest
0 голосов
/ 17 апреля 2019

При экспериментировании с возможностями 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 см. Выше.

...