hibernate-validator中的异常。嵌套异常是java.lang.NoClassDefFoundError:ConfigurationImpl [英] Exception in hibernate-validator. nested exception is java.lang.NoClassDefFoundError: ConfigurationImpl

查看:911
本文介绍了hibernate-validator中的异常。嵌套异常是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

http://hibernate.org/validator/faq/

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆