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