【问题标题】:Javax ValidationJavax 验证
【发布时间】:2011-05-17 04:27:14
【问题描述】:

我正在尝试将 Javax 验证与 Spring 一起使用。当我运行我的应用程序时,我收到了这个奇怪的错误消息

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)

我的类路径中有 hibernate-validator-4.0.2 GA.jar,它似乎缺少类。我也使用jdk 6。出了什么问题?我用谷歌搜索了,但没有找到答案。

【问题讨论】:

    标签: spring validation


    【解决方案1】:

    堆栈跟踪显示 Hibernate Validator 和 javax.validation API JAR 都在您的类路径上 OK,所以问题出在其他地方。

    ConfigurationImpl 的源代码显示它对 SLF4J 有依赖。

    我猜那不是你的类路径?

    【讨论】:

    • 是的,我有 validation-api 1.0.0 GA
    • SLF4J,完全正确。一定是这样的。
    • 我有 slf4j、slf4j.helpers 和 slf4j.spi。但是我直接从其他项目的 lib 文件夹中添加了这些 jar。会不会和这个问题有关?
    • @mjgirl:听起来很可疑,是的。尝试直接添加它们,看看会发生什么。
    • 只是添加提到 mjgirl 在单独的答案中提到它与 slf4j jar 文件不匹配,所以这个答案非常接近正确。
    【解决方案2】:

    检查 hibernate-validator-4.0.2 GA.jar 是否部署在服务器上您的 Web 应用程序的 WEB-INF/lib 目录中。

    【讨论】:

      【解决方案3】:

      找到了解决方案。我的 slf4j jar 版本不匹配,以及我有非直接库。

      【讨论】:

        【解决方案4】:

        我的类路径中有两个版本的 slf4j-api - slf4j-api-1.6.1.jarslf4j-api-1.5.8.jar。我删除了后者,这解决了我的问题

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

        【讨论】:

          【解决方案5】:

          对我来说,这是一个缺失的“jboss-logging”jar

          【讨论】:

            【解决方案6】:

            我在 Maven 项目中将以下内容添加到 POM 中解决了这个问题:

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

            您也可以查看official reference

            【讨论】:

              【解决方案7】:

              我遇到了同样的问题。通过添加以下依赖项解决了它,即使没有使用休眠。

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

              【讨论】:

                【解决方案8】:

                Jar-hibernate-validator4.3.1 final.jar 文件 - HibernetValidator.java 第 41 行-

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

                ConfigurationImpl 类有一个静态初始化块

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

                LogFactory 类重新释放 org.jboss.logging.Logger。

                所以将 jboss-logging-3.2.0.Final.jar 添加到依赖项中就完成了。

                【讨论】:

                  【解决方案9】:

                  您可能有 hibernate-validatorvalidation-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>
                  

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-11-04
                    • 2018-06-20
                    • 1970-01-01
                    相关资源
                    最近更新 更多