web-dev-qa-db-ja.com

javax.validation.ValidationException:デフォルトのプロバイダーが見つかりません

現在、Spring MVC Webアプリに取り組んでおり、@ Validアノテーションを使用して検証をフックしようとしています。アプリケーションを起動すると、次の例外が発生します。

javax.validation.ValidationException: Unable to find a default provider

クラスパスにHibernate Validator 3.1.0.GA、javax検証1.0.0.GA、Hibernate Core 3.3.1.GA、およびHibernate Annotations 3.4.0.GAがあります。

私が見ていないバージョンには非互換性がありますか、またはクラスパスでHibernate Validatorを使用してこの例外がまだ発生している理由を誰でも考えることができますか?

乾杯、

キャップ

32
Caps

Hibernate Validator 3.1はJSR303プロバイダーではありません。 Hibernate Validator 4以降にアップグレードする必要があります。

26
Affe

この回答を参照してください: https://stackoverflow.com/a/3989936/325742

修正するには、このMaven依存関係Hibernate Validator Annotation Processorを追加します。

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-validator-annotation-processor</artifactId>
  <version>4.1.0.Final</version>
</dependency>

here からわかるように、それはそのアーティファクトの最新の安定バージョンです


依存関係を見つける一般的な方法

クラスorg.postgresql.Driverが見つからなかったことを示すNoClassDefFoundErrorを受け取ったとしましょう。

  1. Jarvanaを使用して、次のようなorg.postgresql.Driverを提供できる依存関係を検索します。http://www.jarvana.com/jarvana/search?search_type=class&Java_class=org .postgresql.Driverこれにより enter image description here

  2. 上記の依存関係をMaven依存関係形式に変換します。

    <dependency>
        <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>9.1-901.jdbc4</version>
     </dependency>
    
  3. thisのように検索して、上記がMaven Centralで利用できることを確認します。
    g:"postgresql" AND a:"postgresql"
    gはGroupIDを表し、aはartifactIDを表します)

  4. 最後に、pom.xmlに追加します


M2eを使用した依存関係の検索

必要な依存関係のおおよその考えがある場合、またはリストを指定して必要な依存関係を把握できる場合、m2e '依存関係検索は、pom.xmlに依存関係を追加する最も簡単な方法です。

手順:

  1. Pom.xmlの[依存関係]タブ(A)をクリックします
  2. 追加(B)をクリックします
  3. GroupId/artifactIdによる依存関係の検索(C)
  4. 検索結果から必要なものをダブルクリックして、pom.xmlに直接追加します(D)

次のスナップショットでマークされたA-D: enter image description here


IntelliJ Ideaで依存関係を見つける

IntelliJでは、依存関係の検索がはるかに簡単です。あなたがする必要があるのは、Mavenセントラルリポジトリが次のようにIntelliJによってインデックス付けされていることを確認することです。

enter image description here

そして、ポンポンに入って、 dep+Tab (または Alt+Insert here )に示されているように、これが得られるものです。 enter image description here

未解決のインポートがあるクラスにいる場合は、クイックフィックスにより、対応するMavenリポジトリを検索および追加するオプションが提供されます。 Alt+Enter 不足しているクラス/パッケージ: enter image description here

すごい!


37
Ashutosh Jindal

これはHibernateなしで私に起こりました。

私のPCで問題なく動作し、EC2 Linuxサーバーでは動作しませんでした。

その理由は、validation-api-1.0.0.GA.jarファイル/usr/share/Tomcat/lib

1回validation-api-1.0.0.GA.jar削除、うまくいきました。

23
Kof

私の場合、同じ問題がありましたが、mavenによってダウンロードされたhibernate-coreバージョン4.1.8.Finalのjarが破損しているために発生していました。バージョン4.1.6.Finalに切り替えて、動作を開始しました。私はSTSとSpringリポジトリを使用していました。

これが誰かを助けることを願っています。

2
damian

次のエラーが表示されました。

initメソッドの呼び出しに失敗しました;ネストされた例外はjavax.validation.ValidationException:使用可能なプロバイダーリゾルバーを取得できません

WEB-INF/libディレクトリに、次の両方のjarファイルに存在するValidator.classのtwoバージョンがあることを発見しました。

  • org.springframework.context-3.1.1.RELEASE.jar
  • com.springsource.javax.validation-1.0.0.GA.jar

Com.springsource.javax.validation-1.0.0.GA.jarをWEB-INF/libディレクトリから削除しました。古いため、サポートされなくなったためです。そうすることで、私のアプリケーションは完全に機能しました。他の投稿から、私の問題はクラスパス上の同じファイルの重複バージョンに関係していることがわかりました。 Spring 3 Validation を読んだ後、どのファイルが問題を引き起こしているかを見つけました。

0
Armanda K.

同じ状況で、Hibernate-anotationおよびhibernate-common-annotationから以下にリストするHibernate4注釈への注釈についてのみ、Jarバージョンを更新します。 Hibernate 4の場合、このjar-

1-hibernate-commons-annotations-4.0.5.Final 2-hibernate-validator-4.2.0.Final

これがあなたにも役立つことを願っています。

0
pintu