2010-11-29 6 views
8

Estoy tratando de usar Javax Validation con Spring. Cuando ejecuto mi aplicación, me sale este mensaje de error extrañoValidación de Javax

javax.servlet.ServletException: Servlet.init() for servlet dispatcher threw exception 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    java.lang.Thread.run(Thread.java:619) 

root cause 

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImpl 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    java.lang.Thread.run(Thread.java:619) 

root cause 

java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImpl 
    org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:43) 
    javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:269) 
    org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:161) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) 
    java.lang.Thread.run(Thread.java:619) 

tengo hibernación-validador-4.0.2 GA.jar en mi ruta de clase que parece tener la clase que falta. También uso jdk 6. ¿Qué está mal? Busqué en Google, pero no se encuentra ninguna respuesta.

Respuesta

13

El seguimiento de pila muestra que el Hibernate Validator y javax.validation API JAR están en su classpath OK, por lo que el problema está en otra parte.

El código fuente para ConfigurationImpl muestra que tiene una dependencia en SLF4J.

Supongo que esa no es tu ruta de clase?

+0

Sí, tengo validation-api 1.0.0 GA – mjgirl

+0

@mjgirl: Vea la edición – skaffman

+2

SLF4J, exactamente. Eso debe ser. –

2

Compruebe que hibernate-validator-4.0.2 GA.jar se implementa en el directorio WEB-INF/lib de su aplicación web en el servidor.

2

Encontré la solución. Las versiones de mi jar slf4j no coincidían, así como las bibliotecas indirectas.

1

Tenía dos versiones de slf4j-api en mi classpath - slf4j-api-1.6.1.jar, así como slf4j-api-1.5.8.jar. Quité el último y que resuelto mi problema con

"java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImpl". 
1

Para mí, fue una falta tarro "jboss- tala"

9

Lo resuelto añadiendo lo siguiente a la POM en un proyecto Maven:

 <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.3.1.Final</version> 
     </dependency> 

También puede marcar el official reference.

1

Tuve el mismo problema. Lo resolví agregando la siguiente dependencia, aunque no use Hibernate como tal.

<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.1.0.Beta1</version> 
     </dependency> 
3

JAR-hibernate-validator4.3.1 final.jar file- HibernetValidator.java línea 41-

public Configuration<?> createGenericConfiguration(BootstrapState state) 
{ 
    return new ConfigurationImpl(state); 
} 

la clase ConfigurationImpl tiene un bloque inicializador estático

static 
{ 
    Version.touch(); 
    log = LoggerFactory.make(); 
    } 

El La clase LogFactory refreences org.jboss.logging.Logger.

Agregue jboss-logging-3.2.0.Final.jar a las dependencias y listo.

1

Es posible que tenga versiones discordantes de hibernate-validator y validation-api.Puede leer más sobre esto en este tema:

JPA 2.0 : Exception to use javax.validation.* package in JPA 2.0

Si desea utilizar la versión más reciente hibernate-validator, entonces debería eliminar la dependencia validation-api y sólo tiene que añadir la siguiente dependencia para hibernate-validator:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
</dependency> 
Cuestiones relacionadas