From d23263619aaa3eafd5db94edf848aa7b43d63527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Tue, 24 Oct 2023 18:30:26 +0200 Subject: [PATCH] Improve exception message when configuration class parsing fails This commit improves the exception that is thrown when a particular source class cannot be parsed. Previously, the message would include the root configuration class, which may not be the class that actually failed as parsing can trigger component scan. There's now a dedicated catch that generates an exception message that includes the class that is currently parsed. Closes gh-31146 --- .../annotation/ConfigurationClassParser.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java index 2a6bae79fc5..fc7d387e561 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassParser.java @@ -238,11 +238,18 @@ class ConfigurationClassParser { } // Recursively process the configuration class and its superclass hierarchy. - SourceClass sourceClass = asSourceClass(configClass, filter); - do { - sourceClass = doProcessConfigurationClass(configClass, sourceClass, filter); + SourceClass sourceClass = null; + try { + sourceClass = asSourceClass(configClass, filter); + do { + sourceClass = doProcessConfigurationClass(configClass, sourceClass, filter); + } + while (sourceClass != null); + } + catch (IOException ex) { + throw new BeanDefinitionStoreException( + "I/O failure while processing configuration class [" + sourceClass + "]", ex); } - while (sourceClass != null); this.configurationClasses.put(configClass, configClass); }