2014-09-25 98 views
3

我有一个应用程序部署在Jboss eap 6.2上。带有休眠验证器的jboss上的NoSuchMethodError 5.1.0.Final

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

它解决:它使用Hibernate验证5.1.0 因为Jboss附带的这个自己的(旧的)版本,我使用JBoss部署,structure.xml像下面这样排除从我的战争类路径现在这个问题,但给了我这样的例外:

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

我们有其使用的方法从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中的排除来处理,但由于某种原因它不起作用。

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>