2014-06-24 5 views
61

Ich versuche zu schreiben, sehr einfache Anwendung mit Hibernate Validator laden:javax.validation.ValidationException: HV000183: Kann nicht 'javax.el.ExpressionFactory'

meine Schritte:

Add folgende Abhängigkeit in pom.xml

<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 erhalte folgenden stacktra ce:

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?

+0

Upgrade Hibernate-Validator '5.2.4.Final' gelöstes Problem für mich. – fracz

+0

@fracz Ich habe Hibernate-Validator = '5.2.4.Final' und die Ausnahme ist immer noch da. –

Antwort

113

Es arbeitet nach folgenden Abhängigkeiten zu pom.xml Zugabe:

<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

+4

Bean Validation 1.1 erfordert die Expression Language-Abhängigkeiten vom Klassenpfad. Siehe auch http://hibernate.org/validator/documentation/getting-started/ – Hardy

+0

\t org.glassfish.web \t javax.el \t 2.2.4 \t Laufzeit ist sufficent wie Hibernate Validator hängt bereits auf javax.el-api – mvera

+7

' javax.el javax.el-api 2.3.1 'war ausreichend für mich – ArtB

48

tun nur

<dependency> 
    <groupId>javax.el</groupId> 
    <artifactId>javax.el-api</artifactId> 
    <version>2.2.4</version> 
</dependency> 
+1

Warum verlässt sich 'Hibernate-Validator' nicht auf diese Abhängigkeit? –

+0

Ich weiß nicht warum, aber es wäre besser –

+0

@ thomas.mc.work Ich denke, um transitive Abhängigkeitsprobleme zu vermeiden – gstackoverflow

4

Wenn Sie Tomcat als Server-Laufzeit und Sie diesen Fehler in Tests (da Tomcat Runtime während Tests nicht zur Verfügung steht), ist es sinnvoll, Tomcat El Runtime anstelle des von Glassfi zu verwenden Sch). Dies 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> 
5

In Bezug auf die Hibernate validator documentation page, haben Sie eine Abhängigkeit zu einer JSR-341 Implementierung zu definieren:

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

danke @herau, rettete mir eine Menge Zeit. – Bodil