Skip to content

Commit 6fc85df

Browse files
authored
Merge pull request #442 from heowc/gh-440
Add exception handling for synchronous execution
2 parents 2a80dee + c646e9a commit 6fc85df

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

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

+22-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void execute(
4545
if (request.isAsyncSupported()) {
4646
invokeAndHandleAsync(invocationInput, request, response, listenerHandler);
4747
} else {
48-
handle(invoke(invocationInput, request, response), request, response, listenerHandler).join();
48+
handle(invocationInput, request, response, listenerHandler);
4949
}
5050
}
5151

@@ -83,7 +83,7 @@ private void invokeAndHandleAsync(
8383
try {
8484
FutureExecutionResult futureResult = invoke(invocationInput, request, response);
8585
futureHolder.set(futureResult);
86-
handle(futureResult, request, response, listenerHandler)
86+
handleInternal(futureResult, request, response, listenerHandler)
8787
.thenAccept(it -> asyncContext.complete());
8888
} catch (GraphQLException e) {
8989
response.setStatus(STATUS_BAD_REQUEST);
@@ -99,7 +99,26 @@ private void invokeAndHandleAsync(
9999
});
100100
}
101101

102-
private CompletableFuture<Void> handle(
102+
private void handle(
103+
GraphQLInvocationInput invocationInput,
104+
HttpServletRequest request,
105+
HttpServletResponse response,
106+
ListenerHandler listenerHandler) {
107+
try {
108+
FutureExecutionResult futureResult = invoke(invocationInput, request, response);
109+
handleInternal(futureResult, request, response, listenerHandler);
110+
} catch (GraphQLException e) {
111+
response.setStatus(STATUS_BAD_REQUEST);
112+
log.info("Bad request: cannot handle http request", e);
113+
listenerHandler.onError(e);
114+
} catch (Exception e) {
115+
response.setStatus(STATUS_INTERNAL_SERVER_ERROR);
116+
log.error("Cannot handle http request", e);
117+
listenerHandler.onError(e);
118+
}
119+
}
120+
121+
private CompletableFuture<Void> handleInternal(
103122
FutureExecutionResult futureResult,
104123
HttpServletRequest request,
105124
HttpServletResponse response,

0 commit comments

Comments
 (0)