首页 文章

bean-validation validation.xml被忽略

提问于
浏览
2

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

  • 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>
  • 然后在 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>

有了这些配置,我想我的bean类ValidationMB中的注释将被忽略, BUT this is not happening! ,这使我假设没有加载validation.xml文件 .

有任何想法吗?谢谢 .

Environment:

  • Apache Tomcat 7.0.23

  • javax.faces-2.1.4.jar

  • hibernate-validator-4.2.0.Final.jar

  • hibernate-validator-annotation-processor-4.2.0.Final.jar

  • validation-api-1.0.0.GA.jar

  • slf4j-api-1.6.1.jar

From the spec: section 4.4.6. XML Configuration: META-INF/validation.xml

除非通过调用Configuration.ignoreXMLConfiguration()明确忽略,否则Configuration会考虑META-INF / validation.xml中可用的配置 . 此配置文件是可选的,但应用程序可以使用它来优化某些Bean Validation行为 . 如果在类路径中找到多个META-INF / validation.xml文件,则会引发ValidationException .

3 回答

  • 1

    为了解决我的问题,我不得不在项目 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文件中并在另一个项目中重用它可能不起作用,我会在以后告诉你 .

  • 10

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

  • 1

    我在寻找其他东西时偶然发现了这个,但是想向OP澄清发生了什么 . 实际上你需要将文件存在于META-INF / validation.xml;但是,这是相对于类路径的原因,这就是当它放在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文件 .

    希望这可以帮助遇到这个并且感到困惑的其他人 .

相关问题