Java Bean验证2.0 Hibernate Validator-带有外部XML配置的可执行JAR

上下文

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

由于将来将使用RESTful Web服务检索输入数据 并且我们将不再使用csv文件,我想将验证与csv读取分离。

我迷上了Bean Validation(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.xmlvalidation.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>
    并在我的JAR中包含validation.xml

      

    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运行,但是验证不起作用。

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

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

如果您需要代码中的更多信息或部分,我将使用必填信息更新问题。

kylezh 回答:Java Bean验证2.0 Hibernate Validator-带有外部XML配置的可执行JAR

休眠验证器显然不支持该功能。确保validation.xml必须放在罐子中。我们也许可以支持使用file:前缀来指向外部约束映射。如果您愿意进行修补,我会接受一个补丁。

虽然不确定资源包,但是对于您来说这将是半熟的解决方案。

我想知道您是否可以通过精心设计的类加载器,该类加载器可以从您的外部位置加载资源(并将其他所有内容委派给标准类加载器),并在配置{时使用externalClassLoader(ClassLoader)将其传递给HV {1}}。

本文链接:https://www.f2er.com/2904918.html

大家都在问