javax.validation.ValidationException : HV000183: Unable to load 'javax.el.ExpressionFactory'

标签 java hibernate validation maven hibernate-validator

我尝试使用 hibernate validator 编写非常简单的应用程序:

我的步骤:

在 pom.xml 中添加以下依赖项:

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

编写代码:

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

    }
}

我得到以下堆栈跟踪:

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

我做错了什么?

最佳答案

添加到 pom.xml 以下依赖项后它正在工作:

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

Hibernate Validator also requires an implementation of the Unified Expression Language (JSR 341) for evaluating dynamic expressions in constraint violation messages. When your application runs in a Java EE container such as WildFly, an EL implementation is already provided by the container. In a Java SE environment, however, you have to add an implementation as dependency to your POM file. For instance you can add the following two dependencies to use the JSR 341 reference implementation:

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

关于javax.validation.ValidationException : HV000183: Unable to load 'javax.el.ExpressionFactory' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386771/

相关文章:

java - AndroidBillingLibrary : Remote Service crashed on BillingController. 请求购买

java - 与连接表中的类型单向关联

forms - Silex/Symfony2 后验证

cocoa - 如何在 Mac OS X 中测试有效的文件名

javascript - AngularJS:多种形式的服务器端验证

java - 由于页脚,Selenium 元素点击被拦截

java - Java中使用split()方法以空格作为分隔符分割字符串

java - 强化 : Resource Injection

java - 如何在JavaFx中删除TableRow

java - Infinispan 软索引文件存储问题