使用hibernate验证器5.1.0.Final的jboss上的NoSuchMethodError

时间:2014-09-25 20:09:56

标签: java jboss

我有一个部署在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>

这似乎没什么帮助。它仍然给出同样的错误。任何建议/帮助赞赏

2 个答案:

答案 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>