2017-03-10 22 views
1

我試圖使用Hibernate的驗證,代碼編譯,但在啓動時失敗,錯誤: 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的驗證 「無法初始化javax.el.E​​xpressionFactory」 錯誤

代碼:

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

用戶等級:

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並沒有部署到Servlet容器)。此外,還嘗試從書「開始春天」的依賴關係:

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

它涉及完全相同的錯誤,但它沒有解決問題。

回答

4

您有2個不同的javax.el不兼容版本(3和2)。

只要使用這種依賴關係,這將涵蓋一切(這是我們在GitHub庫的README.md建議之一,但我需要更新的入門指南):

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

,並刪除所有其他的javax .el依賴關係(API和impl)。一旦完成,它應該像魅力一樣工作。

+0

從GitHub README.md文件粘貼的依賴關係,但仍然有相同的錯誤。 – krund

+0

你是否刪除了所有其他javax.el相關的依賴關係?如果你有幾個相互矛盾的javax.el版本,你將會遇到這個錯誤。 –

+0

謝謝!它工作如果'jsp-api'被移除。 – krund

相關問題