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

Java版Excel转XML程序遇NoSuchMethodError问题求助

解决Java.lang.NoSuchMethodError: XmlOptions.setDisallowDocTypeDeclaration的问题

问题根源

你遇到的错误是依赖版本不兼容导致的:

  • Apache POI 4.0.1 官方配套的 xmlbeans 版本为 2.6.0,该版本的XmlOptions类中不存在setDisallowDocTypeDeclaration方法
  • 你引入的 xmlbeans 5.1.1 是高版本,虽然该方法在 xmlbeans 3.0+中新增,但 POI 4.0.1 的代码基于旧版 xmlbeans 编写,方法调用签名不匹配,触发了NoSuchMethodError

可行解决方案

方案1:降级xmlbeans到POI兼容版本

将 xmlbeans 版本改为 2.6.0(POI 4.0.1 官方推荐的配套版本),彻底解决依赖冲突:

  • Maven 配置修改:
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.6.0</version>
</dependency>
  • Gradle 配置修改:
implementation 'org.apache.xmlbeans:xmlbeans:2.6.0'

方案2:升级POI以适配高版本xmlbeans

若想保留 xmlbeans 5.x,需将 POI 升级到 5.2.3 及以上版本(POI 5.x 开始支持 xmlbeans 3.x+):

  • Maven 配置示例:
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

方案3:清理冗余依赖

通过IDEA排查并移除冲突依赖:

  1. 打开File > Project Structure > Libraries
  2. 检查是否存在多个版本的 xmlbeans
  3. 删除多余版本,仅保留与POI匹配的那一个

额外提示

你的Java代码中生成XML的逻辑基于JDK自带的javax.xml和org.w3c.domAPI,这部分无需依赖xmlbeans,xmlbeans仅作为POI读取XLSX文件的底层依赖,只要保证POI与xmlbeans版本匹配即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:09:55