it-swarm.com.de

javax.validation.ValidationException: HV000183: 'javax.el.ExpressionFactory' kann nicht geladen werden

Ich versuche eine sehr einfache Anwendung mit Hibernate-Validator zu schreiben:

meine Schritte:

fügen Sie in pom.xml folgende Abhängigkeit hinzu:

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

code schreiben:

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

    }
}

Und ich bekomme folgenden Stacktrace:

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

Was mache ich falsch?

82
gstackoverflow

Es funktioniert, nachdem pom.xml folgende Abhängigkeiten hinzugefügt wurde:

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

Erste Schritte mit Hibernate Validator

136
gstackoverflow

mach einfach

<dependency>
   <groupId>javax.el</groupId>
   <artifactId>javax.el-api</artifactId>
   <version>2.2.4</version>
</dependency>
53
Bruno Marinho

Wenn Sie Tomcat als Serverlaufzeit verwenden und dieser Fehler in Tests angezeigt wird (da die Tomcat-Laufzeit während der Tests nicht verfügbar ist), ist es sinnvoll, die Tomcat el-Laufzeit anstelle der Laufzeit von glassfish zu verwenden. Das wäre:

    <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>
12
walkeros

In Bezug auf die Hibernate-Validierungsdokumentationsseite müssen Sie eine Abhängigkeit von einer JSR-341-Implementierung definieren:

<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.el</artifactId>
   <version>3.0.1-b08</version>
</dependency>
10
herau

Wenn Sie Spring Boot mit Startern verwenden, fügt diese Abhängigkeit Tomcat-embed-el und hibernate-validator Abhängigkeiten hinzu:

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

Wenn Sie Spring Boot verwenden, funktioniert das gut. Auch bei Spring Reactive Mongo.

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

und Validierungskonfiguration:

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();
    }
}
2
Razor

Falls Sie javax.el nicht benötigen (z. B. in einer JavaSE-Anwendung), verwenden Sie den ParameterMessageInterpolator von Hibernate

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();
0
Markus Schulte

für gradle:

compile 'javax.el:javax.el-api:2.2.4'
0
borino