上下文
我正在开发一个独立的应用程序,该程序可以从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
我尝试过的事情
-
将
Meta-INF/
文件夹放在与JAR相同的目录中JAR运行,但是验证不起作用。
-
引用
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>
并在我的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)
我已经阅读了Bean Validation specification(6.5。引导程序和9. XML部署描述符)和Hibernate Validator 6.1.0 Reference Guide(8。通过XML进行配置),尤其是在括号中的章节中寻找解决方案,并且在StackOverflow和Google上搜索了解决方案。不幸的是,到目前为止,我还没有找到任何可以使我找到解决方案的东西。
执行JAR时,是否甚至可以实现外部validation.xml
的引导?
如果是,该如何实现?
如果您需要代码中的更多信息或部分,我将使用必填信息更新问题。