web-dev-qa-db-fra.com

Validation Hibernate "Impossible d'initialiser javax.el.ExpressionFactory" erreur

J'essaie d'utiliser la validation hibernate, le code est compilé, mais lorsqu'il est lancé en échec avec l'erreur: Exception in thread "main" javax.validation.ValidationException: HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead

Code:

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;

public class Run {
    public static void main(String[] args) {    
    User u = new User();
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator v = factory.getValidator();
    Set<ConstraintViolation<User>> result = v.validate(u);
    System.out.println(result.size());
    }
}

Classe d'utilisateur:

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

public class User {

        @Pattern(regexp="[a-zA-Z0-9_]{5,10}", message="Username must be 5 to 10 characters long, " + 
                "only digits, letters and underscore permitted.")
        @XmlAttribute(name = "username", required = true)
        protected String username;

        @Pattern(regexp="[0-9a-zA-Z]{5,10}", message="Password must be 5 to 10 characters long, " + 
                "only digits and letters permitted.")
        @XmlAttribute(name = "passwd", required = true)
        protected String passwd;

        @NotNull
        @XmlAttribute(name = "authToken", required = true)
        protected String authToken;

        Getters and setters...

pom.xml

  <modelVersion>4.0.0</modelVersion>
  <groupId>com.home.project1</groupId>
  <artifactId>webapp</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>webapp Maven Webapp</name>
  <url>http://maven.Apache.org</url>
  <dependencies>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.6.1</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>2.7.9</version>
        <scope>test</scope>
    </dependency>

<!-- SERVLET -->   

    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.1</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>runtime</scope>
    </dependency> 

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>runtime</scope>
    </dependency>

<!-- Spring -->      

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.6.RELEASE</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.3.6.RELEASE</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.6.RELEASE</version>
        <scope>runtime</scope>
    </dependency>   

<!-- Hibernate -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.0.Final</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>javax.el-api</artifactId>
        <version>3.0.0</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>javax.el</artifactId>
        <version>2.2.6</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-cdi</artifactId>
        <version>5.4.0.Final</version>
        <scope>runtime</scope>
    </dependency>

<!-- AspectJ -->    

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>1.8.9</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjtools</artifactId>
        <version>1.8.9</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.9</version>
        <scope>runtime</scope>
    </dependency>

 </dependencies>

Je suis guide suivant sur http://hibernate.org/validator/documentation/getting-started/ et utilise exactement les mêmes dépendances, également essayé avec des dépendances dans post L'exécution de Spring Boot dans IntelliJ a pour résultat Unable to load 'javax .el.ExpressionFactory ' (sans code de démarrage, juste avec spring-boot-starter-Tomcat dans les dépendances et sans déploiement dans un conteneur de servlets). Également essayé des dépendances du livre "Beginning Spring":

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

qui concerne exactement la même erreur, mais cela n'a pas résolu le problème. 

4
krund

Vous avez 2 versions incompatibles différentes de javax.el (3 et 2).

Utilisez simplement cette dépendance, qui couvrira tout (c'est celle que nous recommandons dans le fichier README.md du dépôt GitHub mais je dois mettre à jour le guide de démarrage):

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

et supprimez toutes les autres dépendances javax.el (API et impl). Cela devrait fonctionner comme un charme une fois que vous avez terminé.

10
Guillaume Smet

Tout ce qui précède n'a pas fonctionné pour moi Cependant, cela a: Cliquez avec le bouton droit de la souris sur le projet> Propriétés> Projet Facettes Dans la zone la plus à droite, sélectionnez l'onglet Exécution et sélectionnez votre exécution Tomcat cela fournira les libs nécessaires disponibles pour le test.  enter image description here

0
Venkat