Javax.validation.ValidationException: HV000183: Unable to load 'javax.el.ExpressionFactory'

I am trying to write a very simple application with a hibernate validator:

my steps:

add the following dependency to pom.xml:

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

write code:

 class Configuration { Range(min=1,max=100) int threadNumber; //... public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator(); Configuration configuration = new Configuration(); configuration.threadNumber = 12; //... Set<ConstraintViolation<Configuration>> constraintViolations = validator.validate(configuration); System.out.println(constraintViolations); } } 

And I get the following stacktrace command:

 Exception in thread "main" javax.validation.ValidationException: Unable to instantiate Configuration. at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:279) at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:110) ... at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:110) at org.hibernate.validator.internal.engine.ConfigurationImpl.<init>(ConfigurationImpl.java:86) at org.hibernate.validator.HibernateValidator.createGenericConfiguration(HibernateValidator.java:41) at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:276) ... 2 more 

How am I wrong?

+90
java maven validation hibernate hibernate-validator
Jun 24 '14 at 12:34
source share
8 answers

It works after adding the following dependencies to pom.xml :

 <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.el</artifactId> <version>2.2.4</version> </dependency> 

Getting started with Hibernate Validator

+144
Jun 24 '14 at 12:45
source share

just do

 <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>2.2.4</version> </dependency> 
+56
Nov 29 '14 at 18:19
source share

If you use tomcat as the runtime of your server, and you get this error in tests (because tomcat runtime is not available during tests), then it makes sense to include tomcat el runtime, and not one of the glass fish). This will:

  <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-el-api</artifactId> <version>8.5.14</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jasper-el</artifactId> <version>8.5.14</version> <scope>test</scope> </dependency> 
+13
Apr 25 '17 at 13:02 on
source share

As for the Hibernate validator documentation page , you should determine the dependency on the JSR-341 implementation:

 <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.1-b11</version> </dependency> 
+11
Jun 19 '17 at 7:22
source share

If you use spring boot with starters, this dependency adds dependencies like tomcat-embed-el and hibernate-validator :

 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> 
+8
Aug 6 '18 at 10:48
source share

If you do not need javax.el (for example, in a JavaSE application), use the ParameterMessageInterpolator from the Hibernate validator . The Hibernate validator is a standalone component that can be used without Hibernate itself.

Depends on the sleeping validator

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

Use ParameterMessageInterpolator

 import javax.validation.Validation; import javax.validation.Validator; import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; private static final Validator VALIDATOR = Validation.byDefaultProvider() .configure() .messageInterpolator(new ParameterMessageInterpolator()) .buildValidatorFactory() .getValidator(); 
+5
Feb 18 '19 at 15:02
source share

When using Spring Boot, this works well. Even with Spring Reactive Mongo.

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

and configuration check:

 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration public class MongoValidationConfig { @Bean public ValidatingMongoEventListener validatingMongoEventListener() { return new ValidatingMongoEventListener(validator()); } @Bean public LocalValidatorFactoryBean validator() { return new LocalValidatorFactoryBean(); } } 
+4
Aug 18 '18 at 18:31
source share

for gradle:

 compile 'javax.el:javax.el-api:2.2.4' 
0
Jul 09 '18 at 17:20
source share



All Articles