Валидация схем на стороне клиента#

Клиентская утилита Validator CLI проверяет корректность созданных avro/json/xml схем для валидации сообщений. Утилита доступна для любого клиента на его рабочем месте. Validator CLI на вход получает схему для валидации и выдавать отчет с ошибками. При отсутствии ошибок выводит, что формат корректен.

CLI поддерживает схемы типа json, avro и xsd:

  • .json: json;

  • .avsc, .avro: avro;

  • .xml, .xsd: xsd.

Подробнее о поддерживаемых форматах схем описано в разделе Описание модуля validator-interceptor.

Варианты использования#

Для работы клиентской утилиты необходимо установить и указать java 11. Тип схемы определяется автоматически в зависимости от расширения файла схемы. Также тип схемы можно указать явно параметром -t. Также при валидации json-схем можно отключить проверку ошибки, возникающей при не указании параметра "uniqueItems" со значением "true" у массивов, с помощью параметра -i.

Использование с помощью скриптов запуска#

Для Linux/macos#

Использовать скрипт bin/validator-cli -t <Опциональный формат схемы (json, avro или xml)> -i <Отключение проверки (true)> <путь до схемы1> <путь до схемы2> .... Явно добавить параметр JAVA_HOME в скрипт запуска bin/validator-cli перед комментарием # Determine the Java command to use to start the JVM.:

...
JAVA_HOME="<Путь до java>/Contents/Home"
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
...

Примеры запуска скрипта:

  • bin/validator-cli path/to/schema.json path/to/schema.xsd path/to/schema.avsc;

  • bin/validator-cli -t json -i true path/to/schema1 path/to/schema2.

Для Windows#

Использовать скрипт bin/validator-cli.bat -t <Опциональный формат схемы (json, avro или xml)> -i <Отключение проверки (true)> <путь до схемы1> <путь до схемы2> .... Явно добавить параметр JAVA_HOME в скрипт запуска bin/validator-cli.bat перед комментарием @rem Find java.exe:

...
set JAVA_HOME=<Путь до java>
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
...

Примеры запуска скрипта:

  • bin/validator-cli.bat path/to/schema.json path/to/schema.xsd path/to/schema.avsc;

  • bin/validator-cli.bat -t json -i true path/to/schema1 path/to/schema2.

Использование с помощью java#

Клиенскую утилиту можно запустить напрямую без использования скриптов запуска: java -cp "lib/*" ru.sbt.ss.validator.Main -t <Опциональный формат схемы (json, avro или xml)> -i <Отключение проверки (true)> <путь до схемы1> <путь до схемы2> ...

Примеры запуска скрипта:

  • java -cp "lib/\*" ru.sbt.ss.validator.Main path/to/schema.json path/to/schema.xsd path/to/schema.avsc;

  • java -cp "lib/\*" ru.sbt.ss.validator.Main -t json -i true path/to/schema1 path/to/schema2.

Для Linux/macos каждый раз перед запуском cli указывать переменную окружения JAVA_HOME: export JAVA_HOME=JAVA_HOME=<путь до java>/Contents/Home. Для Windows каждый раз перед запуском cli указывать переменную окружения JAVA_HOME: set JAVA_HOME=JAVA_HOME=<путь до java>.

Примеры результатов работы CLI#

Пример вывода при успешной валидации:

---
Schema full-avro-schema.avsc:
Format (auto): avro
SUCCESS: schema validation passed.

Пример вывода при неуспешной валидации:

---
Schema invalidArray.json:
Format (auto): json
ERROR: schema validation failed:
$.properties.name.maxItems: is missing but it is required
$.properties.name.additionalItems: must be a constant value false
$.properties.name.uniqueItems: must be a constant value true

Возможные проблемы#

  1. Ошибка при валидации xsd схемы:

Exception in thread "main" java.lang.IllegalAccessError: class ru.sbt.ss.validator.format.xml.schema.XsdValidator$ (in unnamed module @0x4ca1042e) cannot access class com.sun.org.apache.xerces.internal.dom.DOMInputImpl (in module java.xml) because module java.xml does not export com.sun.org.apache.xerces.internal.dom to unnamed module @0x4ca1042e

Ошибка возможна на версии java выше 11, необходимо установить и указать java 11.