bean-validation validation.xml игнорируется - PullRequest
3 голосов
/ 02 января 2012

Я использую проверку JSR 303 Bean в своем веб-приложении JSF 2.0, и он отлично работает с аннотациями.Теперь я хотел бы игнорировать аннотации и настраивать правила проверки с использованием файла validation.xml , поэтому я сделал это (я использую динамический веб-проект eclipse):

  1. Добавлено validation.xml в WebContent / META-INF / validation.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration validation-configuration-1.0.xsd"
    >
    
      <constraint-mapping>META-INF/validation/constraint-mapping.xml</constraint-mapping>
    
    </validation-config>
    
  2. Затем создан файл constraint-mapping.xml в WebContent / META-INF / validation / constraint-mapping.xml

    <constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
                 xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
    
    <bean class="my.full.path.ValidationMB" ignore-annotations="true">
    
    </bean>
    
    </constraint-mappings>
    

Имея эти конфигурации на месте,Я полагаю, что аннотации в моем классе bean-компонента ValidationMB будут игнорироваться, НО этого не происходит! , что заставляет меня предположить, что файл validation.xml не загружается.

Есть идеи?спасибо.

Среда:

  1. Apache Tomcat 7.0.23
  2. javax.faces-2.1.4.jar
  3. hibernate-validator-4.2.0.Final.jar
  4. hibernate-validator-annotation-processor-4.2.0.Final.jar
  5. validation-api-1.0.0.GA.jar
  6. slf4j-api-1.6.1.jar

Из спецификации: раздел 4.4.6.Конфигурация XML: META-INF / validation.xml

Если явно не игнорируется вызовом Configuration.ignoreXMLConfiguration (), конфигурация учитывает конфигурацию, доступную в META-INF / validation.xml.Этот файл конфигурации является необязательным, но может использоваться приложениями для уточнения некоторых параметров проверки компонентов.Если в пути к классам найдено более одного файла META-INF / validation.xml, возникает исключение ValidationException.

Ответы [ 3 ]

10 голосов
/ 03 января 2012

Чтобы решить мою проблему, мне пришлось создать папку META-INF в папке проекта src , которая заканчивается в WEB-INF / classes / META-INF.

Структуравеб-приложения:

ROOT
|_META-INF -- don't put validation.xml here
|_WEB-INF
    |__ classes
           |_META-INF
                |__validation.xml

Но я думаю, что если я упакую свое веб-приложение в файл jar и повторно использую его в другом проекте, это может не сработать, я сообщу вам позже, как только я это сделаю.

1 голос
/ 14 февраля 2012

Я наткнулся на это, когда искал что-то еще, но хотел уточнить у ОП, что происходит. Вам действительно нужно, чтобы файл существовал в META-INF / validation.xml; однако это относительно пути к классам, поэтому он работал, когда вы помещали его в WEB-INF / classes / META-INF / validation.xml.

Более чистый подход заключается в том, чтобы файл был помещен для вас. Ваш проект Eclipse уже должен как-то выводить то, что находится в вашем исходном каталоге, в WEB-INF / классы, иначе ничего не будет работать. Но иногда есть фильтры на то, что он выводит, чтобы он мог что-то исключить. Возможно, вы захотите проверить ваши src dirs и убедиться, что в них нет исключений.

Например, если у вас был военный проект Maven, все ваши исходные коды java будут помещаться в src / main / java, а сгенерированные классы окажутся в каталоге WEB-INF / classes. Эквивалент происходит для src / main / resources, который содержит не исходные файлы. Когда я хочу, чтобы * .xml, * .properties и т. Д. Оказались в WEB-INF / классах, я помещаю их в src / main / resources. Для вашего примера у меня будет файл src / main / resources / META-INF / validation.xml.

Надеюсь, это поможет любому, кто сталкивается с этим и смущен.

1 голос
/ 02 января 2012

Попробуйте поместить ваш validation.xml непосредственно в каталог WEB-INF / .

...