Weblogic 12c HibernateValidator类加载问题

Weblogic 12c HibernateValidator类加载问题,weblogic,classloader,classcastexception,hibernate-validator,Weblogic,Classloader,Classcastexception,Hibernate Validator,验证框架已作为JEE6规范(WL12)的一部分汇总。我们的应用程序的WL10和WL12版本都部署了以下开源库: JSR-303/validation-api.jar(版本1.0) Hibernate验证程序(版本4.2.0) 但是,这些库也与WL12(模块目录)捆绑在一起。请注意,Hibernate验证程序版本略有不同 modules.javax.validation_1.0.0.jar hibernate.validator_4.1.0.jar 通过WL12运行,我们得到以下异常: javax

验证框架已作为JEE6规范(WL12)的一部分汇总。我们的应用程序的WL10和WL12版本都部署了以下开源库:

  • JSR-303/validation-api.jar(版本1.0)
  • Hibernate验证程序(版本4.2.0)
  • 但是,这些库也与WL12(模块目录)捆绑在一起。请注意,Hibernate验证程序版本略有不同

  • modules.javax.validation_1.0.0.jar
  • hibernate.validator_4.1.0.jar
  • 通过WL12运行,我们得到以下异常:

    javax.validation.ValidationException: Unable to get available provider 
    
    尝试的解决方案 我们的下一个尝试是使用WebLogic FilteringClassLoader,通过在WebLogic-application.xml文件中指定库(即,选择我们的版本而不是WebLogic的版本),来选择我们应用程序(APP-INF/lib目录)中的库。我们已经在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>
    

    考虑到Bean验证是EE标准的一部分,我假设有一些代码Bean验证集成代码导致了这个问题。我认为有两种可能的解决办法:

    • 修补WL实例并升级到要使用的验证程序版本
    • 尝试编写自己的ValidationProvider。在内部,它可以委托给Hibernate验证程序类。如果随后向应用程序添加validation.xml,并指定自定义提供程序,则WL应引导此提供程序。TBH,我不知道这是否有效。还有很多未知数,我对WL和Bean验证的集成知之甚少

    就我个人而言,我想我应该尝试升级WL中使用的验证程序版本。

    您能解决这个问题吗?
    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)