2010-11-29 5 views
8

Я пытаюсь использовать проверку Javax с весной. Когда я запускаю мое приложение, я получаю это сообщение странных ошибокJavax Validation

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) 

Я имею гибернацию-валидатор-4.0.2 GA.jar в моем пути к классам, которые, кажется, недостающее класс. Я также использую jdk 6. Что происходит не так? Я googled, но ответа не найдено.

ответ

13

Трассировка стека показывает, что Hibernate Validator и javax.validation API JARs находятся на пути к классу OK, поэтому проблема лежит в другом месте.

Исходный код для ConfigurationImpl показывает, что он имеет зависимость от SLF4J.

Я предполагаю, что это не ваш классный путь?

+0

Да У меня есть validation-api 1.0.0 GA – mjgirl 2010-11-29 09:36:58

2

Убедитесь, что hibernate-validator-4.0.2 GA.jar развернут в каталоге WEB-INF/lib вашего веб-приложения на сервере.

2

Найдено решение. Мои версии slf4j jar не совпадали, так как у меня были непрямые библиотеки.

1

У меня была две версии slf4j-api в моем классеpath - slf4j-api-1.6.1.jar, а также slf4j-api-1.5.8.jar. Я снял последний и решить мою проблему с

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

Для меня это был недостающий «JBoss каротаж» баночка

9

Я решил, что добавив следующую строку в ОРП в проекте Maven:

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

Вы также можете проверить official reference.

1

У меня была такая же проблема. Разработал его, добавив следующую зависимость, хотя и не использовал спящий режим как таковой.

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

jar-гибернации-validator4.3.1 final.jar файл- HibernetValidator.java линии 41-

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

класс ConfigurationImpl имеет статический блок инициализатора

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

Локальный класс ref refences org.jboss.logging.Logger.

Так что добавьте jboss-logging-3.2.0.Final.jar в зависимости, и все готово.

1

Возможно, у вас есть конфликтующие версии hibernate-validator и validation-api.Вы можете прочитать об этом в этом выпуске:

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

Если вы хотите использовать самую последнюю hibernate-validator версию, то вы должны удалить validation-api зависимость и просто добавьте следующую зависимость для hibernate-validator:

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.1.3.Final</version> 
</dependency> 
Смежные вопросы