我有一个部署在Jboss eap 6.2上的应用程序。它使用hibernate验证器5.1.0 由于jboss附带了自己的(较旧)版本,因此我使用j-boss-deployment-structure.xml将其从我的war的类路径中排除,如下所示:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="org.apache.log4j"/>
<module name="org.slf4j"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
它解决了这个问题,但现在给了我这个例外:
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
5437 at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:133) [hibernate-validator-5.1.0.Final.jar:5.1.0.Final]
5438 at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45) [hibernate-validator-5.1.0.Final.jar:5.1.0.Final]
5439 at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:236) [hibernate-validator-5.1.0.Final.jar:5.1.0.Fi nal]
5440 at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:229) [spring-context-3.2.6.RELE ASE.jar:3.2.6.RELEASE]
5441 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1571) [spring-bean s-3.2.7.RELEASE.jar:3.2.7.RELEASE]
5442 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509) [spring-beans-3 .2.7.RELEASE.jar:3.2.7.RELEASE]
5443 ... 36 more
所以我尝试排除javax.validation包:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<exclusions>
<module name="javax.validation"/>
<module name="org.apache.log4j"/>
<module name="org.slf4j"/>
<module name="org.hibernate.validator"/>
</exclusions>
</deployment>
</jboss-deployment-structure>
这似乎没什么帮助。它仍然给出同样的错误。任何建议/帮助赞赏
答案 0 :(得分:2)
我们有一个使用版本5.1.0中的方法的自定义验证器:
ctx.buildConstraintViolationWithTemplate(ctx.getDefaultConstraintMessageTemplate()).addPropertyNode
在4.3.1.Final中,此方法为 addNode ,而不是 addPropertyNode
ctx.buildConstraintViolationWithTemplate(...).addNode
最后,为了完成这项工作,我最终将我的应用程序降级为4.3.1.Final。我认为这应该由j-boss-deployment-structure.xml中的排除处理,但是由于某种原因它不起作用。
答案 1 :(得分:0)
问题是因为jboss提供了validation-api 1.0,但是hibernate-validator是基于1.1构建的,所以你可以在jboss-deployment-structure中排除验证api和依赖模块。请注意,javaee.api默认提供此依赖项,因此您可能需要在<dependency>
块中手动包含所需的依赖项。
<exclusions>
<module name="javaee.api"/>
<module name="javax.validation.api"/>
<module name="javax.faces.api"/>
<module name="org.jboss.resteasy.resteasy-hibernatevalidator-provider"/>
<module name="org.hibernate.validator"/>
</exclusions>