JSON Schema Validator
Поддерживается только производитель
Компонент JSON Schema Validator выполняет проверку бинов тела сообщения по схемам JSON v4, v6, v7, v2019-09 draft и v2020-12 (partial) с использованием библиотеки NetworkNT JSON Schema ( https://github.com/networknt/json-schema-validator (opens in a new tab) ).
Пользователям Maven необходимо добавить следующую зависимость для pom.xmlэтого компонента:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-json-validator</artifactId>
<version>x.y.z</version>
<!-- use the same version as your Camel core version -->
</dependency>URI format
json-validator:resourceUri[?options]
Где resourceUri -- это некоторый URL-адрес локального ресурса в classpath или полный URL-адрес удаленного ресурса или ресурса в файловой системе, содержащей схему JSON для проверки.
Configuring Options
Компоненты Camel настраиваются на двух отдельных уровнях:
-
уровень компонентов
-
уровень конечной точки
Configuring Component Options
На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.
Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.
У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.
Вы можете настроить компоненты, используя:
-
Компонент DSL (opens in a new tab) .
-
в файле конфигурации (
application.propertiesфайлы*.yaml, и т.д.). -
непосредственно в коде Java.
Configuring Endpoint Options
Настройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.
Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.
Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .
Заполнители свойств обеспечивают несколько преимуществ:
-
Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.
-
Они позволяют вынести конфигурацию за пределы кода.
-
Они помогают коду стать более гибким и пригодным для повторного использования.
В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.
Component Options
Компонент JSON Schema Validator поддерживает 5 параметров, которые перечислены ниже.
contentCache (producer)
-
Устанавливает, использовать ли кэш содержимого ресурсов или нет.
-
По умолчанию: true
-
Тип: boolean
lazyStartProducer (producer)
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: boolean
useDefaultObjectMapper (producer)
-
Следует ли искать и использовать Jackson ObjectMapper по умолчанию из реестра.
-
По умолчанию: true
-
Тип: boolean
autowiredEnabled (advanced)
-
Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.
-
По умолчанию: true
-
Тип: boolean
objectMapper (advanced)
-
Найдите и используйте существующий ObjectMapper с указанным идентификатором.
-
По умолчанию:
-
Тип: String
Endpoint Options
Конечная точка валидатора схемы JSON настраивается с использованием синтаксиса URI:
json-validator:resourceUri
Со следующими параметрами пути и запроса :
Path Parameters (1 parameters)
resourceUri (producer)
-
Требуемый путь к ресурсу. Можно указать префикс: classpath, file, http, ref или bean. classpath, file и http загружают ресурс по этим протоколам (classpath используется по умолчанию). ref ищет ресурс в реестре. bean вызывает метод bean-компонента, который будет использоваться в качестве ресурса. Для bean-компонента можно указать имя метода после точки, например, bean:myBean.myMethod.
-
По умолчанию:
-
Тип: String
Query Parameters (11 parameters)
allowContextMapAll (producer)
-
Тип: Определяет, должна ли карта контекста разрешать доступ ко всем данным. По умолчанию доступен только текст и заголовки сообщения. Этот параметр можно включить для полного доступа к текущему Exchange и CamelContext. Это может представлять потенциальную угрозу безопасности, поскольку открывает доступ ко всем возможностям API CamelContext.
-
По умолчанию: false
-
Тип: boolean
contentCache (producer)
-
Устанавливает, использовать ли кэш содержимого ресурсов или нет.
-
По умолчанию: true
-
Тип: boolean
failOnNullBody (producer)
-
Потерпеть неудачу, если не существует никакого тела.
-
По умолчанию: true
-
Тип: boolean
failOnNullHeader (producer)
-
Выдавать ли ошибку, если заголовок не существует при проверке по заголовку.
-
По умолчанию: true
-
Тип: boolean
headerName (producer)
-
Для проверки по заголовку, а не по телу сообщения.
-
По умолчанию:
-
Тип: String
lazyStartProducer (producer (advanced))
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: boolean
disabledDeserializationFeatures (advanced)
-
Список значений перечисления Jackson DeserializationFeature, разделенных запятыми, которые будут отключены для анализа тела обмена.
-
По умолчанию:
-
Тип: String
enabledDeserializationFeatures (advanced)
-
Список значений перечисления Jackson DeserializationFeature, разделенных запятыми, которые будут включены для анализа тела обмена.
-
По умолчанию:
-
Тип: String
errorHandler (advanced)
-
Тип: Использовать пользовательский ValidatorErrorHandler. Обработчик ошибок по умолчанию перехватывает ошибки и выдаёт исключение.
-
По умолчанию:
-
Тип: JsonValidatorErrorHandler
objectMapper (advanced)
-
Использованный объектный преобразователь Jackson.
-
По умолчанию:
-
Тип: ObjectMapper
uriSchemaLoader (advanced)
-
Тип: TИспользовать пользовательский загрузчик схем, позволяющий добавлять пользовательскую проверку формата. Реализация по умолчанию создаст загрузчик схем, который попытается определить версию схемы по свойству $schema указанной схемы.
-
По умолчанию:
-
Тип: JsonUriSchemaLoader
Example
Предположим, у нас есть следующая схема JSON:
myschema.json
{
"$schema": "http://json-schema.org/draft-04/schema#",
"definitions": {},
"id": "my-schema",
"properties": {
"id": {
"default": 1,
"description": "An explanation about the purpose of this instance.",
"id": "/properties/id",
"title": "The id schema",
"type": "integer"
},
"name": {
"default": "A green door",
"description": "An explanation about the purpose of this instance.",
"id": "/properties/name",
"title": "The name schema",
"type": "string"
},
"price": {
"default": 12.5,
"description": "An explanation about the purpose of this instance.",
"id": "/properties/price",
"title": "The price schema",
"type": "number"
}
},
"required": [
"name",
"id",
"price"
],
"type": "object"
}Мы можем проверить входящий JSON с помощью следующего маршрута Camel, где myschema.json загружается из classpath.
from("direct:start")
.to("json-validator:myschema.json")
.to("mock:end")Если вы используете загрузчик схем по умолчанию, он попытается определить версию схемы по свойству $schema и выдаст соответствующие инструкции валидатору (opens in a new tab) . Если он не сможет найти (или не распознает) свойство $schema, он предположит, что ваша схема имеет версию 2019-09 (opens in a new tab) .
Если ваша схема является локальной по отношению к приложению (например, путь к классам, а не URL), она также может содержать $refссылки на относительную подсхему в пути к классам. Согласно спецификации схем JSON, для корректной работы ваша схема не должна иметь свойство идентификатора $id. См. пример в модульном тесте (opens in a new tab) и схеме . (opens in a new tab)
Spring Boot Auto-Configuration
При использовании json-validator с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:
<dependency>
<groupId>org.apache.camel.springboot</groupId>
<artifactId>camel-json-validator-starter</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>Компонент поддерживает 6 опций, которые перечислены ниже.
camel.component.json-validator.autowired-enabled
-
Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.
-
По умолчанию: true
-
Тип: Boolean
camel.component.json-validator.content-cache
-
Устанавливает, использовать ли кэш содержимого ресурсов или нет.
-
По умолчанию: true
-
Тип: Boolean
camel.component.json-validator.enabled
-
Включить ли автоматическую настройку компонента json-validator. По умолчанию эта функция включена.
-
По умолчанию:
-
Тип: Boolean
camel.component.json-validator.lazy-start-producer
-
Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.
-
По умолчанию: false
-
Тип: Boolean
camel.component.json-validator.object-mapper
-
Найдите и используйте существующий ObjectMapper с указанным идентификатором.
-
По умолчанию:
-
Тип: String
camel.component.json-validator.use-default-object-mapper
-
Следует ли искать и использовать Jackson ObjectMapper по умолчанию из реестра.
-
По умолчанию: true
-
Тип: Boolean