Javax.validation.ValidationException: невозможно найти поставщика по умолчанию

В настоящее время я работаю над веб-приложением Spring MVC и пытаюсь подключить проверку, используя аннотацию @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 на пути к классу?

Приветствия,

Колпачки

Ответ 1

Hibernate Validator 3.1 не является поставщиком JSR303. Вам необходимо перейти на Hibernate Validator 4 или более поздней версии.

Ответ 2

Смотрите этот ответ: fooobar.com/questions/157791/...

Чтобы исправить, добавьте эту зависимость maven Hibernate Validator Processor.

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

Это последняя стабильная версия этого артефакта, как видно из здесь


Общий способ поиска зависимости

Скажем, вы получили a NoClassDefFoundError, заявив, что класс org.postgresql.Driver не найден.

  • Используйте Jarvana для поиска зависимости, которая может обеспечить org.postgresql.Driver следующим образом: http://www.jarvana.com/jarvana/search?search_type=class&java_class=org.postgresql.Driver strong > , который дает enter image description here

  • Переведите вышеуказанную зависимость в формат зависимости maven:

    <dependency>
        <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>9.1-901.jdbc4</version>
     </dependency>
    
  • Подтвердите, что вышеуказанное доступно в Maven Central, например, this:
    g:"postgresql" AND a:"postgresql"
    (где g означает GroupID, а a означает artifactID)

  • Наконец, добавьте его в свой pom.xml


Поиск зависимостей с использованием m2e

Если у вас есть приблизительное представление о требуемой зависимости или вы можете определить тот, который вам нужен, дайте список, тогда m2e поиск зависимостей может быть самым быстрым способом добавления зависимости к вашему pom.xml

Шаги:

  • Нажмите вкладку "Зависимости" (A) в вашем pom.xml
  • Нажмите Добавить (B)
  • Найти зависимость от groupId/artifactId (C)
  • Дважды щелкните требуемый результат поиска, чтобы добавить его прямо к вашему pom.xml(D)

A-D, отмеченный в следующем снимке: enter image description here


Поиск зависимостей в IntelliJ Idea

В IntelliJ поиск зависимостей намного проще. Все, что вам нужно сделать, - убедиться, что центральное репо maven было проиндексировано IntelliJ так:

enter image description here

И затем, перейдите в pom, выполните dep + Tab (или Alt + Insert, как показано здесь), и это то, что вы получаете: enter image description here

Если вы находитесь в классе с нерешенным импортом, то быстрое исправление дает вам возможность поиска и добавления соответствующего maven-репо, выполнив Alt + Enter в отсутствующем классе/пакете: enter image description here

Удивительно, что я говорю!


Ответ 3

Это случилось со мной без спящего режима.

Отлично работает на моем ПК, он не работал на моем сервере Linux EC2.

Причиной было существование файла validation-api-1.0.0.GA.jar в разделе /usr/share/tomcat/lib.

После удаления validation-api-1.0.0.GA.jar он отлично работает.

Ответ 4

В моем случае у меня была та же проблема, но это происходило, потому что банку спящего ядра версии 4.1.8.Final, загруженную maven, была повреждена. Я переключился на версию 4.1.6.Final и начал работать. Я использовал репозитории STS и spring.

Надеюсь, это поможет кому-то.

Ответ 5

В той же ситуации я обновляю версию Jar только для анотаций из hibernate-anotation и hibernate-common-annotation для анонсов Hibernate4, которые перечислены ниже. Для Hibernate 4 вы можете использовать эти банки -

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

Надеюсь, что это сработает и для вас.

Ответ 6

Я получил следующую ошибку:

Не удалось вызвать метод init; Вложенное исключение - это javax.validation.ValidationException: невозможно получить доступные разрешения поставщика

Я обнаружил, что в моем каталоге WEB-INF/lib у меня были два версии Validator.class в обоих следующих файлах jar:

  • 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 Проверка