创建ITextRenderer对象时触发java.lang.NoClassDefFoundError异常求助
解决Flying Saucer OpenPDF生成PDF时的NoClassDefFoundError异常
问题原因
java.lang.NoClassDefFoundError: javax/xml/transform/TransformerConfigurationException 异常说明运行时缺失XML转换相关类——这类类属于JAXP(Java API for XML Processing)规范,Flying Saucer解析XHTML时依赖该规范的实现。
在Java 9及以上版本中,JAXP相关包不再默认纳入JDK核心模块;即使是Java 8环境,也可能因Maven依赖传递缺失导致该类无法被找到。
解决方案
1. 补充JAXP API依赖
在Maven pom.xml 中添加以下依赖,确保XML转换类能被正确加载:
<dependency> <groupId>javax.xml</groupId> <artifactId>jaxp-api</artifactId> <version>1.4.2</version> </dependency>
若需兼容Java 9+模块系统,可替换为:
<dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>3.0.1</version> </dependency>
2. 升级Flying Saucer版本
你当前使用的9.1.20版本较老旧,存在高版本Java环境兼容性问题。建议升级到最新稳定版(如9.1.26),新版本已优化依赖管理,可能自动解决此类缺失问题:
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-openpdf</artifactId> <version>9.1.26</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-core</artifactId> <version>9.1.26</version> </dependency>
3. 校验依赖完整性
执行mvn dependency:tree命令,检查依赖树中是否包含jaxp-api或相关XML处理依赖,确认没有被意外排除。
验证修改
更新依赖后重新运行代码,应能正常创建ITextRenderer实例并生成PDF。若仍有问题,检查项目Java版本是否与依赖兼容(推荐Java 8或Java 11)。
内容的提问来源于stack exchange,提问作者Ranjit
相关产品推荐
相关产品推荐

