javax.validation.ValidationException:无法找到默认提供程序 [英] javax.validation.ValidationException: Unable to find a default provider

查看:3548
本文介绍了javax.validation.ValidationException:无法找到默认提供程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我向托管bean添加了一些验证( @NotNull )并突然出现此错误。什么可能导致它的想法?该应用程序在Apache Tomcat 7中运行。

I added some validation (@NotNull) to managed beans and suddenly got this error. Any ideas what might cause it? The application runs in 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)


推荐答案

似乎没有JSR 303 Bean Validation提供程序在应用程序服务器中的应用程序的类路径中。如果你正在使用Glassfish,那么如果你能在 $ GLASSFISH_INSTALL_ROOT / glassfish / modules中验证 bean-validator.jar 的存在会更好/ code>目录; Glassfish 3.1使用此JAR(包含Hibernate Validator实现)作为默认的JSR 303 Bean Validation提供程序。我怀疑您使用的是旧版本的Glassfish,或其他不包含Bean Validation提供程序的应用程序服务器。

It appears that there is no JSR 303 Bean Validation provider in the classpath of your application in the application server. If you are using Glassfish, it would be better if you can verify the presence of bean-validator.jar in the $GLASSFISH_INSTALL_ROOT/glassfish/modules directory; Glassfish 3.1 uses this JAR (which contains the Hibernate Validator implementation) to serve as the default JSR 303 Bean Validation provider. I suspect that you are using an older version of Glassfish, or another application server that does not contain a Bean Validation provider.

如果必须包含Bean Validation提供程序classpath,请考虑阅读 ValidationProviderResolver interface ,其中声明:

If you must include a Bean Validation provider in the classpath, consider reading the Java API documentation for the ValidationProviderResolver interface, which states that:


Bean验证提供程序通过存在来识别
META-INF / services / javax.validation.spi.ValidationProvider文件
遵循描述的服务提供者模式此处

每个META-INF / services / javax.validation。 spi.ValidationProvider文件
包含ValidationProvider实现的列表,每个实现
代表一个提供者。

Each META-INF/services/javax.validation.spi.ValidationProvider file contains the list of ValidationProvider implementations each of them representing a provider.

因此,如果您在类路径中手动包含Bean Validation提供程序,则必须确保存在 META- INF / services / javax.validation.spi.ValidationProvider 类路径中的文件,还包含Bean Validation提供程序的名称。 Glassfish提供的内容如下所示,并指向Hibernate Bean Validator类:

Therefore, if you do include a Bean Validation provider in your classpath manually, you must ensure the presence of the META-INF/services/javax.validation.spi.ValidationProvider file in the classpath, and also that it contains the name of the Bean Validation provider. The contents of one provided by Glassfish is listed below, and points to the Hibernate Bean Validator class:

org.hibernate.validator.HibernateValidator

这篇关于javax.validation.ValidationException:无法找到默认提供程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆