验证框架已作为JEE6规范(WL12)的一部分汇总而成。我们的应用程序的WL10和WL12版本都使用以下开源库进行部署:
但是,这些库也与WL 12(模块目录)捆绑在一起。请注意,Hibernate Validator版本略有不同。
随着我们的WL12运行,我们将获得以下异常:
javax.validation.ValidationException: Unable to get available provider
尝试过的解决方案 我们的下一个尝试是使用WebLogic FilteringClassLoader来优先选择我们的应用程序(APP-INF / lib目录)中的库,方法是在weblogic-application.xml文件中指定它们(即通过WebLogic选择我们的版本)。我们已经为WL10中的其他几个开源库做了这个:
<prefer-application-packages>
<package-name>com.google.common.*</package-name>
<package-name>org.apache.commons.lang.*</package-name>
<package-name>org.apache.commons.logging.*</package-name>
<package-name>org.apache.commons.beanutils.*</package-name>
<package-name>org.apache.commons.collections.*</package-name>
<package-name>antlr.*</package-name>
<package-name>javax.validation.*</package-name>
<package-name>org.hibernate.validator.*</package-name>
</prefer-application-packages>
进行此更改后,我们的应用程序遇到以下运行时错误,尝试处理使用验证框架的任何请求:
javax.validation.ValidationException: Unable to get available provider resolvers.
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:259)
at web20.hibernate.validation.ValidatorFactoryConfigurator.getValidatorFactory(ValidatorFactoryConfigurator.java:39)
at web20.hibernate.validation.ValidationHandlerImpl.handleHibernateValidations(ValidationHandlerImpl.java:180)
at web20.hibernate.validation.ValidationHandlerImpl.performValidation(ValidationHandlerImpl.java:255)
at web20.hibernate.validation.ValidationHandlerImpl.validateAndFormatMessages(ValidationHandlerImpl.java:302)
at web20.hibernate.validation.ValidationHandlerImpl.validateUsingHibernateGroups(ValidationHandlerImpl.java:113)
at service.serviceapp.performValidations(serviceapp.java:392)
at service.serviceapp.performValidations(serviceapp.java:379)
at service.TransactionalServiceImpl.search(TransactionalServiceImpl.java:300)
答案 0 :(得分:0)
鉴于Bean Validation是EE标准的一部分,我假设有一些代码Bean Validation集成代码会导致问题。我看到两个可能的解决方案:
就个人而言,我想我会尝试升级WL中使用的Validator版本。