2015年4月10日金曜日

Handler processing failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.messageinterpolation.InterpolationTerm

概要

Springでバリデーションルールを作成するときに@Maxや@Minなどを使います
バリデーションルールを作成した上でテストを実施すると掲題のエラーが発生しました
プロジェクト上ではエラーにならずテストを実行すると発生する感じで若干ハマったので対応方法を紹介します

環境

  • Windows 7 64bit
  • Java 1.8.0_25
  • Maven 3.2.2
  • Eclipse 4.4 Luna
  • Spring 4.1.5 RELEASE

開発シーン詳細

開発はEclipse上で行っておりSpringフレームワークを使ったWebAPIを作成しています
プロジェクトはMavenでビルドすることができるようになっています
Springにあるバリデーションの機能を使うためにBeansクラスを作成してそのBeansクラスがリクエストのパラメータをバインドするように実装しています
バインドするBeansクラス上で各パラメータにバリデーション用のアノテーションを付与しています
この状態でMaven経由でテストを実施するとバリデーションを使う部分で掲題のエラーが発生しました

対応方法

バリデーション用のアノテーションを使うために以下のようにpom.xmlを記載しました

<!-- Hibernate Validation -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.1-b04</version>
</dependency>
<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>el-impl</artifactId>
    <version>2.2</version>
    <scope>test</scope>
</dependency>

ポイントは最後のel-implでこれがないと掲題のエラーが発生する感じです
もちろんel-implがなくてもプロジェクトのエラーは発生しませんがmvn testを実行するとエラーが発生する感じでした

開発している環境にもよりますがといあえず自分は上記で解決できたので紹介します

1 件のコメント:

  1. こんにちは。

    なかなか原因に気がつきにくそうなエラーですね。

    返信削除