【发布时间】:2015-05-22 23:43:19
【问题描述】:
我正在将 Hibernate Validator 集成到我们基于 Java 的 Web 应用程序中。我们广泛使用 JSR-310 类型。
我看到 Hibernate Validator 版本 5.2 添加了对这些类型的支持,因此我将版本 5.2.0.Beta1 添加到我的 EAR 部署的 /lib 目录中,就像我们所有其他依赖项一样。
但是当我测试我们部署的 EAR 时,我收到以下错误:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.time.Instant.
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.findMatchingValidatorClass(ConstraintValidatorManager.java:193) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:97) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:83) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:547) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:487) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:451) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:403) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraint(ValidatorImpl.java:723) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:601) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:412) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:206) [hibernate-validator-5.1.3.Final.jar:5.1.3.Final]
注意 hibernate-validator-5.1.3.Final.jar:5.1.3.Final 出现在堆栈跟踪中,而不是我的 5.2.0.Beta1在我的 EAR 文件中。
我认为正在发生的事情是 Wildfly(我们使用的是 8.2.0.Final)包含旧版本的休眠验证器 JAR,而不是我们包含在 EAR 文件中的较新版本。如何防止这种情况发生?
我认为答案可能是包含一个jboss-deployment-structure.xml 文件,以诱使 Wildfly 使用我提供的 JAR。我找到了这个reference,但不清楚在该文件中包含什么来诱使 Wildfly 使用我提供的 JAR。
【问题讨论】:
标签: java jboss wildfly wildfly-8 hibernate-validator