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
This commit is contained in:
Phillip Webb 2016-08-02 15:10:59 -07:00
parent 80a1897ccb
commit f38bd7af37
1 changed files with 21 additions and 12 deletions

View File

@ -66,27 +66,36 @@ public class JsonTestersAutoConfiguration {
null);
}
@Bean
@Scope("prototype")
@ConditionalOnClass(ObjectMapper.class)
@ConditionalOnBean(ObjectMapper.class)
public FactoryBean<JacksonTester<?>> jacksonTesterFactoryBean(ObjectMapper mapper) {
return new JsonTesterFactoryBean<JacksonTester<?>, ObjectMapper>(
JacksonTester.class, mapper);
private static class JacksonJsonTestersConfiguration {
@Bean
@Scope("prototype")
@ConditionalOnBean(ObjectMapper.class)
public FactoryBean<JacksonTester<?>> jacksonTesterFactoryBean(
ObjectMapper mapper) {
return new JsonTesterFactoryBean<JacksonTester<?>, ObjectMapper>(
JacksonTester.class, mapper);
}
}
@Bean
@Scope("prototype")
@ConditionalOnClass(Gson.class)
@ConditionalOnBean(Gson.class)
public FactoryBean<GsonTester<?>> gsonTesterFactoryBean(Gson gson) {
return new JsonTesterFactoryBean<GsonTester<?>, Gson>(GsonTester.class, gson);
private static class GsonJsonTestersConfiguration {
@Bean
@Scope("prototype")
@ConditionalOnBean(Gson.class)
public FactoryBean<GsonTester<?>> gsonTesterFactoryBean(Gson gson) {
return new JsonTesterFactoryBean<GsonTester<?>, Gson>(GsonTester.class, gson);
}
}
/**
* {@link FactoryBean} used to create JSON Tester instances.
*/
private class JsonTesterFactoryBean<T, M> implements FactoryBean<T> {
private static class JsonTesterFactoryBean<T, M> implements FactoryBean<T> {
private final Class<?> objectType;