2525 * @author Andrew Potter
2626 */
2727public class GraphQLObjectMapper {
28- private final Supplier < ObjectMapperConfigurer > objectMapperConfigurerSupplier ;
28+ private final ObjectMapperProvider objectMapperProvider ;
2929 private final Supplier <GraphQLErrorHandler > graphQLErrorHandlerSupplier ;
3030
3131 private volatile ObjectMapper mapper ;
3232
33- protected GraphQLObjectMapper (Supplier < ObjectMapperConfigurer > objectMapperConfigurerSupplier , Supplier <GraphQLErrorHandler > graphQLErrorHandlerSupplier ) {
34- this .objectMapperConfigurerSupplier = objectMapperConfigurerSupplier ;
33+ protected GraphQLObjectMapper (ObjectMapperProvider objectMapperProvider , Supplier <GraphQLErrorHandler > graphQLErrorHandlerSupplier ) {
34+ this .objectMapperProvider = objectMapperProvider ;
3535 this .graphQLErrorHandlerSupplier = graphQLErrorHandlerSupplier ;
3636 }
3737
@@ -42,24 +42,13 @@ public ObjectMapper getJacksonMapper() {
4242 synchronized (this ) {
4343 result = mapper ;
4444 if (result == null ) // Second check (with locking)
45- mapper = result = createObjectMapper ();
45+ mapper = result = objectMapperProvider . provide ();
4646 }
4747 }
4848
4949 return result ;
5050 }
5151
52- private ObjectMapper createObjectMapper () {
53- ObjectMapper mapper = new ObjectMapper ().disable (SerializationFeature .FAIL_ON_EMPTY_BEANS ).registerModule (new Jdk8Module ());
54- objectMapperConfigurerSupplier .get ().configure (mapper );
55-
56- InjectableValues .Std injectableValues = new InjectableValues .Std ();
57- injectableValues .addValue (ObjectMapper .class , mapper );
58- mapper .setInjectableValues (injectableValues );
59-
60- return mapper ;
61- }
62-
6352 /**
6453 * @return an {@link ObjectReader} for deserializing {@link GraphQLRequest}
6554 */
@@ -163,15 +152,20 @@ public static Builder newBuilder() {
163152 }
164153
165154 public static class Builder {
166- private Supplier < ObjectMapperConfigurer > objectMapperConfigurer = DefaultObjectMapperConfigurer :: new ;
155+ private ObjectMapperProvider objectMapperProvider = new ConfiguringObjectMapperProvider () ;
167156 private Supplier <GraphQLErrorHandler > graphQLErrorHandler = DefaultGraphQLErrorHandler ::new ;
168157
169158 public Builder withObjectMapperConfigurer (ObjectMapperConfigurer objectMapperConfigurer ) {
170159 return withObjectMapperConfigurer (() -> objectMapperConfigurer );
171160 }
172161
173162 public Builder withObjectMapperConfigurer (Supplier <ObjectMapperConfigurer > objectMapperConfigurer ) {
174- this .objectMapperConfigurer = objectMapperConfigurer ;
163+ this .objectMapperProvider = new ConfiguringObjectMapperProvider (objectMapperConfigurer .get ());
164+ return this ;
165+ }
166+
167+ public Builder withObjectMapperProvider (ObjectMapperProvider objectMapperProvider ) {
168+ this .objectMapperProvider = objectMapperProvider ;
175169 return this ;
176170 }
177171
@@ -185,7 +179,7 @@ public Builder withGraphQLErrorHandler(Supplier<GraphQLErrorHandler> graphQLErro
185179 }
186180
187181 public GraphQLObjectMapper build () {
188- return new GraphQLObjectMapper (objectMapperConfigurer , graphQLErrorHandler );
182+ return new GraphQLObjectMapper (objectMapperProvider , graphQLErrorHandler );
189183 }
190184 }
191185}
0 commit comments