2014-06-24 18 views
61

provo a scrivere molto semplice applicazione con Hibernate Validator:javax.validation.ValidationException: HV000183: Impossibile caricare 'javax.el.ExpressionFactory'

i miei passi:

aggiuntivo seguente dipendenza nel pom.xml :

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

scrivere il codice:

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

    } 
} 

E mi viene in seguito 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 

Cosa devo fare?

+0

Aggiornamento hibernate-validatore a '5.2.4.Final' risolto problema per me. – fracz

+0

@fracz Ho hibernate-validator = '5.2.4.Final' e l'eccezione è ancora lì. –

risposta

113

Si sta lavorando dopo l'aggiunta di pom.xml seguenti dipendenze:

<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 richiede le dipendenze di Expression Language sul classpath. Vedi anche http://hibernate.org/validator/documentation/getting-started/ – Hardy

+0

\t org.glassfish.web \t javax.el \t 2.2.4 \t runtime è sufficente come Hibernate validator dipende già in javax.el-api – mvera

+7

' javax.el javax.el-api 2.3.1 'era sufficiente per me – ArtB

48

fare proprio

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

Perché 'hibernate-validator' si basa su quella dipendenza? –

+0

Non so perché, ma sarebbe meglio –

+0

@ thomas.mc.work Penso di evitare problemi di dipendenza transitoria – gstackoverflow

4

Se si utilizza Tomcat come runtime del server e si ottiene questo errore in test (perché il runtime di tomcat non è disponibile durante i test) di quanto non abbia senso includere tomcat el runtime al posto di quello di glassfi sh). Questo sarebbe:

<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

Per quanto riguarda il Hibernate validator documentation page, è necessario definire una dipendenza ad un'implementazione JSR-341:

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

grazie @herau, ho risparmiato un sacco di tempo. – Bodil

Problemi correlati