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

14,494

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.

Share:
14,494
adarshhsingh
Author by

adarshhsingh

Updated on July 17, 2022

Comments

  • adarshhsingh
    adarshhsingh almost 2 years

    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)