Валидация схем на стороне клиента#
Клиентская утилита 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
Возможные проблемы#
Ошибка при валидации 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.