bean-validation validation.xml被忽略

时间:2012-01-02 13:36:03

标签: jsf-2 bean-validation

我在JSF 2.0 Web应用程序中使用JSR 303 Bean验证,它可以正常使用注释。现在我想忽略注释并使用 validation.xml 文件配置验证规则,所以这就是我所做的(我使用的是eclipse动态Web项目):

  1. WebContent / META-INF / validation.xml

    下添加 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. 然后在 WebContent / META-INF / validation / constraint-mapping.xml

    下创建了文件 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>
    
  3. 有了这些配置,我想我的bean类ValidationMB中的注释将被忽略,但这没有发生!,这使我假设validation.xml文件没有被加载

    任何想法?感谢。

    环境:

    1. Apache Tomcat 7.0.23
    2. javax.faces-2.1.4.jar
    3. 冬眠验证器-4.2.0.Final.jar
    4. 冬眠验证器的注释处理器的4.2.0.Final.jar
    5. validation-api-1.0.0.GA.jar
    6. SLF4J-API-1.6.1.jar
    7. 来自规范:第4.4.6节。 XML配置:META-INF / validation.xml

        

      除非通过调用明确忽略   Configuration.ignoreXMLConfiguration(),一个配置   考虑META-INF / validation.xml中可用的配置。这个   配置文件是可选的,但应用程序可以使用   改进一些Bean验证行为。如果不止一个   META-INF / validation.xml文件位于类路径中,a   引发ValidationException。

3 个答案:

答案 0 :(得分:10)

要解决我的问题,我必须在项目 src 文件夹下创建一个META-INF文件夹,该文件夹以WEB-INF / classes / META-INF结尾。

Web应用程序的结构是:

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

但我认为如果我将我的Web应用程序打包到一个jar文件中并在另一个项目中重用它可能不起作用,我会在以后告诉你。

答案 1 :(得分:1)

尝试将validation.xml直接放入 WEB-INF / 目录。

答案 2 :(得分:1)

我在寻找其他东西时偶然发现了这个,但是想向OP澄清发生了什么。实际上你需要将文件存在于META-INF / validation.xml;但是,这与classpath有关,这就是为什么当你把它放在WEB-INF / classes / META-INF / validation.xml下时它的工作原理。

更干净的方法是让文件放在那里。您的Eclipse项目应该已经以某种方式将源目录中的任何内容输出到WEB-INF / classes,否则将无法运行。但有时会对输出的内容进行过滤,因此可能会排除某些内容。您可能想检查您的src目录并确保它们没有排除。

举个例子,如果你有一个Maven war项目,你的所有java源都将放在src / main / java中,生成的类最终会出现在WEB-INF / classes目录中。对于包含非源文件的src / main / resources,会发生相同的情况。当我想要* .xml,* .properties等最终进入WEB-INF / classes时,我将它们放在src / main / resources中。对于您的示例,我将有一个src / main / resources / META-INF / validation.xml文件。

希望这可以帮助遇到这种情况并且感到困惑的其他人。