Reputation: 1931
I'm in the process of integrating Hibernate Validator into our Java based web app. We use JSR-310 types extensively.
I see that Hibernate Validator version 5.2 adds support for these types, so I've added version 5.2.0.Beta1
to my EAR deployment's /lib
directory like all of our other dependencies.
But when I test our deployed EAR, I get the following error:
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]
Notice that hibernate-validator-5.1.3.Final.jar:5.1.3.Final appears in the stack trace not the 5.2.0.Beta1 that I have in my EAR file.
I think what's happening is that Wildfly (we're using 8.2.0.Final) is including an older version of the hibernate-validator JARs instead of the newer ones that we're including in our EAR file. How do I prevent this from happening?
I think the answer might be to include a jboss-deployment-structure.xml
file that coaxes Wildfly to use the JAR that I supply. I've found this reference, but it's not clear what to include in that file to coax Wildfly into using the JAR I supply.
Upvotes: 0
Views: 1125
Reputation: 19129
Using jboss-deployment-structure.xml
might be one way of doing this. However, I would suggest to just update the module configurations under modules/system/layers/base
. Copy hibernate-validator-5.2.0.Beta1.jar
and hibernate-validator-cdi-5.2.0.Beta1.jar
into org/hibernate/validator/main
resp. org/hibernate/validator/cdi/main
and update the respective modules.xml
to point to the new jar files.
Upvotes: 2