Docx4J实现docx转PDF遇类缺失异常,求助依赖排查
docx转PDF依赖缺失与Java17兼容性问题排查方案
问题根源
报错Cannot find class 'org.docx4j.convert.out.common.XsltCommonFunctions'是因为缺少docx4j转换模块的核心依赖;后续出现的SAXParser实例化异常,则是Java17模块系统限制与依赖版本冲突共同导致的。
1. 补全核心依赖
XsltCommonFunctions属于docx4j-convert-common模块,必须添加到pom.xml中,同时统一使用适配Java17的docx4j版本(推荐11.4.8),避免版本不一致引发问题:
<!-- 统一docx4j版本,适配Java17 --> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-convert-common</artifactId> <version>11.4.8</version> </dependency> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-JAXB-MOXy</artifactId> <version>11.4.8</version> </dependency> <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j-export-fo</artifactId> <version>11.4.8</version> </dependency> <!-- 更新SLF4J到兼容Java17的版本 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.36</version> </dependency>
2. 解决SAXParser实例化异常
Java17限制了对JDK内部API的访问,添加Xalan依赖时要避免和JDK自带组件冲突,同时添加VM参数解除限制:
添加Xalan相关依赖
<dependency> <groupId>xalan</groupId> <artifactId>xalan</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>xalan</groupId> <artifactId>serializer</artifactId> <version>2.7.3</version> </dependency>
添加VM启动参数
在运行程序时加入以下参数:
--add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-opens java.xml/com.sun.org.apache.xerces.internal.jaxp=ALL-UNNAMED
3. 排查依赖冲突
执行mvn dependency:tree查看依赖树,排除重复或版本不一致的组件(比如不同版本的Xalan、Xerces),确保所有docx4j相关依赖版本完全一致。
额外注意事项
- 不要混合使用不同版本的docx4j模块,可通过
dependencyManagement节点统一管控版本,防止版本漂移。 - 若仍有问题,检查项目是否开启了Java模块系统(module-info.java),需为docx4j相关模块添加
requires声明。
内容的提问来源于stack exchange,提问作者Hendrik Hötker
相关产品推荐
相关产品推荐

