1818import graphql .servlet .core .DefaultGraphQLRootObjectBuilder ;
1919import graphql .servlet .config .DefaultGraphQLSchemaProvider ;
2020import graphql .servlet .config .ExecutionStrategyProvider ;
21+ import graphql .servlet .config .GraphQLCodeRegistryProvider ;
2122import graphql .servlet .context .GraphQLContextBuilder ;
2223import graphql .servlet .core .GraphQLErrorHandler ;
2324import graphql .servlet .config .GraphQLMutationProvider ;
4546import graphql .execution .preparsed .PreparsedDocumentProvider ;
4647import graphql .schema .GraphQLObjectType ;
4748import graphql .schema .GraphQLType ;
49+ import graphql .schema .GraphQLCodeRegistry ;
4850
4951@ Component (
5052 service ={javax .servlet .http .HttpServlet .class ,javax .servlet .Servlet .class },
@@ -67,6 +69,7 @@ public class OsgiGraphQLHttpServlet extends AbstractGraphQLHttpServlet {
6769 private InstrumentationProvider instrumentationProvider = new NoOpInstrumentationProvider ();
6870 private GraphQLErrorHandler errorHandler = new DefaultGraphQLErrorHandler ();
6971 private PreparsedDocumentProvider preparsedDocumentProvider = NoOpPreparsedDocumentProvider .INSTANCE ;
72+ private GraphQLCodeRegistryProvider codeRegistryProvider = () -> GraphQLCodeRegistry .newCodeRegistry ().build ();
7073
7174 private GraphQLSchemaProvider schemaProvider ;
7275
@@ -191,6 +194,7 @@ private void doUpdateSchema() {
191194 .mutation (mutationType )
192195 .subscription (subscriptionType )
193196 .additionalTypes (types )
197+ .codeRegistry (codeRegistryProvider .getCodeRegistry ())
194198 .build ());
195199 }
196200
@@ -208,6 +212,9 @@ public void bindProvider(GraphQLProvider provider) {
208212 if (provider instanceof GraphQLTypesProvider ) {
209213 typesProviders .add ((GraphQLTypesProvider ) provider );
210214 }
215+ if (provider instanceof GraphQLCodeRegistryProvider ) {
216+ codeRegistryProvider = (GraphQLCodeRegistryProvider ) provider ;
217+ }
211218 updateSchema ();
212219 }
213220 public void unbindProvider (GraphQLProvider provider ) {
@@ -223,6 +230,9 @@ public void unbindProvider(GraphQLProvider provider) {
223230 if (provider instanceof GraphQLTypesProvider ) {
224231 typesProviders .remove (provider );
225232 }
233+ if (provider instanceof GraphQLCodeRegistryProvider ) {
234+ codeRegistryProvider = () -> GraphQLCodeRegistry .newCodeRegistry ().build ();
235+ }
226236 updateSchema ();
227237 }
228238
@@ -322,6 +332,16 @@ public void unsetPreparsedDocumentProvider(PreparsedDocumentProvider preparsedDo
322332 this .preparsedDocumentProvider = NoOpPreparsedDocumentProvider .INSTANCE ;
323333 }
324334
335+ @ Reference (cardinality = ReferenceCardinality .OPTIONAL , policy = ReferencePolicy .DYNAMIC , policyOption = ReferencePolicyOption .GREEDY )
336+ public void bindCodeRegistryProvider (GraphQLCodeRegistryProvider graphQLCodeRegistryProvider ) {
337+ this .codeRegistryProvider = graphQLCodeRegistryProvider ;
338+ updateSchema ();
339+ }
340+ public void unbindCodeRegistryProvider (GraphQLCodeRegistryProvider graphQLCodeRegistryProvider ) {
341+ this .codeRegistryProvider = () -> GraphQLCodeRegistry .newCodeRegistry ().build ();
342+ updateSchema ();
343+ }
344+
325345 public GraphQLContextBuilder getContextBuilder () {
326346 return contextBuilder ;
327347 }
0 commit comments