Java Bean Validation 2.0 Hibernate Validator - 具有外部 XML-Configuration 的可执行 JAR

Java Bean Validation 2.0 Hibernate Validator - Executable JAR with external XML-Configuration

上下文

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

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

我偶然发现了 Bean Validation (JSR 380),并使用 Hibernate Validator 重构了验证程序。

我都试过了,将验证注释直接添加到 Bean class,并使用 validation.xml 文件进行配置。
当我 运行 来自 Eclipse 的应用程序时,这两种方式都有效。

问题

应用程序将部署为可执行 JAR。
我想保留更改验证约束的选项,而无需重新打包和重新部署 JAR。
所以我想弄清楚,是否有办法从 JAR 中排除 validation.xml(+ 更多配置文件)并将其放在 JAR 的某个目录 "close" 中。
像这样:

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

我试过的

  1. META-INF/ 文件夹放在与 JAR

    相同的目录中

    The JAR runs, but the validation doesn't work.

  2. validation.xml中引用constraints-myBean.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 cancels the execution:

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/ 的父目录添加到 class 路径(使用 -classpath 参数)

    The JAR runs, but the validation doesn't work.

我已经阅读了Bean Validation specification (6.5. Bootstrapping & 9. XML deployment descriptor) and the Hibernate Validator 6.1.0 Reference Guide(8。通过XML进行配置),特别是在括号中的章节中寻找解决方案,并在Whosebug和Google上搜索了解决方案。不幸的是,到目前为止我还没有找到任何可以引导我找到解决方案的东西。

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

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

Hibernate Validator 显然不支持。确保 validation.xml 需要在罐子里。我们也许可以支持使用 file: 前缀来指向外部约束映射。如果你愿意的话,我会接受一个补丁。

不过不确定资源包,所以这对您来说是一个半生不熟的解决方案。

我想知道你是否可以传递一个精心制作的 class 加载器,它可以从你的外部位置加载资源(并将其他所有内容委托给标准 class 加载器)并使用 externalClassLoader(ClassLoader) 在配置 ValidatorFactory.

时将其传递给 HV