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

Java使用DynamicJasper 5.3.2渲染动态报表出现XmlParser错误求助

问题根因

java.lang.AbstractMethodError: javax.xml.parsers.DocumentBuilderFactory.setFeature错误明确为XML解析器依赖版本冲突导致。JDK 1.8内置的XML解析器实现已经包含setFeature方法,但你项目类路径中引入了更早版本的XML解析相关依赖(比如xercesImpl 2.8及以下、xml-apis 1.3及以下版本),类加载时优先加载了旧版本的实现类,旧版本未实现JDK新增的setFeature接口方法,因此触发抽象方法错误。

修复步骤
  • 第一步:排查项目依赖树,定位冲突的XML相关依赖
    如果你使用Maven,执行mvn dependency:tree;如果使用Gradle,执行gradle dependencies,搜索xercesImpl、xml-apis两个依赖,确认是否有低于以下要求的版本被引入:
    • xercesImpl 最低兼容版本为2.9.1
    • xml-apis 最低兼容版本为1.4.01
  • 第二步:排除冲突的旧版本依赖
    找到引入旧版本XML依赖的上层依赖后,在对应依赖声明中排除旧的xercesImpl和xml-apis,以Maven为例写法如下:
    <dependency>
        <groupId>ar.com.fdvs</groupId>
        <artifactId>DynamicJasper</artifactId>
        <version>5.3.2</version>
        <exclusions>
            <exclusion>
                <groupId>xerces</groupId>
                <artifactId>xercesImpl</artifactId>
            </exclusion>
            <exclusion>
                <groupId>xml-apis</groupId>
                <artifactId>xml-apis</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    排除后如果运行提示缺少XML相关类,主动引入高版本兼容依赖即可:
    <dependency>
        <groupId>xerces</groupId>
        <artifactId>xercesImpl</artifactId>
        <version>2.12.2</version>
    </dependency>
    <dependency>
        <groupId>xml-apis</groupId>
        <artifactId>xml-apis</artifactId>
        <version>1.4.01</version>
    </dependency>
    
  • 第三步:可选强制指定XML解析器实现类
    如果完成依赖调整后仍报错,可以在报表生成代码执行前,手动指定JDK内置的XML解析器工厂,避免加载第三方旧实现:
    // 放在报表逻辑最前面执行
    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
    
额外优化提示

你当前代码中传入的rowsDataList是空集合,不会触发本次的XML解析错误,但后续报表渲染会显示无数据,可先添加几条测试数据验证功能。

内容的提问来源于stack exchange,提问作者Anaïs Siewe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:00:05