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

升级Spring Boot3.3.0后docx4j-JAXB-MOXy的JAXB上下文异常求助

解决docx4j-JAXB-MOXy与Spring Boot 3.3.0的JAXB上下文冲突问题

以下是几种无需回退jakarta.xml.bind-api版本的解决方案:

1. 强制指定MOXy为JAXB上下文工厂

Spring Boot 3.3.0默认关联Glassfish的JAXB实现,显式配置让系统优先使用MOXy:

  • 在配置文件中添加:
    spring.jaxb.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
    
  • 或者代码中手动创建上下文时指定工厂:
    import jakarta.xml.bind.JAXBContext;
    import org.eclipse.persistence.jaxb.JAXBContextFactory;
    
    // 示例:针对docx4j相关类创建上下文
    JAXBContext context = JAXBContext.newInstance(
        "org.docx4j.wml",
        Thread.currentThread().getContextClassLoader(),
        Map.of(JAXBContextFactory.DEFAULT_JAXB_CONTEXT_FACTORY, "org.eclipse.persistence.jaxb.JAXBContextFactory")
    );
    

2. 排除Spring Boot默认引入的Glassfish JAXB依赖

在构建文件中排除Spring Boot自动引入的Glassfish JAXB运行时,避免与MOXy冲突:

Maven配置:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.glassfish.jaxb</groupId>
      <artifactId>jaxb-runtime</artifactId>
    </exclusion>
  </exclusions>
</dependency>

Gradle配置:

dependencies {
  implementation('org.springframework.boot:spring-boot-starter') {
    exclude group: 'org.glassfish.jaxb', module: 'jaxb-runtime'
  }
}

3. 确保MOXy版本适配jakarta.xml.bind-api 4.0.2

jakarta.xml.bind-api 4.x对应Jakarta EE 10,需要使用4.0.0及以上版本的MOXy,显式引入适配版本:

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

同时确认docx4j版本支持该MOXy版本,避免跨版本兼容性问题。

4. 手动初始化并注入MOXy上下文到docx4j

绕过docx4j自带的Context类,手动创建MOXy上下文并设置为docx4j的全局上下文:

import org.docx4j.jaxb.Context;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import jakarta.xml.bind.JAXBException;

// 在应用启动阶段执行
public void initDocx4jMoxyContext() {
  try {
    // 创建针对docx4j核心类的MOXy上下文
    var moxyContext = JAXBContextFactory.createContext(
        new Class[]{org.docx4j.wml.Document.class},
        null
    );
    Context.setJAXBContext(moxyContext);
  } catch (JAXBException e) {
    // 处理初始化异常
    e.printStackTrace();
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:49:49