Provide dedicated AOT exception hierarchy
This commit adds a number of catch point that provides additional context when an AOT processor fails to execute. Amongst other things, this makes sure that the bean name and its descriptor is consistently provided in the error message when available. Closes gh-32777
This commit is contained in:
@@ -21,11 +21,14 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.aot.generate.GenerationContext;
|
||||
import org.springframework.beans.factory.aot.AotException;
|
||||
import org.springframework.beans.factory.aot.AotProcessingException;
|
||||
import org.springframework.beans.factory.aot.AotServices;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor;
|
||||
import org.springframework.beans.factory.aot.BeanFactoryInitializationCode;
|
||||
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
/**
|
||||
* A collection of {@link BeanFactoryInitializationAotContribution AOT
|
||||
@@ -63,8 +66,7 @@ class BeanFactoryInitializationAotContributions {
|
||||
List<BeanFactoryInitializationAotProcessor> processors) {
|
||||
List<BeanFactoryInitializationAotContribution> contributions = new ArrayList<>();
|
||||
for (BeanFactoryInitializationAotProcessor processor : processors) {
|
||||
BeanFactoryInitializationAotContribution contribution = processor
|
||||
.processAheadOfTime(beanFactory);
|
||||
BeanFactoryInitializationAotContribution contribution = processAheadOfTime(processor, beanFactory);
|
||||
if (contribution != null) {
|
||||
contributions.add(contribution);
|
||||
}
|
||||
@@ -72,6 +74,22 @@ class BeanFactoryInitializationAotContributions {
|
||||
return Collections.unmodifiableList(contributions);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private BeanFactoryInitializationAotContribution processAheadOfTime(BeanFactoryInitializationAotProcessor processor,
|
||||
DefaultListableBeanFactory beanFactory) {
|
||||
|
||||
try {
|
||||
return processor.processAheadOfTime(beanFactory);
|
||||
}
|
||||
catch (AotException ex) {
|
||||
throw ex;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
throw new AotProcessingException("Error executing '" +
|
||||
processor.getClass().getName() + "': " + ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
void applyTo(GenerationContext generationContext,
|
||||
BeanFactoryInitializationCode beanFactoryInitializationCode) {
|
||||
for (BeanFactoryInitializationAotContribution contribution : this.contributions) {
|
||||
|
||||
Reference in New Issue
Block a user