Avoid NPE in ContextLoader when dealing with an untyped ApplicationContextInitializer

Issue: SPR-10449
(cherry picked from commit a19c976)
This commit is contained in:
Juergen Hoeller 2013-05-16 16:09:54 +02:00
parent 76f870caca
commit faa8430fd7
1 changed files with 7 additions and 6 deletions

View File

@ -470,7 +470,6 @@ public class ContextLoader {
protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext) { protected void customizeContext(ServletContext servletContext, ConfigurableWebApplicationContext applicationContext) {
List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> initializerClasses = List<Class<ApplicationContextInitializer<ConfigurableApplicationContext>>> initializerClasses =
determineContextInitializerClasses(servletContext); determineContextInitializerClasses(servletContext);
if (initializerClasses.size() == 0) { if (initializerClasses.size() == 0) {
// no ApplicationContextInitializers have been declared -> nothing to do // no ApplicationContextInitializers have been declared -> nothing to do
return; return;
@ -483,11 +482,13 @@ public class ContextLoader {
for (Class<ApplicationContextInitializer<ConfigurableApplicationContext>> initializerClass : initializerClasses) { for (Class<ApplicationContextInitializer<ConfigurableApplicationContext>> initializerClass : initializerClasses) {
Class<?> initializerContextClass = Class<?> initializerContextClass =
GenericTypeResolver.resolveTypeArgument(initializerClass, ApplicationContextInitializer.class); GenericTypeResolver.resolveTypeArgument(initializerClass, ApplicationContextInitializer.class);
Assert.isAssignable(initializerContextClass, contextClass, String.format( if (initializerContextClass != null) {
"Could not add context initializer [%s] as its generic parameter [%s] " + Assert.isAssignable(initializerContextClass, contextClass, String.format(
"is not assignable from the type of application context used by this " + "Could not add context initializer [%s] as its generic parameter [%s] " +
"context loader [%s]: ", initializerClass.getName(), initializerContextClass.getName(), "is not assignable from the type of application context used by this " +
contextClass.getName())); "context loader [%s]: ", initializerClass.getName(), initializerContextClass.getName(),
contextClass.getName()));
}
initializerInstances.add(BeanUtils.instantiateClass(initializerClass)); initializerInstances.add(BeanUtils.instantiateClass(initializerClass));
} }