【问题标题】:Weblogic 12 hibernate validation exceptionWeblogic 12休眠验证异常
【发布时间】:2013-09-27 11:51:09
【问题描述】:

从 Weblogic 11c 切换到 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)

我发现了有关这些主题的其他问题,但所有解决方案都是关于错误的库 (Vaadin 7 - Bean Validation)。我认为我的休眠验证器与 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-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>

【问题讨论】:

    标签: java hibernate weblogic


    【解决方案1】:

    java.lang.NoSuchMethodError 主要是由您的类路径中的无效库版本引起的。似乎 WebLogic 12c 使用的验证 API 版本与您的应用程序所期望的不同。为了强制它使用 WEB-INF/lib 文件夹中的那个,您必须使用 weblogic.xml 中的 prefer-web-inf-classes 元素指定它。

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

    【讨论】:

    • 我已将javax.validation 添加到prefer-web-inf-classes,现在可以使用了
    猜你喜欢
    • 2014-02-19
    • 1970-01-01
    • 2012-06-01
    • 2011-02-14
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    相关资源
    最近更新 更多