From efd541d26bc40a5bdca75e2aeb4ea6a6be1ef4a3 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Fri, 27 May 2016 16:09:21 +0200 Subject: [PATCH] Check factory method metadata to avoid NPE in devtools condition Closes gh-6056 --- .../DevToolsDataSourceAutoConfiguration.java | 2 ++ ...tDevToolsDataSourceAutoConfigurationTests.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java index 6e446e38f71..006d733b7ab 100644 --- a/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java +++ b/spring-boot-devtools/src/main/java/org/springframework/boot/devtools/autoconfigure/DevToolsDataSourceAutoConfiguration.java @@ -140,6 +140,8 @@ public class DevToolsDataSourceAutoConfiguration { BeanDefinition dataSourceDefinition = context.getRegistry() .getBeanDefinition(dataSourceBeanNames[0]); if (dataSourceDefinition instanceof AnnotatedBeanDefinition + && ((AnnotatedBeanDefinition) dataSourceDefinition) + .getFactoryMethodMetadata() != null && ((AnnotatedBeanDefinition) dataSourceDefinition) .getFactoryMethodMetadata().getDeclaringClassName() .startsWith(DataSourceAutoConfiguration.class.getName())) { diff --git a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java index 61d341cb92a..0d7a29c4541 100644 --- a/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java +++ b/spring-boot-devtools/src/test/java/org/springframework/boot/devtools/autoconfigure/AbstractDevToolsDataSourceAutoConfigurationTests.java @@ -26,6 +26,7 @@ import javax.sql.DataSource; import org.junit.Test; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -72,6 +73,20 @@ public class AbstractDevToolsDataSourceAutoConfigurationTests { } } + @Test + public void emptyFactoryMethodMetadataIgnored() { + AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); + + DataSource dataSource = mock(DataSource.class); + AnnotatedGenericBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition( + dataSource.getClass()); + context.registerBeanDefinition("dataSource", beanDefinition); + context.register(DataSourcePropertiesConfiguration.class); + context.register(DevToolsDataSourceAutoConfiguration.class); + context.refresh(); + context.close(); + } + protected final Statement configureDataSourceBehaviour(DataSource dataSource) throws SQLException { Connection connection = mock(Connection.class);