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

使用Saxon HE解析XSLT时遭遇org.apache.xerces.jaxp.SAXParserFactoryImpl找不到的异常问题

解决Saxon XSLT转换时的FactoryConfigurationError问题

你遇到的这个错误是典型的依赖缺失导致的——你代码里指定了要用org.apache.xerces.jaxp.SAXParserFactoryImpl作为SAX解析工厂,但你的Maven项目里并没有引入Xerces的相关依赖,所以JVM找不到这个类。

先梳理下你的场景:已经添加了Saxon-HE 10.6的Maven依赖,通过saxonTransform方法传入XML和XSL字符串进行转换,但在执行Transformer transformer = tFactory.newTransformer(xslSource);时抛出了:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found]

下面给你两种可行的解决方案:

方案1:添加Xerces依赖到Maven

既然你明确指定了要使用Xerces的SAX解析器,直接在pom.xml里补充Xerces的依赖即可:

<!-- 添加Xerces解析器依赖 -->
<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.12.2</version>
</dependency>

添加后重新构建项目,依赖会自动下载,JVM就能找到对应的工厂类了。

方案2:移除SAXParserFactory的系统属性设置(更推荐)

其实Saxon本身自带了兼容的SAX解析器,你完全不需要强制指定Xerces的实现。可以把这行代码删掉:

System.setProperty("javax.xml.parsers.SAXParserFactory", "org.apache.xerces.jaxp.SAXParserFactoryImpl");

这样TransformerFactory会自动使用Saxon默认的解析器,既避免了依赖缺失的问题,也简化了代码配置。

额外优化小建议

关于Saxon的属性配置,推荐直接通过TransformerFactory的setAttribute方法来设置,你已经在设置DTD_VALIDATION的部分是没问题的。如果需要更精细的控制,还可以补充其他特性,比如:

tFactory.setAttribute(FeatureKeys.SCHEMA_VALIDATION, false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:57:43