2017-03-10 29 views
1
私は休止状態の検証を使用しようとしている

"javax.el.E​​xpressionFactoryを初期化できません"、コードはコンパイルが、中に立ち上げたときのエラーで失敗します。 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 insteadHibernateの検証エラー

コード:

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

Userクラス:

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> 

私はhttp://hibernate.org/validator/documentation/getting-started/のガイドに従っていて、まったく同じ依存関係を使用しています。Running Spring Boot within IntelliJ results in Unable to load 'javax.el.ExpressionFactory'(依存性があり、サーブレットコンテナにデプロイメントしていないspring-boot-starter-tomcat)の依存関係を試しました。また、 "Beginning Spring"という本からの依存関係も試してみました。全く同じエラーに関係していますが、問題は解決しませんでした。

答えて

4

2つの異なる互換性のないバージョンのjavax.el(3と2)があります。

ただ、すべてのもの(それは我々がGitHubのレポのREADME.mdにお勧めしますが、私はセットアップガイドを更新する必要がある1つです)をカバーれる、この依存関係を使用します。

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

を、他のすべてのjavaxのを削除.el依存関係(APIとインプリメント)。いったん終わったら魅力的に働くはずです。

+0

GitHub README.mdファイルの貼り付けられた依存関係は引き続き同じエラーになりました。 – krund

+0

他のすべてのjavax.el関連の依存関係を削除しましたか?複数のバージョンのjavax.elがある場合は、このエラーが発生します。 –

+0

ありがとう! 'jsp-api'が削除された場合に動作します。 – krund