Skip to content

Commit 1d876ef

Browse files
committed
fix: handle exception in async mode fixes #403
1 parent bb276e1 commit 1d876ef

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

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

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package graphql.kickstart.servlet;
22

3+
import static graphql.kickstart.servlet.HttpRequestHandler.STATUS_BAD_REQUEST;
4+
import static graphql.kickstart.servlet.HttpRequestHandler.STATUS_INTERNAL_SERVER_ERROR;
5+
36
import graphql.ExecutionResult;
47
import graphql.ExecutionResultImpl;
8+
import graphql.GraphQLException;
59
import graphql.kickstart.execution.FutureExecutionResult;
610
import graphql.kickstart.execution.GraphQLInvoker;
711
import graphql.kickstart.execution.GraphQLQueryResult;
@@ -76,10 +80,22 @@ private void invokeAndHandleAsync(
7680
.getAsyncExecutor()
7781
.execute(
7882
() -> {
79-
FutureExecutionResult futureResult = invoke(invocationInput, request, response);
80-
futureHolder.set(futureResult);
81-
handle(futureResult, request, response, listenerHandler)
82-
.thenAccept(it -> asyncContext.complete());
83+
try {
84+
FutureExecutionResult futureResult = invoke(invocationInput, request, response);
85+
futureHolder.set(futureResult);
86+
handle(futureResult, request, response, listenerHandler)
87+
.thenAccept(it -> asyncContext.complete());
88+
} catch (GraphQLException e) {
89+
response.setStatus(STATUS_BAD_REQUEST);
90+
log.info("Bad request: cannot handle http request", e);
91+
listenerHandler.onError(e);
92+
asyncContext.complete();
93+
} catch (Exception e) {
94+
response.setStatus(STATUS_INTERNAL_SERVER_ERROR);
95+
log.error("Cannot handle http request", e);
96+
listenerHandler.onError(e);
97+
asyncContext.complete();
98+
}
8399
});
84100
}
85101

0 commit comments

Comments
 (0)