IntelliJ调试Spring Boot时仅触发XMLConfigurationException问题
调试Spring Boot时仅触发的XMLConfigurationException问题及解决方案建议
调试Spring Boot应用时遇到以下异常,仅在调试场景下触发,正常运行无问题:
com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException: http://apache.org/xml/features/xinclude-aware at java.base/java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:732) at com.intellij.rt.debugger.MethodInvoker.invokeInternal(MethodInvoker.java:223) at com.intellij.rt.debugger.MethodInvoker.invoke2(MethodInvoker.java:45) at java.xml/com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings.getFeature(ParserConfigurationSettings.java:204) at java.xml/com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.copyFeatures1(XIncludeHandler.java:2791) at java.xml/com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.copyFeatures(XIncludeHandler.java:2766) at java.xml/com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler.reset(XIncludeHandler.java:604) at java.xml/com.sun.org.apache.xerces.internal.parsers.XIncludeAwareParserConfiguration.configurePipeline(XIncludeAwareParserConfiguration.java:164) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:867) at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247) at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342) at org.apache.logging.log4j.core.config.xml.XmlConfiguration.<init>(XmlConfiguration.java:94) at org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory.getConfiguration(XmlConfigurationFactory.java:46) at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:533) at org.apache.logging.log4j.core.config.ConfigurationFactory$Factory.getConfiguration(ConfigurationFactory.java:457) at org.apache.logging.log4j.core.config.ConfigurationFactory.getConfiguration(ConfigurationFactory.java:318) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:690) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:711) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:253) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196) at org.apache.commons.logging.LogAdapter$Log4jLog.<clinit>(LogAdapter.java:146) at org.apache.commons.logging.LogAdapter$Log4jAdapter.createLog(LogAdapter.java:113) at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:95) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67) at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59) at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:202) at de.biovis.DecisionApplication.main(DecisionApplication.java:21)
当前环境:Spring Boot 3.2.5、Open JDK 17、IntelliJ 2025.2.6.1,Maven构建。
已尝试的方法
- 设置默认XML解析器:
-D javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl - 执行
mvn dependency:tree | grep xml排查XML相关传递依赖,结果如下:[INFO] | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.15.4:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.15.4:compile [INFO] | | +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.15.4:compile [INFO] | | \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.15.4:compile [INFO] | | +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.2:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-core:jar:2.15.4:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.15.4:compile [INFO] | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.15.4:compile [INFO] | | | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.15.4:compile [INFO] | | | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.15.4:compile [INFO] | \- org.jboss.spec.javax.xml.bind:jboss-jaxb-api_2.3_spec:jar:2.0.0.Final:compile [INFO] | | \- org.camunda.bpm.model:camunda-xml-model:jar:7.17.0:compile [INFO] | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.15.4:compile [INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-guava:jar:2.15.4:compile [INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.15.4:compile [INFO] | \- com.fasterxml:classmate:jar:1.6.0:compile - 调试
com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings发现配置中缺少http://apache.org/xml/features/xinclude-aware等特性,确认Log4j配置无问题,Log4j配置如下:<?xml version="1.0" encoding="UTF-8"?> <Configuration name="Worker LabEx 2"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{ISO8601}][%-5level][bc=%X{barcode}][pc=%X{profilcode}] [%C{1.}] : %msg%n%throwable" /> </Console> <RollingFile name="RollingFile" fileName="${env:LOG_FOLDER_PATH}/logs/${env:HOSTNAME}.log" filePattern="${env:LOG_FOLDER_PATH}/logs/$${date:yyyy-MM}/${env:HOSTNAME}-%d{-dd-MMMM-yyyy}-%i.log.gz"> <PatternLayout> <pattern>[%d{ISO8601}][%-5level][bc=%X{barcode}][pc=%X{profilcode}] [%C{1.}] : %msg%n%throwable</pattern> </PatternLayout> <Policies> <!-- rollover on startup, daily and when the file reaches 10 MegaBytes --> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> <TimeBasedTriggeringPolicy /> </Policies> </RollingFile> </Appenders> <Loggers> <!-- LOG everything at INFO level --> <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="RollingFile" /> </Root> <!-- LOG "de.biovis*" at TRACE level --> <Logger name="de.biovis" level="trace"/> <!--<Logger name="org.thymeleaf" level="trace"/>--> </Loggers> </Configuration>
解决方案建议
1. 禁用IntelliJ调试器的提前类加载
在Spring Boot启动配置的VM参数中添加:
-Didea.debugger.early.class.loading=false
操作路径:Run/Debug Configurations -> 目标启动配置 -> Configuration标签 -> Modify options -> Add VM options,填入上述参数。调试器提前加载XML解析类可能导致XInclude特性未正确初始化,关闭该选项可避免此问题。
2. 引入完整的Apache Xerces依赖
在pom.xml中添加完整的Xerces实现,替换JDK内置的精简版本:
<dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> </dependency>
内置Xerces在调试场景下可能存在特性缺失,完整包能确保所有XML相关特性正常加载。
3. 调整Log4j初始化时机
在启动类中提前初始化Log4j日志对象,避免类加载顺序冲突:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DecisionApplication { private static final Logger logger = LogManager.getLogger(DecisionApplication.class); public static void main(String[] args) { logger.info("Starting application..."); SpringApplication.run(DecisionApplication.class, args); } }
4. 清理IntelliJ缓存并重启
执行File -> Invalidate Caches... -> 选择Invalidate and Restart,清除调试器相关缓存,避免旧的类加载状态干扰应用启动。
内容的提问来源于stack exchange,提问作者Jan Tepke
相关产品推荐
相关产品推荐

