Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath

Ask Question
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>4.2.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.5</version>
</dependency>

to pom.xml and deploy on the server, I get an " Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath." validation exception.

I'm just added the dependency above and the one for email to a template MVC project.

Error stacktrace:

DEBUG: org.springframework.ui.context.support.UiApplicationContextUtils - Unable to locate ThemeSource with name 'themeSource': using default [org.springframework.ui.context.support.DelegatingThemeSource@20212230]
DEBUG: org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean - Failed to set up a Bean Validation provider
javax.validation.ValidationException: Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:271)
    at org.springframework.validation.beanvalidation.LocalValidatorFactoryBean.afterPropertiesSet(LocalValidatorFactoryBean.java:223)
    at org.springframework.validation.beanvalidation.OptionalValidatorFactoryBean.afterPropertiesSet(OptionalValidatorFactoryBean.java:40)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:667)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:633)
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:681)
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:552)
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:493)
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1241)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1154)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1041)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4944)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5230)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
                The javaee dependencies includes the javax.validation packages, which in turn trigger the automatic registration of a JSR-303 bean validation. But the javaee only has the API not an implementation for it. Either add an implementation or don't use the fat javaee jar as a dependency. Also it isn't an error it is a debug message, telling you a provider cannot be found, your application should start regardless of that.
– M. Deinum
                Mar 31, 2016 at 9:23
                You can also add some starter dependency like org.springframework.boot:spring-boot-starter-web:SOME_VERSION. That includes the Hibernate validator.
– Ferran Maylinch
                Jun 5, 2018 at 8:28

Add a Bean Validation Provider dependency e.g Hibernate Validator. The Bean Validation API dependency is available on the classpath but the implementation is missing. Add the following to your pom.xml

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.2.4.Final</version>
</dependency>

Note that since 6.0 groupId has changed see: https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator

Also note that:

  • HB Validator 6.x is the last big release that works well with JavaEE (javax).
  • HB Validator 7.x targets Jakarta EE 9.
  • HB Validator 8.x targets Jakarta EE 10.
  • Source: https://in.relation.to/2022/08/04/hibernate-validator-705-624-final-800-cr2-released/

    This did the trick, I wonder how this error was presented recently and the project has been under development for more than a year... – 0x777 Aug 24, 2016 at 20:52 Hi it says "...a provider like Hibernate Validator (RI) to your classpath." does it mean there's alternative? Cause hibernate validator seems to bring in the whole jboss family... – HoaPhan Aug 22, 2018 at 17:29 Note: org.hibernate artifact location was moved to ``org.hibernate.validator` as per mvnrepository.com/artifact/org.hibernate/hibernate-validator – caladeve May 12, 2021 at 1:34

    To resolve the same issue for Spring Boot and Gradle users add following dependency to your project

    implementation 'org.springframework.boot:spring-boot-starter-validation'
                    For mvn users:  Use this <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-validation</artifactId>         </dependency>
    – stanlee
                    Jan 26, 2021 at 18:39
                    this should be the accepted answer, caz i am not using hibernate in my application then why i need to add hibernate validator, i only need to add spring validation
    – Siva Anand
                    Oct 12, 2022 at 17:03
    

    You can only add one dependency, and resolve the error.

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    

    org.springframework.boot:spring-boot-starter-validation has following dependencies, which are org.glassfish:jakarta.eland org.hibernate.validator:hibernate-validator. Then, org.hibernate.validator:hibernate-validator has jakarta.validation:jakarta.validation-api.

    This took care of 2 warnings for me. Spring Boot and its libraries are Just sweet. Makes the life of Codes easy. Worked like a Charm – Jess Apr 6 at 16:50

    I made it work downgrading the dependency of hibernate-validator from version 7.0.2.Final to 6.0.13.Final.

    This is how my dependencies look like:

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.0.13.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.el</artifactId>
            <version>3.0.0</version>
        </dependency>
                    Excellent! Already spent a day trying to figure out the issue. This solution immediately worked.
    – Pardhu
                    Apr 26, 2022 at 8:07
    

    In my case, I moved to Hibernate 7.x but had an old explicit dependency on:

    <dependency>
      <artifactId>validation-api</artifactId>
      <groupId>javax.validation</groupId>
      <version>2.0.1.Final</version>
    </dependency>
    

    Once I removed this dependency, and allowed Hibernate to transitively pull in the dependency to the Jakarta Bean Validation API (jakarta.validation:jakarta.validation-api:3.0.0). Everything worked fine.

    You need to add any validation provider dependency for example Hibernate Validator.

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.2.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>5.2.1.Final</version>
    </dependency>
                    Hibernate validator group id has been changed from version 6.x.x and an exmaple is given below,       <dependency>       <groupId>org.hibernate.validator</groupId>       <artifactId>hibernate-validator</artifactId>       <version>6.1.7.Final</version>       </dependency>
    – AGan
                    Jun 18, 2021 at 17:59
    

    If you are using spring-boot-starter dependencies, then prefer adding another one for validation.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    

    Hibernate Validator requires an implementation of Jakarta Expression Language for evaluating dynamic expressions in constraint violation messages.

    When your application runs in a Java EE container such as JBoss Application Server, an EL implementation is already provided by the container.

    In a Java SE environment, however, you have to add an implementation as dependency to your POM or gradle file.

    For instance you can add the following dependency to use the Jakarta EL reference implementation:

    maven

    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>jakarta.el</artifactId>
        <version>4.0.2</version>
    </dependency>
    

    or gradle

    implementation 'org.glassfish:jakarta.el:4.0.2'
    

    Hibernate validator documentation

    If you are using spring-boot-starter-validation in your project, hibernate-validator and jakarta.el are already in the dependencies of the given starter.

    spring-boot-starter-validation

    Springboot 3 has significantly simplified our lives. With the addition of just two dependencies, we are ready to go... alternatively this video might be helpful

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springdoc</groupId>
                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
                <version>2.0.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/jakarta.el/jakarta.el-api -->
            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>jakarta.el</artifactId>
                <version>4.0.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator-annotation-processor -->
            <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>7.0.4.Final</version>
            </dependency>
    </dependencies>
    

    imports in class:

    import jakarta.validation.constraints.Email;
    import jakarta.validation.constraints.NotNull;
    import jakarta.validation.constraints.Size;
    

    Just need to add the following dependencies to your POM.XML In my case, Spring-boot v3, Java 17

    <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>8.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.expressly</groupId>
            <artifactId>expressly</artifactId>
            <version>5.0.0</version>
        </dependency>
    

    See the following documentation for more details - Jboss Documentation

    There seems to be an incompatibility with Guice and/or Reactor.io in some of the versions. This worked for me in a Spring Boot WebFlux solution:

    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>jakarta.el</artifactId>
    </dependency>
    
    import static org.assertj.core.api.Assertions.assertThat;
    import javax.validation.Validation;
    import javax.validation.Validator;
    import javax.validation.ValidatorFactory;
    import javax.validation.constraints.Pattern;
    import lombok.Data;
    import org.junit.jupiter.api.Test;
    public class ValidationTests {
        @Test
        public void validate(){
            ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            Validator validator = factory.getValidator();
            Foo foo = new Foo();
            foo.setName("7of9");
            assertThat(validator.validate(foo).size()).isNotZero();
        @Data
        class Foo{
            @Pattern(regexp = "[a-zA-Z]", message = "Only letters allowed")
            private String name;
    

    Otherwise I'd be getting the same error as reported or getting build errors (Guice would become excluded from classpath.

    In my case helped to add the next dependency:

            <dependency>
                <groupId>jakarta.validation</groupId>
                <artifactId>jakarta.validation-api</artifactId>
                <version>3.0.1</version>
            </dependency>
    

    I have the same error when I migrate a spring boot 2.6 service to the version 3.0.1. Adding the hibernate validator and the other libs that refer in this post.

    buildscript {
        ext {
            kotlinVersion = '1.6.0'
            groovyVersion = '3.0.13'
            groovySpockVersion = '2.4-M1-groovy-3.0'        
            springBootVersion = '3.0.1'
            springSecurityVersion = '2.6.8'
            springDocVersion = '1.5.12'
            hibernateValidatorVersion = '8.0.0.Final'
            javaxElApiVersion = '3.0.0'
            javaxElVersion = '2.0.1.Final'
            javaxElImplVersion = '2.2.6'        
        implementation("javax.el:javax.el-api:${javaxElApiVersion}")
        implementation("javax.validation:validation-api:${javaxElVersion}")
        implementation("org.glassfish.web:javax.el:${javaxElImplVersion}")
        implementation("org.hibernate:hibernate-validator:${hibernateValidatorVersion}")
        implementation("org.hibernate:hibernate-validator-annotation-processor:${hibernateValidatorVersion}")
        implementation("org.springframework.boot:spring-boot-starter-web") {
            exclude module: 'spring-boot-starter-tomcat'
        implementation("org.springframework.boot:spring-boot-starter-validation")
    

    In my case, the error is because I m using spring boot version 3.0.1 and hibernate-validator version 6.2.0 which is incompatible. By upgrading hibernate-validator to 7.0.1.Final the problem was resolved

       <dependency>
                <groupId>org.hibernate.validator</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>7.0.1.Final</version>
        </dependency>
    

    I had the same issue but latter on i resolve this one by adding following dependency im pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    

    In my case I didn't need Validators so removing them also removes the error without needing the hibernate-validator dependencies. Regular tests run fine.

    public class Test 
        public  ObjectMapper mapper;
        public  Validator validator;                //remove
        public  ValidatorFactory validatorFactory;  //remove
        @Before
        public void setUp() {
            mapper = new ObjectMapper();
            validatorFactory = Validation.buildDefaultValidatorFactory();  //remove
            validator = validatorFactory.getValidator();                   //remove
            

    Thanks for contributing an answer to Stack Overflow!

    • Please be sure to answer the question. Provide details and share your research!

    But avoid

    • Asking for help, clarification, or responding to other answers.
    • Making statements based on opinion; back them up with references or personal experience.

    To learn more, see our tips on writing great answers.