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
我尝试了什么
将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>
并将validation.xml
包含在我的JAR中。
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)
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
的自举?如果是,该如何实现?
如果您需要代码中的更多信息或部分,请使用所需信息更新问题。
上下文,我正在开发一个独立的应用程序,该程序从csv文件读取输入数据。到目前为止,我一直使用一个自写类来执行输入验证,以及用于验证...
Hibernate Validator显然不支持。确保validation.xml
必须在广口瓶中。我们也许可以支持使用file:
前缀来指向外部约束映射。如果您愿意进行修补,我会接受一个补丁。