Java Bean验证2.0休眠验证器-具有外部XML配置的可执行JAR

问题描述 投票:0回答:1

Context

我正在开发一个独立的应用程序,该程序从csv文件读取输入数据。到目前为止,我一直使用一个自写的类来执行输入验证,并触发了用于验证输入文件中单个记录的方法阅读单行后立即。在读取csv文件的方法中调用了该方法。

因为将来将使用RESTful Web服务检索输入数据并且我们将放弃使用csv文件,我想将验证与csv读取分离。

我绊倒了Bean验证(JSR 380),并使用Hibernate Validator重构了验证过程。

我都尝试过,将验证注释直接添加到Bean类,并使用validation.xml文件进行配置。当我从Eclipse运行应用程序时,两种方法都可以工作。

问题

该应用程序将被部署为可执行JAR。我想保留更改验证约束的选项,而无需重新打包和重新部署JAR。因此,我试图找出是否有一种方法可以从JAR中排除validation.xml(以及其他配置文件),并将其放置在JAR的某个“靠近”目录中。像这样的东西:

myApp/
 |-- JAR
 |-- conf/
     |-- ValidationMessages.properties
     |-- META-INF/
          |-- validation.xml
          |-- validation/
               |-- constraints-myBean.xml

我尝试了什么

  1. META-INF/文件夹与JAR放在同一目录中>

    JAR运行,但是验证不起作用。

  2. 引用constraints-myBean.xml中指向validation.xml的绝对路径,特别是更改<constraint-mapping>META-INF/validation/constraints-pbpRecord.xml</constraint-mapping><constraint-mapping>C:/path/to/myApp/META-INF/validation/constraints-pbpRecord.xml</constraint-mapping>并将validation.xml包含在我的JAR中。

  3. A

    ValidationException取消执行:
    Exception in thread "main" javax.validation.ValidationException: HV000096: Unable to open input stream for mapping file C:/Users/wsteffler/Desktop/pbp_import_tool/pbp_orgunit_import/META-INF/validation/constraints-pbpRecord.xml.  
            at org.hibernate.validator.internal.xml.config.ValidationBootstrapParameters.setMappingStreams(ValidationBootstrapParameters.java:291)
            at org.hibernate.validator.internal.xml.config.ValidationBootstrapParameters.<init>(ValidationBootstrapParameters.java:67)
            at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.parseValidationXml(AbstractConfigurationImpl.java:595)
            at org.hibernate.validator.internal.engine.AbstractConfigurationImpl.buildValidatorFactory(AbstractConfigurationImpl.java:376)
            at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:103)
            at de.uniwuppertal.hisinone.orgunitimport.pbp.Main.main(Main.java:220)
    
  1. META-INF/的父目录添加到类路径(带有-classpath参数)

    JAR运行,但是验证不起作用。

  2. 我已经阅读了Bean Validation specification(6.5。引导程序和9. XML部署描述符)和Hibernate Validator 6.1.0 Reference Guide(8。通过XML进行配置),尤其是在括号中的章节中寻找解决方案,并在StackOverflow和Google上进行了搜索解决方案。不幸的是,到目前为止,我还没有找到任何可以使我找到解决方案的东西。

执行JAR时是否甚至可以实现外部validation.xml的自举?如果是,该如何实现?

如果您需要代码中的更多信息或部分,请使用所需信息更新问题。

上下文,我正在开发一个独立的应用程序,该程序从csv文件读取输入数据。到目前为止,我一直使用一个自写类来执行输入验证,以及用于验证...

java validation bean-validation hibernate-validator jsr380
1个回答
1
投票

Hibernate Validator显然不支持。确保validation.xml必须在广口瓶中。我们也许可以支持使用file:前缀来指向外部约束映射。如果您愿意进行修补,我会接受一个补丁。

© www.soinside.com 2019 - 2024. All rights reserved.