【发布时间】:2020-04-10 04:28:16
【问题描述】:
上下文
我正在开发一个从 csv 文件读取输入数据的独立应用程序。
到目前为止,我一直使用自写的类来执行输入验证,
并触发了用于验证输入文件中的单个记录的方法
读完一行后立即。该方法在读取 csv 文件的方法中被调用。
由于未来将使用 RESTful Web Services 检索输入数据 我们将放弃使用 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 运行,但验证不起作用。
-
在
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取消执行:
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. Bootstrapping & 9. XML 部署描述符)和Hibernate Validator 6.1.0 Reference Guide(8. 通过 XML 配置),特别是在括号中的章节中寻找解决方案,并在 StackOverflow 和谷歌寻求解决方案。不幸的是,到目前为止,我还没有找到任何可以让我找到解决方案的方法。
是否有可能在执行 JAR 时实现引导外部validation.xml?
如果是,我该如何实现?
如果您需要我的代码中的更多信息或部分内容,我将使用所需信息更新问题。
【问题讨论】:
标签: java validation bean-validation hibernate-validator jsr380