You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebLogic 12.2.1.3替换内置hibernate-validator后API调用报错求助

问题描述

WebLogic Server版本:12.2.1.3.0
使用WebLogic内置的hibernate-validator运行正常,但替换为Jar包提供的hibernate-validator(版本5.4.1.Final)后,调用API时出现类型转换异常。已尝试在weblogic.xml中配置prefer-application-packages,但异常依旧。

当前配置

pom.xml依赖

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-cdi</artifactId>
    <version>5.4.1.Final</version>
</dependency>

weblogic.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.8/weblogic-web-app.xsd">

    <jsp-descriptor>
        <keepgenerated>true</keepgenerated>
        <debug>true</debug>
    </jsp-descriptor>
    <context-root>awesome-api</context-root>

    <container-descriptor>
        <prefer-application-packages>
            <package-name>org.slf4j.*</package-name>
            <package-name>org.apache.commons.logging.*</package-name>
            <package-name>org.hibernate.*</package-name>
            <package-name>javax.validation.*</package-name>
        </prefer-application-packages>

        <prefer-application-resources>
            <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name>
        </prefer-application-resources>
    </container-descriptor>

</weblogic-web-app>

错误信息

java.lang.IllegalArgumentException: Can not set javax.validation.Validator field org.hibernate.validator.internal.cdi.interceptor.ValidationInterceptor.validator to org.jboss.weld.proxies.ExecutableValidator$Validator$976505265$Proxy$_$$_WeldClientProxy
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
at java.lang.reflect.Field.set(Field.java:764)
at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:94)
...(省略后续栈跟踪)
问题原因
  1. 类加载范围过度宽泛:配置org.hibernate.*会强制WebLogic加载应用中所有Hibernate包,与WebLogic内置的Hibernate JPA组件产生类加载冲突,导致javax.validation.Validator接口的实例来自不同类加载器,无法完成类型转换。
  2. 依赖不完整:仅引入hibernate-validator-cdi但缺少核心的hibernate-validator依赖,容器被迫混合使用内置与应用中的组件,引发类型不匹配。
解决方案

1. 细化包加载优先级配置

修改weblogic.xml中的prefer-application-packages,仅指定hibernate-validator相关包,避免影响其他Hibernate组件:

<prefer-application-packages>
    <package-name>org.slf4j.*</package-name>
    <package-name>org.apache.commons.logging.*</package-name>
    <!-- 仅加载应用中的hibernate validator相关包 -->
    <package-name>org.hibernate.validator.*</package-name>
    <package-name>org.hibernate.validator.cdi.*</package-name>
    <package-name>javax.validation.*</package-name>
    <package-name>javax.validation.spi.*</package-name>
</prefer-application-packages>

2. 补充完整依赖

在pom.xml中添加核心依赖,确保组件版本一致:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.1.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator-cdi</artifactId>
    <version>5.4.1.Final</version>
</dependency>
<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    <scope>provided</scope>
</dependency>

3. 优先加载验证服务配置文件

在prefer-application-resources中添加Bean Validation的服务配置,确保容器使用应用中的实现:

<prefer-application-resources>
    <resource-name>org/slf4j/impl/StaticLoggerBinder.class</resource-name>
    <resource-name>META-INF/services/javax.validation.ValidationProvider</resource-name>
</prefer-application-resources>

4. 清理并重新部署

  • 删除WebLogic服务器临时目录(如domain/servers/your_server/tmp)
  • 重新打包应用并部署到WebLogic

内容的提问来源于stack exchange,提问作者hhyygg2009

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 19:51:53