Конфигурация проверки bean-компонента не обнаружена, если она помещена в библиотечный jar - PullRequest
1 голос
/ 01 апреля 2019

Я использую Bean Validation 1.1 в веб-приложении Java EE 7. Валидация работает нормально, но мне не удается заставить ее работать как с Wildfly, так и с Liberty.

Я настроил пользовательский интерполятор сообщений через validation.xml, который помещается в библиотеку jar:

ROOT
|-- WEB-INF
    |-- lib
        |-- my-validation.jar
            |-- mypackage
                |-- MyMessageInterpolator.class
            |-- META-INF
                |--validation.xml

При развертывании в Wildfly 14 все работает как положено. Однако в Liberty 19 найдено MyMessageInterpolator, , но не вызвано во время проверки (например, при использовании @Valid в ресурсе REST).

Затем я переместил validation.xml непосредственно в веб-приложение (не перемещая сам интерполятор сообщений):

ROOT
|-- WEB-INF
    |-- classes
        |-- META-INF
            |-- validation.xml
    |-- lib
        |-- my-validation.jar
            |-- mypackage
                |-- MyMessageInterpolator.class

Это работает на Liberty, но я ожидаю, что это сработает и тогда, когда validation.xml помещен в библиотечную банку. Спецификация Bean Validation 1.1 гласит:

Если явно не игнорируется [...], Configuration учитывает конфигурацию, доступную в META-INF/validation.xml.

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Я согласен с ответом Энди о поведении Либерти по умолчанию. Однако есть свойство com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp, которое можно настроить для получения поведения, которое вы ищете. При установке com.ibm.ws.beanvalidation.allowMultipleConfigsPerApp=false (по умолчанию установлено значение true) все приложение будет отсканировано на единый META-INF/validation.xml и применено ко всем модулям. Недостатком является то, что в вашем приложении может быть только один validation.xml. Если найдено более одного, произойдет ошибка развертывания.

См. Следующие ссылки для получения дополнительной информации о настройке этого свойства:

https://www.ibm.com/support/knowledgecenter/en/SSEQTP_liberty/com.ibm.websphere.wlp.doc/ae/rwlp_restrict.html#rwlp_restrict__BeanvalidationFeatureRestrict

http://www -01.ibm.com / поддержка / docview.wss? UID = swg1PI43130

0 голосов
/ 01 апреля 2019

Кажется, это работает как задумано. Спецификация BeanValidation работает в среде JavaEE или JavaSE, поэтому, когда она говорит META-INF/validation.xml, это обычно относительно WEB-INF/classes/ в среде JavaEE.

Для сравнения, если вы хотите использовать JPA persistence.xml в модуле .war, вам нужно указать значение WEB-INF/classes/META-INF/persistence.xml. То же самое с bean.xml CDI, который входит в WEB-INF/classes/beans.xml в модуле .war.

Это может быть разрешено и в других местах, но из того, что я видел, поддержка других мест не определяется спецификацией.

...