Weblogic 12 hibernate验证异常 [英] Weblogic 12 hibernate validation exception

查看:137
本文介绍了Weblogic 12 hibernate验证异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  javax.persistence.PersistenceException:[PersistenceUnit())从Weblogic 11c切换到Weblogic 12c后, :JpaPersistenceUnit]无法构建EntityManagerFactory 
...
导致:java.lang.NoSuchMethodError:javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax / validation / ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl。< init>(ValidatorFactoryImpl.java:113)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)

我发现有关这些主题的其他问题,但所有解决方案都是关于错误的库( Vaadin 7 - Bean Validation )。我认为我的hibernate-validator匹配了bean验证器库。这是我在WEB-INF / lib中的内容:

  hibernate-c3p0-4.2.4.Final.jar 
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.4.Final.jar
hibernate-entitymanager-4.2.4.Final.jar
hibernate- jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-5.0.1.Final.jar
validation-api-1.1.0.Final.jar

它可能是由其他依赖项引起的吗?

编辑
我目前在我的weblogic-application.xml中有这个,并且一切正常:

 < WebLogic的应用程序> 

< prefer-application-packages>
< package-name> javax.wsdl。*< / package-name>
< package-name> javax.faces。*< / package-name>
< package-name> org.apache.taglibs。*< / package-name>
< package-name> org.springframework。*< / package-name>
< package-name> javax.persistence。*< / package-name>
< package-name> org.hibernate。*< / package-name>
< package-name> javax.validation。*< / package-name>
< package-name> javax.validation.bootstrap。*< / package-name>
< package-name> javax.validation.constraints。*< / package-name>
< package-name> javax.validation.groups。*< / package-name>
< package-name> javax.validation.metadata。*< / package-name>
< package-name> javax.validation.spi。*< / package-name>
< package-name> org.slf4j。*< / package-name>
< / prefer-application-packages>

< prefer-application-resources>
< resource-name> javax.faces。*< / resource-name>
< resource-name> org.apache.taglibs。*< / resource-name>
< resource-name> org.springframework。*< / resource-name>
< resource-name> javax.persistence。*< / resource-name>
< resource-name> javax.validation。*< / resource-name>
< resource-name> org.hibernate。*< / resource-name>
< / prefer-application-resources>

< / weblogic-application>


解决方案 java.lang。 NoSuchMethodError 主要是由类路径中的无效库版本引起的。看起来WebLogic 12c正在使用与您的应用程序所期望的不同版本的验证API。为了强制它使用 WEB-INF / lib 文件夹中的文件夹,你必须使用 prefer-web-inf-classes 元素放入 weblogic.xml 中。 $ b

这里是关于 prefer-web-inf-classes的更多文档


I'm getting this exception after switching from Weblogic 11c to Weblogic 12c:

javax.persistence.PersistenceException: [PersistenceUnit: JpaPersistenceUnit] Unable to build EntityManagerFactory
...
Caused By: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:113)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)

I've found other questions about the topics, but all solutions were about the wrong libraries(Vaadin 7 - Bean Validation). I think my hibernate-validator matches the bean validator library. This is what I have in WEB-INF/lib:

hibernate-c3p0-4.2.4.Final.jar
hibernate-commons-annotations-4.0.2.Final.jar
hibernate-core-4.2.4.Final.jar
hibernate-entitymanager-4.2.4.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-5.0.1.Final.jar
validation-api-1.1.0.Final.jar

Can it be caused by some other dependency?

EDIT I currently have this in my weblogic-application.xml and everything is working:

<weblogic-application>

    <prefer-application-packages>
      <package-name>javax.wsdl.*</package-name>
      <package-name>javax.faces.*</package-name>
      <package-name>org.apache.taglibs.*</package-name>
      <package-name>org.springframework.*</package-name>
      <package-name>javax.persistence.*</package-name>
      <package-name>org.hibernate.*</package-name>
      <package-name>javax.validation.*</package-name>
      <package-name>javax.validation.bootstrap.*</package-name>
      <package-name>javax.validation.constraints.*</package-name>
      <package-name>javax.validation.groups.*</package-name>
      <package-name>javax.validation.metadata.*</package-name>
      <package-name>javax.validation.spi.*</package-name>
      <package-name>org.slf4j.*</package-name>
    </prefer-application-packages>

    <prefer-application-resources>
      <resource-name>javax.faces.*</resource-name>
      <resource-name>org.apache.taglibs.*</resource-name>
      <resource-name>org.springframework.*</resource-name>
      <resource-name>javax.persistence.*</resource-name>
      <resource-name>javax.validation.*</resource-name>
      <resource-name>org.hibernate.*</resource-name>
    </prefer-application-resources>

</weblogic-application>

解决方案

The java.lang.NoSuchMethodError is mainly caused by an invalid library version in your classpath. It seems the WebLogic 12c is using a different version of validation api from what your application expect. In order to force it to use the one in your WEB-INF/lib folder you have to specify it using prefer-web-inf-classes element in your weblogic.xml.

Here is more documentation about prefer-web-inf-classes

这篇关于Weblogic 12 hibernate验证异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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