休眠验证器中的异常。嵌套异常是 java.lang.NoClassDefFoundError: ConfigurationImpl

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/24957513/
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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 15:57:57  来源:igfitidea点击:

Exception in hibernate-validator. nested exception is java.lang.NoClassDefFoundError: ConfigurationImpl

javaspringhibernatevalidationhibernate-validator

提问by adarshhsingh

Details:

细节:

I am making form-validation using javax-validation and hibaernate-validator in Spring. Other than basic necessary JAR files for Spring.

我正在 Spring 中使用 javax-validation 和 hibaernate-validator 进行表单验证。除了 Spring 的基本必需 JAR 文件。

I have included:

我已经包括:

validation-api-1.1.0.Final

验证-api-1.1.0.Final

hibernate-validator-5.1.0.Final

hibernate-validator-5.1.0.Final

I read somewhere that spl4j version is also in concern: so I'm also telling:

我在某处读到 spl4j 版本也受到关注:所以我也在说:

###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?

错误的原因可能是由于 slf4j 和 log4j 兼容性造成的吗?

I use annotation base validation.

我使用注释基础验证。

Let me provide some code:

让我提供一些代码:

Customer.java

客户.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

客户控制器.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

为消息源添加了必需的 Bean 和消息的 message_en.propertires

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.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)

采纳答案by hemantvsn

This is as per Hibernate Validator FAQ at

这是根据 Hibernate Validator FAQ at

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

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

What's the difference between Hibernate Validator 3, 4 and 5?

Hibernate Validator 3、4 和 5 之间有什么区别?

Hibernate Validator 3.x and 4.x/5.x are different codebases.

Hibernate Validator 3.x 和 4.x/5.x 是不同的代码库。

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.

Hibernate Validator 是 Hibernate 团队的原始验证框架,现在称为“Legacy Hibernate Validator”。Hibernate Validator 4.x 是 Bean Validation 1.0 (JSR 303) 的参考实现,而 Hibernate Validator 5.x 是 Bean Validation 1.1 (JSR 349) 的参考实现。积极的开发发生在 5.x 代码库上。

Also as you are using spring validation framework for MVC:

同样,当您使用 MVC 的 spring 验证框架时:

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

因此差异可能是:hibernate-validator-5.x 不支持 JSR303,请尝试将版本降级到 4.x。

Also prefer Hibernate Validator 4.3.1.Final. rather than 4.2.x as both have different package structures.

也更喜欢 Hibernate Validator 4.3.1.Final。而不是 4.2.x,因为两者都有不同的包结构。