Skip to content

Commit 3ec69c1

Browse files
authored
Merge pull request #208 from cmaobeehive/#207
Fix #207 added CodeRegistry provider for Osgi servlet
2 parents 49d29ff + b8929cc commit 3ec69c1

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

src/main/java/graphql/servlet/OsgiGraphQLHttpServlet.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import graphql.servlet.core.DefaultGraphQLRootObjectBuilder;
1919
import graphql.servlet.config.DefaultGraphQLSchemaProvider;
2020
import graphql.servlet.config.ExecutionStrategyProvider;
21+
import graphql.servlet.config.GraphQLCodeRegistryProvider;
2122
import graphql.servlet.context.GraphQLContextBuilder;
2223
import graphql.servlet.core.GraphQLErrorHandler;
2324
import graphql.servlet.config.GraphQLMutationProvider;
@@ -45,6 +46,7 @@
4546
import graphql.execution.preparsed.PreparsedDocumentProvider;
4647
import graphql.schema.GraphQLObjectType;
4748
import 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
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package graphql.servlet.config;
2+
3+
import graphql.schema.GraphQLCodeRegistry;
4+
5+
public interface GraphQLCodeRegistryProvider extends GraphQLProvider {
6+
GraphQLCodeRegistry getCodeRegistry();
7+
}

src/test/groovy/graphql/servlet/OsgiGraphQLHttpServletSpec.groovy

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package graphql.servlet
22

3+
import graphql.AssertException
34
import graphql.annotations.annotationTypes.GraphQLField
45
import graphql.annotations.annotationTypes.GraphQLName
56
import graphql.annotations.processor.GraphQLAnnotations
7+
import graphql.schema.GraphQLCodeRegistry
68
import graphql.schema.GraphQLFieldDefinition
9+
import graphql.schema.GraphQLInterfaceType
10+
import graphql.servlet.config.GraphQLCodeRegistryProvider
711
import graphql.servlet.config.GraphQLMutationProvider
812
import graphql.servlet.config.GraphQLQueryProvider
913
import graphql.servlet.config.GraphQLSubscriptionProvider
@@ -122,4 +126,30 @@ class OsgiGraphQLHttpServletSpec extends Specification {
122126
then:
123127
servlet.getSchemaProvider().getSchema().getSubscriptionType() == null
124128
}
129+
130+
static class TestCodeRegistryProvider implements GraphQLCodeRegistryProvider {
131+
@Override
132+
GraphQLCodeRegistry getCodeRegistry() {
133+
return GraphQLCodeRegistry.newCodeRegistry().typeResolver("Type", { env -> null }).build();
134+
}
135+
}
136+
137+
def "code registry provider adds type resolver"() {
138+
setup:
139+
OsgiGraphQLHttpServlet servlet = new OsgiGraphQLHttpServlet()
140+
TestCodeRegistryProvider codeRegistryProvider = new TestCodeRegistryProvider()
141+
142+
when:
143+
servlet.bindCodeRegistryProvider(codeRegistryProvider)
144+
servlet.getSchemaProvider().getSchema().getCodeRegistry().getTypeResolver(GraphQLInterfaceType.newInterface().name("Type").build())
145+
then:
146+
notThrown AssertException
147+
148+
when:
149+
servlet.unbindCodeRegistryProvider(codeRegistryProvider)
150+
servlet.getSchemaProvider().getSchema().getCodeRegistry().getTypeResolver(GraphQLInterfaceType.newInterface().name("Type").build())
151+
then:
152+
thrown AssertException
153+
154+
}
125155
}

0 commit comments

Comments
 (0)