javax.validation.ValidationException: невозможно найти поставщика по умолчанию - PullRequest
2 голосов
/ 28 июля 2011

Я добавил некоторую проверку (@NotNull) к управляемым компонентам и неожиданно получил эту ошибку.Есть идеи, что может вызвать это?Приложение работает в Apache Tomcat 7.

javax.validation.ValidationException: Unable to find a default provider
javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264)
javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
javax.faces.validator.BeanValidator.validate(BeanValidator.java:271)
javax.faces.component.UIInput.validateValue(UIInput.java:1127)
javax.faces.component.UIInput.validate(UIInput.java:941)
javax.faces.component.UIInput.executeValidate(UIInput.java:1189)
javax.faces.component.UIInput.processValidators(UIInput.java:691)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
javax.faces.component.UIForm.processValidators(UIForm.java:243)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1080)
javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1180)
com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)

1 Ответ

11 голосов
/ 28 июля 2011

Похоже, что в пути к классу приложения на сервере приложений нет поставщика проверки компонентов JSR 303.Если вы используете Glassfish, было бы лучше, если бы вы могли проверить наличие bean-validator.jar в каталоге $GLASSFISH_INSTALL_ROOT/glassfish/modules;Glassfish 3.1 использует этот JAR-файл (который содержит реализацию Hibernate Validator) для использования в качестве поставщика проверки bean-компонентов JSR 303 по умолчанию.Я подозреваю, что вы используете более старую версию Glassfish или другой сервер приложений, который не содержит провайдера Bean Validation.

Если вам необходимо включить провайдера Bean Validation в classpath, попробуйте прочитать документацию по Java API дляValidationProviderResolver интерфейс , который гласит, что:

Провайдеры Bean Validation определяются по наличию файлов META-INF / services / javax.validation.spi.ValidationProvider, следующих заОписанный шаблон поставщика услуг здесь

Каждый файл META-INF / services / javax.validation.spi.ValidationProvider содержит список реализаций ValidationProvider, каждая из которых представляет поставщика.

Поэтому, если вы включаете провайдера Bean Validation в ваш classpath вручную, вы должны обеспечить наличие файла META-INF/services/javax.validation.spi.ValidationProvider в classpath, а также то, что он содержит имя провайдера Bean Validation.Содержание одного из них, предоставленного Glassfish, приведено ниже и указывает на класс средства проверки бобов Hibernate:

org.hibernate.validator.HibernateValidator
...