如何在Wildfly 8.2中使用升级版的Hibernate Validator Jar?

时间:2015-05-22 23:43:20

标签: java jboss wildfly wildfly-8 hibernate-validator

我正在将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)包含旧版本的hibernate-validator JAR而不是我们包括的新版本在我们的EAR文件中。我该如何防止这种情况发生?

我认为答案可能是包含一个jboss-deployment-structure.xml文件,该文件哄骗Wildfly使用我提供的JAR。我发现了这个reference,但是不清楚要在该文件中包含什么来诱使Wildfly使用我提供的JAR。

1 个答案:

答案 0 :(得分:2)

使用jboss-deployment-structure.xml可能是这样做的一种方式。但是,我建议只更新modules/system/layers/base下的模块配置。将hibernate-validator-5.2.0.Beta1.jarhibernate-validator-cdi-5.2.0.Beta1.jar复制到org/hibernate/validator/main或。 org/hibernate/validator/cdi/main并更新相应的modules.xml以指向新的jar文件。