From e6a5932fad892462d13f07634338d87a72c81230 Mon Sep 17 00:00:00 2001 From: heowc Date: Tue, 3 May 2022 22:53:56 +0900 Subject: [PATCH 1/2] Add exception handling for synchronous execution --- .../servlet/HttpRequestInvokerImpl.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java index 1b58c8ba..8448c799 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java @@ -45,7 +45,7 @@ public void execute( if (request.isAsyncSupported()) { invokeAndHandleAsync(invocationInput, request, response, listenerHandler); } else { - handle(invoke(invocationInput, request, response), request, response, listenerHandler).join(); + handle(invocationInput, request, response, listenerHandler); } } @@ -83,7 +83,7 @@ private void invokeAndHandleAsync( try { FutureExecutionResult futureResult = invoke(invocationInput, request, response); futureHolder.set(futureResult); - handle(futureResult, request, response, listenerHandler) + handle0(futureResult, request, response, listenerHandler) .thenAccept(it -> asyncContext.complete()); } catch (GraphQLException e) { response.setStatus(STATUS_BAD_REQUEST); @@ -99,7 +99,26 @@ private void invokeAndHandleAsync( }); } - private CompletableFuture handle( + private void handle( + GraphQLInvocationInput invocationInput, + HttpServletRequest request, + HttpServletResponse response, + ListenerHandler listenerHandler) { + try { + FutureExecutionResult futureResult = invoke(invocationInput, request, response); + handle0(futureResult, request, response, listenerHandler); + } catch (GraphQLException e) { + response.setStatus(STATUS_BAD_REQUEST); + log.info("Bad request: cannot handle http request", e); + listenerHandler.onError(e); + } catch (Exception e) { + response.setStatus(STATUS_INTERNAL_SERVER_ERROR); + log.error("Cannot handle http request", e); + listenerHandler.onError(e); + } + } + + private CompletableFuture handle0( FutureExecutionResult futureResult, HttpServletRequest request, HttpServletResponse response, From c646e9a0acb6d2591b4b5f6ed8d40538aa457b0e Mon Sep 17 00:00:00 2001 From: WonChul Heo Date: Wed, 25 May 2022 15:38:38 +0900 Subject: [PATCH 2/2] Rename method --- .../graphql/kickstart/servlet/HttpRequestInvokerImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java index 8448c799..64768fa1 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/HttpRequestInvokerImpl.java @@ -83,7 +83,7 @@ private void invokeAndHandleAsync( try { FutureExecutionResult futureResult = invoke(invocationInput, request, response); futureHolder.set(futureResult); - handle0(futureResult, request, response, listenerHandler) + handleInternal(futureResult, request, response, listenerHandler) .thenAccept(it -> asyncContext.complete()); } catch (GraphQLException e) { response.setStatus(STATUS_BAD_REQUEST); @@ -106,7 +106,7 @@ private void handle( ListenerHandler listenerHandler) { try { FutureExecutionResult futureResult = invoke(invocationInput, request, response); - handle0(futureResult, request, response, listenerHandler); + handleInternal(futureResult, request, response, listenerHandler); } catch (GraphQLException e) { response.setStatus(STATUS_BAD_REQUEST); log.info("Bad request: cannot handle http request", e); @@ -118,7 +118,7 @@ private void handle( } } - private CompletableFuture handle0( + private CompletableFuture handleInternal( FutureExecutionResult futureResult, HttpServletRequest request, HttpServletResponse response,