1. ホーム
  2. java

[解決済み] javax.validation.ValidationException: HV000183: javax.el.ExpressionFactory' を読み込めません。

2022-02-14 07:03:04

質問

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>

Hibernate Validatorの使用開始について :

また、Hibernate Validator は、Unified Expression Language (統一表現言語) の実装を必要とします。 JSR 341 制約違反メッセージの動的式を評価するために使用されます。のようなJava EEコンテナでアプリケーションを実行する場合。 ワイルドフライ ELの実装はコンテナによって既に提供されています。しかし、Java SE環境では、POMファイルに依存関係として実装を追加する必要があります。例えば、JSR341を使用するために、以下の2つの依存関係を追加することができます。 参照実装 :

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