spring Javax 验证
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4302358/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Javax Validation
提问by mjgirl
I'm trying to use Javax Validation with Spring. When I run my application, I get this strange error message
我正在尝试在 Spring 中使用 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.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.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)
I have hibernate-validator-4.0.2 GA.jar in my classpath which seems to have the missing class. I also use jdk 6. What is going wrong? I've googled, but no answer is found.
我的类路径中有 hibernate-validator-4.0.2 GA.jar,它似乎缺少类。我也用jdk 6. 出了什么问题?我用谷歌搜索,但没有找到答案。
回答by skaffman
The stack trace shows that the Hibernate Validator and javax.validationAPI JARs are both on your classpath OK, so the problem lies elsewhere.
堆栈跟踪显示 Hibernate Validator 和javax.validationAPI JAR 都在您的类路径中,OK,所以问题出在其他地方。
The source code for ConfigurationImplshows that it has a dependency on SLF4J.
的源代码ConfigurationImpl表明它依赖于 SLF4J。
I'm guessing that's not your classpath?
我猜这不是你的类路径?
回答by Christian Vielma
I solved it adding the following to the POM in a Maven project:
我解决了在 Maven 项目中将以下内容添加到 POM 中的问题:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
You can also check the official reference.
您也可以查看官方参考。
回答by amit petkar
Jar- hibernate-validator4.3.1 final.jar file- HibernetValidator.java line 41-
Jar- hibernate-validator4.3.1 final.jar 文件- HibernetValidator.java line 41-
public Configuration<?> createGenericConfiguration(BootstrapState state)
{
return new ConfigurationImpl(state);
}
the ConfigurationImpl class has a static initializer block
ConfigurationImpl 类有一个静态初始化块
static
{
Version.touch();
log = LoggerFactory.make();
}
The LogFactory class refreences org.jboss.logging.Logger.
LogFactory 类重新定义了 org.jboss.logging.Logger。
So add jboss-logging-3.2.0.Final.jar to the dependencies and you are done.
因此,将 jboss-logging-3.2.0.Final.jar 添加到依赖项中,您就完成了。
回答by Neal Donnan
Check that the hibernate-validator-4.0.2 GA.jar is deployed in the WEB-INF/lib directory of your web application on the server.
检查 hibernate-validator-4.0.2 GA.jar 是否部署在服务器上 Web 应用程序的 WEB-INF/lib 目录中。
回答by mjgirl
Found the solution. My slf4j jar versions were not matching together, aswell as I had the undirect libraries.
找到了解决办法。我的 slf4j jar 版本不匹配,以及我有非直接库。
回答by Joseph
I had two version of slf4j-apiin my classpath - slf4j-api-1.6.1.jaras well as slf4j-api-1.5.8.jar. I removed the latter and that solved my issue with
slf4j-api我的类路径中有两个版本-slf4j-api-1.6.1.jar以及slf4j-api-1.5.8.jar. 我删除了后者并解决了我的问题
"java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.engine.ConfigurationImpl".
回答by MosheElisha
For me, it was a missing "jboss-logging" jar
对我来说,这是一个缺失的“jboss-logging”jar
回答by OlgaMaciaszek
You might have clashing versions of hibernate-validatorand validation-api. You can read more about it in this issue:
您可能会遇到争食版本hibernate-validator和validation-api。您可以在本期中阅读更多相关信息:
JPA 2.0 : Exception to use javax.validation.* package in JPA 2.0
JPA 2.0:在 JPA 2.0 中使用 javax.validation.* 包的异常
If you want to use the most recent hibernate-validatorversion, then you should remove the validation-apidependency and just add the following dependency for hibernate-validator:
如果您想使用最新hibernate-validator版本,那么您应该删除validation-api依赖项,只需添加以下依赖项即可hibernate-validator:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.1.3.Final</version>
</dependency>
回答by Byju Joy
I had same problem.Solved it by adding following dependency, eventhough not using hibernate as such.
我有同样的问题。通过添加以下依赖项解决了它,即使没有使用休眠。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.1.0.Beta1</version>
</dependency>

