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

Docx4J在Websphere Liberty Server 24.0.0.2上运行异常求助

排查Websphere Liberty 24上Docx4J+MOXy的JAXB VerifyError问题

1. 先抓VerifyError的核心诱因

java.lang.VerifyError本质是字节码验证失败,在你的场景里大概率是类版本不兼容、Liberty自带JAXB组件和应用打包的MOXy冲突、类加载顺序导致的重复类加载这几个原因。

2. 强制应用优先加载自身依赖

Websphere Liberty默认会优先用服务器自带的JAXB类,直接覆盖你打包的MOXy。给应用配置parentLast类加载策略,让应用先从自身WEB-INF/lib拿类:
在server.xml里给你的应用添加配置:

<application id="你的应用ID" name="你的应用名" location="你的应用包.war" type="war">
    <classloader delegation="parentLast" />
</application>

3. 确保JVM参数在Liberty里生效

你已经指定了JAXBContextFactory,但要确保参数在Liberty的JVM环境里正确配置:
在Liberty的jvm.options文件里添加:

-Djavax.xml.bind.JAXBContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory
-Dcom.sun.xml.bind.v2.ContextFactory=org.eclipse.persistence.jaxb.JAXBContextFactory

有些场景下需要同时设置这两个参数,才能强制MOXy的工厂被选中。

4. 清理pom里的依赖冲突

检查你的pom.xml,排除Docx4J自带的JAXB相关依赖,避免和MOXy打架:

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-core</artifactId>
    <version>8.x.x</version>
    <exclusions>
        <exclusion>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

同时确保MOXy版本兼容Java 21,用最新的Eclipselink版本(比如4.0.2+):

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.moxy</artifactId>
    <version>4.0.2</version>
</dependency>

5. 确认Liberty的Java 21兼容配置

Websphere Liberty 24对Java 21的支持需要正确配置特性包和JDK版本:
在server.xml里设置:

<featureManager>
    <feature>javaee-10.0</feature> <!-- 必须用支持Java21的特性包 -->
</featureManager>
<javaVersion>21</javaVersion>

别用过时的特性包,不然会导致JAXB类加载逻辑混乱。

6. 分析类加载来源

如果以上步骤没解决,用Liberty的dump命令生成服务器转储,排查类加载路径:

server dump 你的服务器名 --archive=dump.zip

解压后查看classloader-tree.txt,找JAXB/MOXy相关类的加载来源,确认是不是来自应用的WEB-INF/lib,而不是Liberty的系统库。

7. 显式给Docx4J指定MOXy

在初始化Docx4J前,直接设置系统属性强制用MOXy:

// 初始化Docx4J前执行
System.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");
// 或者用Docx4J自身的配置方法
Docx4J.setProperty("javax.xml.bind.JAXBContextFactory", "org.eclipse.persistence.jaxb.JAXBContextFactory");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:22:30