当前位置:  开发笔记 > 运维 > 正文

在weblogic服务器中部署spring引导应用程序时,如何解决javax.validation的NoSuchMethodError问题?

如何解决《在weblogic服务器中部署spring引导应用程序时,如何解决javax.validation的NoSuchMethodError问题?》经验,为你挑选了1个好方法。

我正在尝试部署一个简单的spring启动应用程序,它将公开一些rest api,并使用hibernate实体管理器来操作实体对象.当我尝试将此应用程序部署到Oracle Weblogic 12c时,出现以下异常:

    (ValidatorFactoryImpl.java:142)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at weblogic.validation.validator.ValidationProvider.invoke(ValidationProvider.java:75)
at weblogic.validation.validator.ValidationProvider.buildValidatorFactory(ValidationProvider.java:66)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:302)
.... rest of the stack trace has been omitted ....

简而言之,我得到了

java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;

我在堆栈溢出中遇到了类似的问题(像这样,而且,这个),但无法解决问题.我尝试调整hibernate-validator和javax验证api的依赖关系,但它没有多大帮助.这是我的pom文件的一些相关部分:

    
        javax.validation
        validation-api
        1.1.0.Final
    

    
        org.hibernate
        hibernate-core
        5.0.6.Final
    

    
        org.hibernate
        hibernate-entitymanager
        5.0.6.Final
    

    
        org.hibernate
        hibernate-validator
        5.2.2.Final
    

    
        org.hibernate
        hibernate-validator-annotation-processor
        5.2.2.Final
    

我的WEB-INF/weblogic.xml文件:




    
        true
        true
    


到目前为止我唯一使用的验证注释是@NotNull(javax.validation.constraints.NotNull).WebLogic Server版本:在Java7上运行的12.1.3.0.0.

PS:该项目在Tomcat 8中运行良好.



1> Zobayer Hasa..:

最后我能够解决问题.我不知道如果从Weblogic管理控制台禁用prefer-web-inf-classes,那么weblogic会忽略weblogic.xml文件中指定的指令.

来自Oracle的文档:

prefer-web-inf-classes元素(如果设置为true)将导致位于Web应用程序的WEB-INF目录中的类优先于应用程序或系统类加载器中加载的类加载.默认值为false.管理控制台中指定的值将优先于手动设置的值.

因此,我必须在weblogic.xml文件中指定prefer-application-packages.以下是该文件的更新内容:





    
        org.springframework.*
        org.hibernate.*
        javax.validation.*
        javax.validation.spi.*
        org.slf4j.*
    
    true



这个stackoverflow帖子非常有用.

感谢所有试图提供帮助的人.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有