Eclipse で作成している GWT ベースのアプリのトラブルシューティングを試みています。現在、バックエンド側で Spring Framework 3.1.1 と Hibernate 4.1.6 を使用しています。私は現在、恐ろしい「javax.validation.ValidationException: Unable to find a default provider」という問題に悩まされています。これは多くの人を悩ませているようですが、さまざまな問題が原因です。JSR 303 実装のさまざまなバージョン (たとえば、Hibernate Validator の差分バージョン) を使用するさまざまなソリューションを試しましたが、違いはないようです。
デバッグ後、その理由がわかりました。実行が javax.validation.Validation.getValidationProviders():317 (validation-api-1.0.0.GA 内) になると、(Eclipse 内部 Jetty サーバーで実行されている) アプリは META-INF/services/javax を読み取ろうとします。 .validation.spi.ValidationProvider リソースをクラスパスから取り出し、空に戻ります。私が入れたさまざまなバリデーターの実装 (例: hibernate-validator-4.3.0.Final.jar) にはそのリソースがあり、値 (例: org.hibernate.validator.HibernateValidator) が含まれていることは確かですが、そうではありません。問題のクラスローダーに表示されます。JAR をクラスパスに含めた方法は、JAR をプロジェクトのビルド パスに追加することです。これは、アプリケーションを実行するときに Jetty ランタイムに追加されるようです。
私の質問は、特定のクラスローダーに見えるEclipseデバッグモードでクラスパスを表示する方法はありますか? 第二に、Hibernate Validator のリソースが、Validation が使用しているクラスローダーで最優先ではない理由を知っている人はいますか?