2010-11-29 8 views
8

Ich versuche, Javax Validierung mit Spring zu verwenden. Wenn ich meine Anwendung ausführen, bekomme ich diese seltsame FehlermeldungJavax Validierung

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) 

Ich habe Hibernate-Validator-4.0.2 GA.jar in meinem Classpath, die die fehlende Klasse zu haben scheint. Ich benutze auch jdk 6. Was läuft falsch? Ich habe gegoogelt, aber keine Antwort gefunden.

Antwort

13

Der Stack-Trace zeigt, dass die Hibernate-Validator- und javax.validation-API-JARs beide auf Ihrem Classpath OK sind, daher liegt das Problem an anderer Stelle. Der Quellcode für ConfigurationImpl zeigt, dass es eine Abhängigkeit von SLF4J hat.

Ich schätze, das ist nicht Ihr Klassenpfad?

+0

Ja, ich habe Validierung-API 1.0.0 GA – mjgirl

+0

@mjgirl: Siehe bearbeiten – skaffman

+2

SLF4J, genau. Das muss es sein. –

2

Überprüfen Sie, ob der Hibernate-Validator-4.0.2 GA.jar im Verzeichnis WEB-INF/lib Ihrer Webanwendung auf dem Server installiert ist.

2

Die Lösung gefunden. Meine Slf4j-Jar-Versionen stimmen nicht überein, ebenso wie ich die Undirect-Bibliotheken hatte.

1

Ich hatte zwei Versionen von slf4j-api in meinem Klassenpfad - slf4j-api-1.6.1.jar sowie slf4j-api-1.5.8.jar. Ich entfernte die letztere und das löste mein Problem mit

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

Für mich war es ein fehlendes „Jboss-logging“ jar

9

Ich löste es die folgenden auf das POM in einem Maven-Projekt hinzufügen:

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

Sie können auch die official reference überprüfen.

1

Ich hatte das selbe Problem.Löst es durch Hinzufügen der folgenden Abhängigkeit, auch wenn ich nicht Hibernate als solche verwende.

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

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

die ConfigurationImpl Klasse hat einen statischen Initialisierer Block

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

The LogFactory-Klassenreferenzen org.jboss.logging.Logger.

Fügen Sie jboss-logging-3.2.0.Final.jar zu den Abhängigkeiten hinzu und Sie sind fertig.

1

Sie könnten miteinander in Konflikt stehende Versionen von hibernate-validator und validation-api haben.Sie können mehr darüber in dieser Ausgabe lesen:

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

Wenn Sie die aktuellste hibernate-validator Version verwenden möchten, dann sollten Sie die validation-api Abhängigkeit entfernen und fügen Sie einfach die folgende Abhängigkeit für hibernate-validator:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
</dependency> 
Verwandte Themen