hibernate-validator中的异常。嵌套异常是java.lang.NoClassDefFoundError:ConfigurationImpl [英] Exception in hibernate-validator. nested exception is java.lang.NoClassDefFoundError: ConfigurationImpl
问题描述
Details:
我在Spring中使用javax-validation和hibaernate-validator进行表单验证。
除了Spring的基本必需JAR文件外。
我包括:
validation-api -1.1.0.Final
hibernate-validator-5.1.0.Final
我在某处读到spl4j版本也值得关注:所以我也告诉:
### slf4j-api-1.7.5 ###
### slf4j-simple-1.7.5 ###
### log4j-1.2.17 ###
错误原因可能是由于slf4j和log4j的兼容性吗?
我使用注释基础验证。
让我提供一些代码:
Customer.java
import java.util.Date;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
$ b公共类客户{
@Size(min = 2,max = 30)
@NotEmpty
私有字符串名称;
@NotEmpty @Email
私人字符串电子邮件;
@NotNull @Min(18)@Max(100)
私人整数年龄;
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getEmail(){
return email;
}
public void setEmail(String email){
this.email = email;
}
public Integer getAge(){
return age;
}
public void setAge(Integer age){
this.age = age;
}
}
CustomerController.java
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(/ customer)
public class CustomerController {
@Autowired
@Qualifier(messageSource )
私人MessageSource messageSource;
@RequestMapping(value =,method = RequestMethod.POST)
public @ResponseBody List< String> saveCustomerAction(
@Valid @ModelAttribute(customer)Customer customer,
BindingResult bindingResult,Model model){
List< String> errorLog = new ArrayList< String>();
if(bindingResult.hasErrors()){
errorLog.add(Error);
}
}
返回errorLog;
}
errorLog.add(No Error);
返回errorLog;
$ h
$ b 添加了必要的Bean for message Source和message_en.propertires for message
错误记录
-----
类型异常报告
消息Servlet.init()用于servlet spring-rest引发异常
描述服务器遇到内部错误,阻止它履行这一要求。
异常
javax.servlet.ServletException:Servlet.init()用于servlet spring-rest引发异常
org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950 )
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
组织.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)
$ org.apache.tomcat.util.net.JIoEndpoint SocketProcessor.run(JIoEndpoint.java:316)
的java.util .concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)
org.apache。 tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
### --- - ###
###根源###
org.springframework.beans.factory.BeanCreationException:错误创建名称为豆org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean# 0':调用init方法失败;嵌套的例外是java.lang.NoClassDefFoundError:无法初始化类org.hibernate.validator.internal.engine.ConfigurationImpl
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:304)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
组织.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
org.springframework.beans.factory.sup portBeanBeanFactory.getBean(AbstractBeanFactory.java:195)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
org.springframework.context.support.AbstractApplicationContext。 finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java: 658)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
org.springframework.web.servlet.Fra meworkServlet.initServletBean(FrameworkServlet.java:484)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
组织。 apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11。 AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
$ org.apache.coyote.AbstractProtocol AbstractConnectionHandler.process(AbstractProtocol.java:607)
$ org.apache.tomcat.util.net.JIoEndpoint SocketProcessor。运行(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)
$ org.apache.tomcat.util.threads.TaskThread WrappingRunnable.run(TaskThread.java:61)
的Java。 lang.Thread.run(Thread.java:745)
解决方案这是根据Hibernate Validator FAQ在
http://hibernate.org/validator/faq/
Hibernate Validator 3,4和5?
Hibernate Validator 3.x和4.x / 5.x是不同的代码库。
Hibernate Validator是Hibernate团队的原始验证框架,现在被称为传统Hibernate验证器。 Hibernate Validator 4.x是Bean Validation 1.0(JSR 303)的参考实现,而Hibernate Validator 5.x是Bean Validation 1.1(JSR 349)的参考实现。活动开发发生在5.x代码库上。
另外,当你使用MVC的spring验证框架时:
<! - 在类路径上检测到JSR-303支持并自动启用 - >
< mvc:annotation-driven />
因此,这种差异可能是:hibernate-validator-5.x将不支持JSR303,请尝试降级版本为4.x。
还喜欢Hibernate Validator 4.3.1.Final。而不是4.2.x,因为它们都有不同的包装结构。
Details:
I am making form-validation using javax-validation and hibaernate-validator in Spring.
Other than basic necessary JAR files for Spring.
I have included:
validation-api-1.1.0.Final
hibernate-validator-5.1.0.Final
I read somewhere that spl4j version is also in concern: so I'm also telling:
###slf4j-api-1.7.5###
###slf4j-simple-1.7.5###
###log4j-1.2.17###
Can the cause of error be due to slf4j and log4j compatibility?
I use annotation base validation.
Let me provide some code:
Customer.java
import java.util.Date;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
public class Customer {
@Size(min=2, max=30)
@NotEmpty
private String name;
@NotEmpty @Email
private String email;
@NotNull @Min(18) @Max(100)
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
CustomerController.java
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/customer")
public class CustomerController {
@Autowired
@Qualifier("messageSource")
private MessageSource messageSource;
@RequestMapping(value = "", method = RequestMethod.POST)
public @ResponseBody List<String> saveCustomerAction(
@Valid @ModelAttribute("customer") Customer customer,
BindingResult bindingResult, Model model) {
List<String> errorLog = new ArrayList<String>();
if (bindingResult.hasErrors()) {
errorLog.add("Error");
}
}
return errorLog;
}
errorLog.add("No Error");
return errorLog;
}
}
Added required Bean for message Source and message_en.propertires for messages
Error Log
-----
type Exception report
message Servlet.init() for servlet spring-rest threw exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet.init() for servlet spring-rest threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
###----###
###root cause###
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean#0': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.ConfigurationImpl
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:700)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:658)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:624)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:672)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:543)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:484)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
javax.servlet.GenericServlet.init(GenericServlet.java:158)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.lang.Thread.run(Thread.java:745)
解决方案 This is as per Hibernate Validator FAQ at
What’s the difference between Hibernate Validator 3, 4 and 5?
Hibernate Validator 3.x and 4.x/5.x are different codebases.
Hibernate Validator is the original validation framework from the Hibernate team and is now referred to as "Legacy Hibernate Validator". Hibernate Validator 4.x is the reference implementation of Bean Validation 1.0 (JSR 303), while Hibernate Validator 5.x is the reference implementation of Bean Validation 1.1 (JSR 349). Active development happens on the 5.x codebase.
Also as you are using spring validation framework for MVC:
<!-- JSR-303 support will be detected on classpath and enabled automatically -->
<mvc:annotation-driven />
Thus the discrepancy might be : hibernate-validator-5.x won't support JSR303, try downgrading the version to 4.x.
Also prefer Hibernate Validator 4.3.1.Final. rather than 4.2.x as both have different package structures.
这篇关于hibernate-validator中的异常。嵌套异常是java.lang.NoClassDefFoundError:ConfigurationImpl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!