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

Spring Boot 2.6.1 出现SAX Feature Not Supported报错如何解决?

问题根因

当前报错是因为项目运行时加载的SAX解析器实现为Oracle的oracle.xml.jaxp.JXSAXParserFactory,该实现不支持logback 1.2.7中SaxEventRecorder要设置的两个XXE防护特性,触发配置异常。

解决方案

按落地成本从低到高排序:

方案1:指定兼容的SAX解析器实现(优先推荐)

无需修改任何代码,仅需在应用启动参数中添加JAXP系统属性,指定使用JDK内置的Xerces解析器即可,该实现完全支持logback需要的特性:

-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl

如果是容器部署,可以把该参数加入容器的JVM启动参数配置中。

方案2:覆盖重写SaxEventRecorder实现(适用于必须保留Oracle XML解析器的场景)

利用类加载的优先顺序,在项目中创建和logback完全同包同名的类,修改buildSaxParser方法的逻辑,忽略不支持的特性即可:

  1. 在项目的java源码目录下创建包路径ch.qos.logback.core.joran.event
  2. 新建同名类SaxEventRecorder,将原有类的全量代码复制到该类中,修改buildSaxParser方法如下:
private SAXParser buildSaxParser() throws JoranException {
    try {
        SAXParserFactory spf = SAXParserFactory.newInstance();
        spf.setValidating(false);
        // 针对不支持的特性做异常捕获,不支持则直接跳过
        try {
            spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
            spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
        } catch (ParserConfigurationException ignored) {
            // Oracle解析器不支持该特性,忽略即可
        }
        spf.setNamespaceAware(true);
        return spf.newSAXParser();
    } catch (Exception pce) {
        String errMsg = "Parser configuration error occurred";
        addError(errMsg, pce);
        throw new JoranException(errMsg, pce);
    }
}

注意:该方案调整了logback原有的XXE防护逻辑,仅适用于logback配置文件完全由内部管控、不会引入外部恶意XML的场景。

方案3:排除Oracle XML解析器依赖

如果Oracle XML解析器是项目依赖传递引入的非必要组件,可以在pom.xml中找到引入该依赖的节点,添加exclusion配置排除即可,JDK内置的Xerces解析器完全可以满足常规XML解析需求:

<exclusion>
    <groupId>com.oracle</groupId>
    <artifactId>xmlparserv2</artifactId>
</exclusion>

内容的提问来源于stack exchange,提问作者Himanshu Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:15:05