Skip to content

Commit dab59c3

Browse files
zdtaylor86apottere
authored andcommitted
Added extensions to the response map as per the spec (#54)
1 parent 574d816 commit dab59c3

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

src/main/java/graphql/servlet/GraphQLServlet.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.util.Collections;
4242
import java.util.HashMap;
4343
import java.util.Iterator;
44+
import java.util.LinkedHashMap;
4445
import java.util.List;
4546
import java.util.Map;
4647
import java.util.Objects;
@@ -240,7 +241,7 @@ public String[] getMutations() {
240241
public String executeQuery(String query) {
241242
try {
242243
final ExecutionResult result = newGraphQL(getSchemaProvider().getSchema()).execute(new ExecutionInput(query, null, createContext(Optional.empty(), Optional.empty()), createRootObject(Optional.empty(), Optional.empty()), new HashMap<>()));
243-
return getMapper().writeValueAsString(createResultFromDataAndErrors(result.getData(), result.getErrors()));
244+
return getMapper().writeValueAsString(createResultFromDataErrorsAndExtensions(result.getData(), result.getErrors(), result.getExtensions()));
244245
} catch (Exception e) {
245246
return e.getMessage();
246247
}
@@ -338,33 +339,38 @@ private void query(String query, String operationName, Map<String, Object> varia
338339
final ExecutionResult executionResult = newGraphQL(schema).execute(new ExecutionInput(query, operationName, context, rootObject, variables));
339340
final List<GraphQLError> errors = executionResult.getErrors();
340341
final Object data = executionResult.getData();
342+
final Object extensions = executionResult.getExtensions();
341343

342-
final String response = getMapper().writeValueAsString(createResultFromDataAndErrors(data, errors));
344+
final String response = getMapper().writeValueAsString(createResultFromDataErrorsAndExtensions(data, errors, extensions));
343345

344346
GraphQLResponse graphQLResponse = new GraphQLResponse();
345347
graphQLResponse.setStatus(STATUS_OK);
346348
graphQLResponse.setResponse(response);
347349
responseHandler.handle(graphQLResponse);
348350

349351
if(getGraphQLErrorHandler().errorsPresent(errors)) {
350-
runCallbacks(operationCallbacks, c -> c.onError(context, operationName, query, variables, data, errors));
352+
runCallbacks(operationCallbacks, c -> c.onError(context, operationName, query, variables, data, errors, extensions));
351353
} else {
352-
runCallbacks(operationCallbacks, c -> c.onSuccess(context, operationName, query, variables, data));
354+
runCallbacks(operationCallbacks, c -> c.onSuccess(context, operationName, query, variables, data, extensions));
353355
}
354356

355-
runCallbacks(operationCallbacks, c -> c.onFinally(context, operationName, query, variables, data));
357+
runCallbacks(operationCallbacks, c -> c.onFinally(context, operationName, query, variables, data, extensions));
356358
}
357359
}
358360

359-
private Map<String, Object> createResultFromDataAndErrors(Object data, List<GraphQLError> errors) {
361+
private Map<String, Object> createResultFromDataErrorsAndExtensions(Object data, List<GraphQLError> errors, Object extensions) {
360362

361-
final Map<String, Object> result = new HashMap<>();
363+
final Map<String, Object> result = new LinkedHashMap<>();
362364
result.put("data", data);
363365

364366
if (getGraphQLErrorHandler().errorsPresent(errors)) {
365367
result.put("errors", getGraphQLErrorHandler().processErrors(errors));
366368
}
367369

370+
if(extensions != null){
371+
result.put("extensions", extensions);
372+
}
373+
368374
return result;
369375
}
370376

src/main/java/graphql/servlet/GraphQLServletListener.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ default void onFinally(HttpServletRequest request, HttpServletResponse response)
2525
}
2626

2727
interface OperationCallback {
28-
default void onSuccess(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data) {}
29-
default void onError(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data, List<GraphQLError> errors) {}
30-
default void onFinally(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data) {}
28+
default void onSuccess(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data, Object extensions) {}
29+
default void onError(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data, List<GraphQLError> errors, Object extensions) {}
30+
default void onFinally(GraphQLContext context, String operationName, String query, Map<String, Object> variables, Object data, Object extensions) {}
3131
}
3232
}

0 commit comments

Comments
 (0)