Skip to content

Commit d0b0493

Browse files
committed
Update graphql-java-servlet to support graphql-java 16.
This is a breaking change that makes library incompatible with prior versions of graphql-java.
1 parent d941118 commit d0b0493

File tree

13 files changed

+29
-197
lines changed

13 files changed

+29
-197
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ subprojects {
7171
compileJava.dependsOn(processResources)
7272

7373
lombok {
74-
version = "1.18.4"
74+
version = "1.18.16"
7575
sha256 = ""
7676
}
7777

gradle.properties

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version=10.1.0-SNAPSHOT
1+
version=11.0.0-SNAPSHOT
22
group=com.graphql-java-kickstart
33
PROJECT_NAME=graphql-java-servlet
44
PROJECT_DESC=GraphQL Java Kickstart
@@ -7,8 +7,9 @@ PROJECT_LICENSE=MIT
77
PROJECT_LICENSE_URL=https://github.com/graphql-java-kickstart/spring-boot-graphql/blob/master/LICENSE.md
88
PROJECT_DEV_ID=apottere
99
PROJECT_DEV_NAME=Andrew Potter
10-
LIB_GRAPHQL_JAVA_VER=15.0
11-
LIB_JACKSON_VER=2.10.0
10+
LIB_GRAPHQL_JAVA_VER=16.0
11+
LIB_JACKSON_VER=2.12.0
12+
LIB_SLF4J_VER=1.7.30
1213
SOURCE_COMPATIBILITY=1.8
1314
TARGET_COMPATIBILITY=1.8
14-
GRADLE_WRAPPER_VER=6.0.1
15+
GRADLE_WRAPPER_VER=6.7.1

graphql-java-kickstart/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ jar {
77
dependencies {
88
// GraphQL
99
compile "com.graphql-java:graphql-java:$LIB_GRAPHQL_JAVA_VER"
10+
implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER"
1011

1112
// JSON
1213
compile "com.fasterxml.jackson.core:jackson-core:$LIB_JACKSON_VER"

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/DecoratedExecutionResult.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,7 @@ class DecoratedExecutionResult implements ExecutionResult {
1414
private final ExecutionResult result;
1515

1616
boolean isAsynchronous() {
17-
return result.getData() instanceof Publisher || isDeferred();
18-
}
19-
20-
private boolean isDeferred() {
21-
return result.getExtensions() != null && result.getExtensions()
22-
.containsKey(GraphQL.DEFERRED_RESULTS);
17+
return result.getData() instanceof Publisher;
2318
}
2419

2520
@Override

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/GraphQLObjectMapper.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
import com.fasterxml.jackson.databind.MappingIterator;
88
import com.fasterxml.jackson.databind.ObjectMapper;
99
import com.fasterxml.jackson.databind.ObjectReader;
10-
import graphql.DeferredExecutionResult;
11-
import graphql.DeferredExecutionResultImpl;
1210
import graphql.ExecutionResult;
1311
import graphql.ExecutionResultImpl;
1412
import graphql.GraphQLError;
15-
import graphql.execution.ExecutionPath;
13+
import graphql.execution.ResultPath;
1614
import graphql.kickstart.execution.config.ConfiguringObjectMapperProvider;
1715
import graphql.kickstart.execution.config.GraphQLServletObjectMapperConfigurer;
1816
import graphql.kickstart.execution.config.ObjectMapperProvider;
@@ -137,13 +135,6 @@ public ExecutionResult sanitizeErrors(ExecutionResult executionResult) {
137135

138136
public Map<String, Object> createResultFromExecutionResult(ExecutionResult executionResult) {
139137
ExecutionResult sanitizedExecutionResult = sanitizeErrors(executionResult);
140-
if (executionResult instanceof DeferredExecutionResult) {
141-
sanitizedExecutionResult = DeferredExecutionResultImpl
142-
.newDeferredExecutionResult()
143-
.from(executionResult)
144-
.path(ExecutionPath.fromList(((DeferredExecutionResult) executionResult).getPath()))
145-
.build();
146-
}
147138
return convertSanitizedExecutionResult(sanitizedExecutionResult);
148139
}
149140

@@ -168,10 +159,6 @@ public Map<String, Object> convertSanitizedExecutionResult(ExecutionResult execu
168159
result.put("data", executionResult.getData());
169160
}
170161

171-
if (executionResult instanceof DeferredExecutionResult) {
172-
result.put("path", ((DeferredExecutionResult) executionResult).getPath());
173-
}
174-
175162
return result;
176163
}
177164

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/AbstractTrackingApproach.java

Lines changed: 3 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@
22

33
import graphql.ExecutionResult;
44
import graphql.execution.ExecutionId;
5-
import graphql.execution.ExecutionPath;
65
import graphql.execution.FieldValueInfo;
76
import graphql.execution.MergedField;
8-
import graphql.execution.instrumentation.DeferredFieldInstrumentationContext;
7+
import graphql.execution.ResultPath;
98
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
109
import graphql.execution.instrumentation.InstrumentationContext;
11-
import graphql.execution.instrumentation.parameters.InstrumentationDeferredFieldParameters;
1210
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
1311
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters;
1412
import java.util.Collections;
@@ -42,7 +40,7 @@ protected RequestStack getStack() {
4240
public ExecutionStrategyInstrumentationContext beginExecutionStrategy(
4341
InstrumentationExecutionStrategyParameters parameters) {
4442
ExecutionId executionId = parameters.getExecutionContext().getExecutionId();
45-
ExecutionPath path = parameters.getExecutionStrategyParameters().getPath();
43+
ResultPath path = parameters.getExecutionStrategyParameters().getPath();
4644
int parentLevel = path.getLevel();
4745
int curLevel = parentLevel + 1;
4846
int fieldCount = parameters.getExecutionStrategyParameters().getFields().size();
@@ -72,18 +70,6 @@ public void onFieldValuesInfo(List<FieldValueInfo> fieldValueInfoList) {
7270
}
7371
}
7472
}
75-
76-
@Override
77-
public void onDeferredField(MergedField field) {
78-
// fake fetch count for this field
79-
synchronized (stack) {
80-
stack.increaseFetchCount(executionId, curLevel);
81-
stack.setStatus(executionId, dispatchIfNeeded(stack, executionId, curLevel));
82-
if (stack.allReady()) {
83-
dispatchWithoutLocking();
84-
}
85-
}
86-
}
8773
};
8874
}
8975

@@ -118,44 +104,11 @@ private int getCountForList(FieldValueInfo fieldValueInfo) {
118104
return result;
119105
}
120106

121-
@Override
122-
public DeferredFieldInstrumentationContext beginDeferredField(
123-
InstrumentationDeferredFieldParameters parameters) {
124-
ExecutionId executionId = parameters.getExecutionContext().getExecutionId();
125-
int level = parameters.getExecutionStrategyParameters().getPath().getLevel();
126-
synchronized (stack) {
127-
stack.clearAndMarkCurrentLevelAsReady(executionId, level);
128-
}
129-
130-
return new DeferredFieldInstrumentationContext() {
131-
@Override
132-
public void onDispatched(CompletableFuture<ExecutionResult> result) {
133-
134-
}
135-
136-
@Override
137-
public void onCompleted(ExecutionResult result, Throwable t) {
138-
}
139-
140-
@Override
141-
public void onFieldValueInfo(FieldValueInfo fieldValueInfo) {
142-
synchronized (stack) {
143-
stack.setStatus(executionId,
144-
handleOnFieldValuesInfo(Collections.singletonList(fieldValueInfo), stack, executionId,
145-
level));
146-
if (stack.allReady()) {
147-
dispatchWithoutLocking();
148-
}
149-
}
150-
}
151-
};
152-
}
153-
154107
@Override
155108
public InstrumentationContext<Object> beginFieldFetch(
156109
InstrumentationFieldFetchParameters parameters) {
157110
ExecutionId executionId = parameters.getExecutionContext().getExecutionId();
158-
ExecutionPath path = parameters.getEnvironment().getExecutionStepInfo().getPath();
111+
ResultPath path = parameters.getEnvironment().getExecutionStepInfo().getPath();
159112
int level = path.getLevel();
160113
return new InstrumentationContext<Object>() {
161114

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/ConfigurableDispatchInstrumentation.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,13 @@
55
import graphql.execution.AsyncExecutionStrategy;
66
import graphql.execution.ExecutionContext;
77
import graphql.execution.ExecutionStrategy;
8-
import graphql.execution.instrumentation.DeferredFieldInstrumentationContext;
98
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
109
import graphql.execution.instrumentation.InstrumentationContext;
1110
import graphql.execution.instrumentation.InstrumentationState;
1211
import graphql.execution.instrumentation.SimpleInstrumentationContext;
1312
import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation;
1413
import graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentationOptions;
1514
import graphql.execution.instrumentation.parameters.InstrumentationCreateStateParameters;
16-
import graphql.execution.instrumentation.parameters.InstrumentationDeferredFieldParameters;
1715
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters;
1816
import graphql.execution.instrumentation.parameters.InstrumentationExecutionParameters;
1917
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
@@ -134,28 +132,6 @@ public void onCompleted(ExecutionResult result, Throwable t) {
134132
return state.getApproach().beginExecutionStrategy(parameters);
135133
}
136134

137-
@Override
138-
public DeferredFieldInstrumentationContext beginDeferredField(
139-
InstrumentationDeferredFieldParameters parameters) {
140-
DataLoaderDispatcherInstrumentationState state = parameters.getInstrumentationState();
141-
//
142-
// if there are no data loaders, there is nothing to do
143-
//
144-
if (state.hasNoDataLoaders()) {
145-
return new DeferredFieldInstrumentationContext() {
146-
@Override
147-
public void onDispatched(CompletableFuture<ExecutionResult> result) {
148-
}
149-
150-
@Override
151-
public void onCompleted(ExecutionResult result, Throwable t) {
152-
}
153-
};
154-
155-
}
156-
return state.getApproach().beginDeferredField(parameters);
157-
}
158-
159135
@Override
160136
public InstrumentationContext<Object> beginFieldFetch(
161137
InstrumentationFieldFetchParameters parameters) {

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/instrumentation/TrackingApproach.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package graphql.kickstart.execution.instrumentation;
22

33
import graphql.execution.ExecutionId;
4-
import graphql.execution.instrumentation.DeferredFieldInstrumentationContext;
54
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext;
65
import graphql.execution.instrumentation.InstrumentationContext;
76
import graphql.execution.instrumentation.InstrumentationState;
8-
import graphql.execution.instrumentation.parameters.InstrumentationDeferredFieldParameters;
97
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters;
108
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters;
119

@@ -33,15 +31,6 @@ public interface TrackingApproach extends InstrumentationState {
3331
ExecutionStrategyInstrumentationContext beginExecutionStrategy(
3432
InstrumentationExecutionStrategyParameters parameters);
3533

36-
/**
37-
* Handles approach specific logic for DataLoaderDispatcherInstrumentation.
38-
*
39-
* @param parameters parameters supplied to DataLoaderDispatcherInstrumentation
40-
* @return the instrumented context
41-
*/
42-
DeferredFieldInstrumentationContext beginDeferredField(
43-
InstrumentationDeferredFieldParameters parameters);
44-
4534
/**
4635
* Handles approach specific logic for DataLoaderDispatcherInstrumentation.
4736
*

graphql-java-servlet/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ dependencies {
1919
// Servlet
2020
compile 'javax.servlet:javax.servlet-api:3.1.0'
2121
compile 'javax.websocket:javax.websocket-api:1.1'
22+
implementation "org.slf4j:slf4j-api:$LIB_SLF4J_VER"
2223

2324
// OSGi
2425
compileOnly 'org.osgi:org.osgi.core:6.0.0'
@@ -35,7 +36,7 @@ dependencies {
3536
testCompile "org.spockframework:spock-core:1.1-groovy-2.4-rc-3"
3637
testRuntime "cglib:cglib-nodep:3.2.4"
3738
testRuntime "org.objenesis:objenesis:2.5.1"
38-
testCompile 'org.slf4j:slf4j-simple:1.7.24'
39+
testCompile "org.slf4j:slf4j-simple:$LIB_SLF4J_VER"
3940
testCompile 'org.springframework:spring-test:4.3.7.RELEASE'
4041
testRuntime 'org.springframework:spring-web:4.3.7.RELEASE'
4142
testCompile 'com.google.guava:guava:24.1.1-jre'

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

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static graphql.schema.GraphQLObjectType.newObject;
44
import static graphql.schema.GraphQLSchema.newSchema;
55

6+
import graphql.Scalars;
67
import graphql.execution.preparsed.NoOpPreparsedDocumentProvider;
78
import graphql.execution.preparsed.PreparsedDocumentProvider;
89
import graphql.kickstart.execution.GraphQLObjectMapper;
@@ -29,6 +30,7 @@
2930
import graphql.kickstart.servlet.osgi.GraphQLSubscriptionProvider;
3031
import graphql.kickstart.servlet.osgi.GraphQLTypesProvider;
3132
import graphql.schema.GraphQLCodeRegistry;
33+
import graphql.schema.GraphQLFieldDefinition;
3234
import graphql.schema.GraphQLObjectType;
3335
import graphql.schema.GraphQLType;
3436
import java.util.ArrayList;
@@ -153,10 +155,20 @@ private void doUpdateSchema() {
153155
final GraphQLObjectType.Builder queryTypeBuilder = newObject().name("Query")
154156
.description("Root query type");
155157

156-
for (GraphQLQueryProvider provider : queryProviders) {
157-
if (provider.getQueries() != null && !provider.getQueries().isEmpty()) {
158-
provider.getQueries().forEach(queryTypeBuilder::field);
158+
if (!queryProviders.isEmpty()) {
159+
for (GraphQLQueryProvider provider : queryProviders) {
160+
if (provider.getQueries() != null && !provider.getQueries().isEmpty()) {
161+
provider.getQueries().forEach(queryTypeBuilder::field);
162+
}
159163
}
164+
} else {
165+
// graphql-java enforces Query type to be there with at least some field.
166+
queryTypeBuilder.field(
167+
GraphQLFieldDefinition
168+
.newFieldDefinition()
169+
.name("_empty")
170+
.type(Scalars.GraphQLBoolean)
171+
.build());
160172
}
161173

162174
final Set<GraphQLType> types = new HashSet<>();

0 commit comments

Comments
 (0)