From f38bd7af377e7867cb7f8956631da5ebe98905f1 Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 2 Aug 2016 15:10:59 -0700 Subject: [PATCH] Extract GSON/Jackson config to inner classes Update JsonTestersAutoConfiguration so that GSON and Jackson specific configuration are inner classes. This should prevent ClassNotFound exception when the libraries are not on the classpath. Fixes gh-6502 --- .../json/JsonTestersAutoConfiguration.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/json/JsonTestersAutoConfiguration.java b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/json/JsonTestersAutoConfiguration.java index 9035bb7eb9..53e9da6e4d 100644 --- a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/json/JsonTestersAutoConfiguration.java +++ b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/json/JsonTestersAutoConfiguration.java @@ -66,27 +66,36 @@ public class JsonTestersAutoConfiguration { null); } - @Bean - @Scope("prototype") @ConditionalOnClass(ObjectMapper.class) - @ConditionalOnBean(ObjectMapper.class) - public FactoryBean> jacksonTesterFactoryBean(ObjectMapper mapper) { - return new JsonTesterFactoryBean, ObjectMapper>( - JacksonTester.class, mapper); + private static class JacksonJsonTestersConfiguration { + + @Bean + @Scope("prototype") + @ConditionalOnBean(ObjectMapper.class) + public FactoryBean> jacksonTesterFactoryBean( + ObjectMapper mapper) { + return new JsonTesterFactoryBean, ObjectMapper>( + JacksonTester.class, mapper); + } + } - @Bean - @Scope("prototype") @ConditionalOnClass(Gson.class) - @ConditionalOnBean(Gson.class) - public FactoryBean> gsonTesterFactoryBean(Gson gson) { - return new JsonTesterFactoryBean, Gson>(GsonTester.class, gson); + private static class GsonJsonTestersConfiguration { + + @Bean + @Scope("prototype") + @ConditionalOnBean(Gson.class) + public FactoryBean> gsonTesterFactoryBean(Gson gson) { + return new JsonTesterFactoryBean, Gson>(GsonTester.class, gson); + } + } /** * {@link FactoryBean} used to create JSON Tester instances. */ - private class JsonTesterFactoryBean implements FactoryBean { + private static class JsonTesterFactoryBean implements FactoryBean { private final Class objectType;