Определение пустой строки в схеме Avro - PullRequest
0 голосов
/ 14 апреля 2020

У меня сейчас проблема с Avro JsonDecoder. Avro используется в версии 1.8.2. Файл .avs c определяется следующим образом:

{
"type": "record",
"namespace": "my.namespace",
"name": "recordName",
"fields": [
    {
        "name": "Code",
        "type": "string"
    },
    {
        "name": "CodeNumber",
        "type": "string",
        "default": ""
    }
  ]
}

Когда я сейчас запускаю свои тесты, я получаю org.apache.avro.AvroTypeException: Expected string. Got END_OBJECT. Класс, выдавший ошибку - JasonDecoder. Для меня это выглядит так, как будто обработка значения по умолчанию на моей стороне может быть неправильной, если использовать "" в качестве значения по умолчанию. Ошибка возникает только в том случае, если поле вообще недоступно, но это, как я понимаю, тот случай, когда следует использовать значение по умолчанию. Если я установлю значение в json как "CodeNumber": "", то у декодера не возникнет никаких проблем. Есть намеки или идеи?

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я бы предложил использовать null, поскольку это логически лучше:

{
    "name": "CodeNumber",
    "type": ["string", "null"],
    "default": null
}
0 голосов
/ 14 апреля 2020

Обнаружено это:

Оказывается, проблема в том, что значения по умолчанию просто игнорируются реализациями java. Я добавил обходной путь, который будет перехватывать исключение, а затем искать значение по умолчанию. Будет в версии 1.9.0

Источник: https://github.com/sksamuel/avro4s/issues/106

Если это возможно, попробуйте обновить декодер Avro до версии 1.9.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...