XML-конфигурация Bean Validation

Компоненты Bean Validation могут быть сконфигурированы при помощи XML-файлов. Такой подход может быть удобен, когда требуется добавить валидацию классов, недоступных для изменения, либо в тех случаях, когда хочется избежать появления сторонних зависимостей в коде. Основной XML-файл конфигурации — META-INF/validation.xml, в нём находятся основные настройки Bean Validation.

Дескриптор валидации

Десриптор валидации — validation.xml, имеет корневой элемент validation-config из пространства имён http://xmlns.jcp.org/xml/ns/validation/configuration (для Bean Validation 2.0), содержащий следующие дочерние элементы:

  • default-provider — полное имя класса, реализующего ValidationProvider, который будет использован в качестве провайдера валидации по умолчанию
  • message-interpolator — полное имя класса, реализующего MessageInterpolator
  • traversable-resolver — полное имя класса, реализующего TraversableResolver
  • constraint-validatator-factory — полное имя класса, реализующего ConstraintValidatorFactory
  • parameter-name-provider — полное имя класса, реализующего ParameterNameProvider
  • clock-provider — полное имя класса, реализующего ClockProvider
  • value-extractor — полное имя класса, реализующего ValueExtractor; один файл validation.xml может содержать несколько
  • executable-validation — определяет использование валидации для методов. Если атрибут enabled имеет значение false, то валидация для методов не будет использоваться. Может содержать один дочерний элемент default-validated-executable-types, содержащий в свою очередь список элементов executable-type, допустимые значения которых:
    • ALL — валидировать все методы
    • CONSTRUCTORS — валидировать конструкторы
    • GETTER_METHODS — валидировать get-методы
    • NON_GETTER_METHODS — валидировать не get-методы
    • NONE — не валидировать методы
  • constraint-mapping — список файлов с настройками ограничений/правил валидации
  • property — простая переменная, имя который задаётся свойством name

Все эти свойства опциональны, если их не указывать (или не создавать файл validation.xml), то компоненты Bean Validation будут сконфигурированы с настройками по умолчанию.

Пример простой конфигурации validation.xml:

Файл правил валидации

Проект может содержать несколько файлов с правилами валидации. Это можно использовать для разделения правил валидации в зависимости от классов, к которым они применяются. Файл правил валидации имеет корневой элемент constraint-mappings из пространства имён http://xmlns.jcp.org/xml/ns/validation/mapping (для Bean Validation 2.0), содержащий следующие дочерние элементы:

  • default-package — пакет по умолчанию для данного файла. Поиск классов, указываемых в элементах bean, будет происходить в указанном пакете.
  • constraint-definition — объявление собственного ограничения. В атрибуте annotation указывается класс аннотации, являющейся огранчиением, а в дочернем элементе validated-by — класс-валидатор, реализующий валидацию
  • bean — объявления компонента, к которому следует применять валидацию. Имя класса указывается в атрибуте class, а ignore-annotations позволяет игнорировать существующие в классе аннотации Bean Validation.

Элемент bean может содержать множество различных комбинаций дочерних элементов в зависимости от используемых правил валидации.

Правила валидации класса

Правила валидации класса описываются элементом class:

Правила валидации членов класса

Правила валидации членов классов описываются элементом field:

Правила валидации get-методов

Правила валидации get-методов описываются элементом getter:

Правила валидации конструкторов

Правила валидации конструкторов описываются элементом constructor:

Правила валидации методов

Правила валидации методов описываются элементом method:

Для элементов bean, class, method, constructor, field и getter применим атрибут ignore-annotations, позволяющий игнорировать объявленные в коде при помощи аннотаций правила валидации. Данный атрибут распространяется только на элемент, к которому он объявлен, дочерние элементы не наследуют этот атрибут.

Полезные ссылки