From f6d266503635397ad178c5e70ac489048501a661 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 8 Sep 2020 14:31:47 -0400 Subject: [PATCH 1/5] Added error logging and error messaging response when errors occur --- gradle.properties | 2 +- .../subscriptions/DefaultSubscriptionSession.java | 4 ++-- .../execution/subscriptions/SessionSubscriber.java | 12 +++++++++++- .../execution/subscriptions/SubscriptionSession.java | 2 +- .../apollo/ApolloSubscriptionSession.java | 4 ++-- .../subscriptions/WebSocketSendSubscriber.java | 2 +- 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index 95005284..57752b40 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 9.2.0-SNAPSHOT +version = 9.2.1-SNAPSHOT group = com.graphql-java-kickstart PROJECT_NAME = graphql-java-servlet diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/DefaultSubscriptionSession.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/DefaultSubscriptionSession.java index c8f17cf2..8073a302 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/DefaultSubscriptionSession.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/DefaultSubscriptionSession.java @@ -53,8 +53,8 @@ public void sendDataMessage(String id, Object payload) { } @Override - public void sendErrorMessage(String id) { - + public void sendErrorMessage(String id, Object payload) { + send(mapper.serialize(payload)); } @Override diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SessionSubscriber.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SessionSubscriber.java index 12cfa157..0dcc2140 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SessionSubscriber.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SessionSubscriber.java @@ -1,8 +1,13 @@ package graphql.kickstart.execution.subscriptions; import graphql.ExecutionResult; + +import java.util.Collections; import java.util.HashMap; import java.util.Map; + +import graphql.GraphQLError; +import graphql.kickstart.execution.error.GenericGraphQLError; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.reactivestreams.Subscriber; @@ -29,6 +34,7 @@ public void onSubscribe(Subscription subscription) { public void onNext(ExecutionResult executionResult) { Map result = new HashMap<>(); result.put("data", executionResult.getData()); + session.sendDataMessage(id, result); subscriptionReference.get().request(1); } @@ -36,8 +42,12 @@ public void onNext(ExecutionResult executionResult) { @Override public void onError(Throwable throwable) { log.error("Subscription error", throwable); + + Map payload = new HashMap<>(); + payload.put("errors", Collections.singletonList(new GenericGraphQLError(throwable.getMessage()))); + session.unsubscribe(id); - session.sendErrorMessage(id); + session.sendErrorMessage(id, payload); } @Override diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SubscriptionSession.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SubscriptionSession.java index 6b45e51a..a68a29a2 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SubscriptionSession.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/SubscriptionSession.java @@ -19,7 +19,7 @@ public interface SubscriptionSession { void sendDataMessage(String id, Object payload); - void sendErrorMessage(String id); + void sendErrorMessage(String id, Object payload); void sendCompleteMessage(String id); diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionSession.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionSession.java index db1918d6..871321d2 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionSession.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionSession.java @@ -18,8 +18,8 @@ public void sendDataMessage(String id, Object payload) { } @Override - public void sendErrorMessage(String id) { - sendMessage(new OperationMessage(Type.GQL_ERROR, id, null)); + public void sendErrorMessage(String id, Object payload) { + sendMessage(new OperationMessage(Type.GQL_ERROR, id, payload)); } @Override diff --git a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java index a7dec57b..44e819f4 100644 --- a/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java +++ b/graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/WebSocketSendSubscriber.java @@ -35,7 +35,7 @@ public void onNext(String message) { @Override public void onError(Throwable t) { - + log.error("WebSocket error", t); } @Override From 5e079983570c0004f214b705bc3eec65d059fcfa Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 21 Sep 2020 15:48:03 -0400 Subject: [PATCH 2/5] Added support to show errors when connection initialization fails for any reason. Also fixed bug on JSON processing exception that was not being properly reported --- gradle.properties | 2 +- .../subscriptions/apollo/ApolloSubscriptionConsumer.java | 2 +- .../subscriptions/apollo/SubscriptionConnectionInitCommand.java | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 57752b40..2b44fb33 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 9.2.1-SNAPSHOT +version = 9.2.1.001-SNAPSHOT group = com.graphql-java-kickstart PROJECT_NAME = graphql-java-servlet diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java index a7860494..d06edf91 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java @@ -23,7 +23,7 @@ public void accept(String request) { SubscriptionCommand command = commandProvider.getByType(message.getType()); command.apply(session, message); } catch (JsonProcessingException e) { - log.error("Cannot read subscription command '{}'", request, e); + log.error("Cannot read subscription command '{}': {}", request, e); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ERROR, null, e.getMessage())); } } diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java index 3d666ec7..d789d30c 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java @@ -19,6 +19,7 @@ public void apply(SubscriptionSession session, OperationMessage message) { connectionListeners.forEach(it -> it.onConnect(session, message)); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ACK, message.getId(), null)); } catch (Throwable t) { + log.error("Cannot initialize subscription command '{}': {}", message, t); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ERROR, message.getId(), t.getMessage())); } } From 7f538f785554b1599359bd628e9328425359df48 Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Tue, 6 Oct 2020 00:25:19 -0400 Subject: [PATCH 3/5] Update gradle.properties --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2b44fb33..95005284 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version = 9.2.1.001-SNAPSHOT +version = 9.2.0-SNAPSHOT group = com.graphql-java-kickstart PROJECT_NAME = graphql-java-servlet From 463fe454171ef3b597d7e24b5a15646469db0ff7 Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Fri, 18 Dec 2020 10:18:03 +0100 Subject: [PATCH 4/5] Print stack trace instead of adding to log message --- .../subscriptions/apollo/ApolloSubscriptionConsumer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java index d06edf91..a7860494 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/ApolloSubscriptionConsumer.java @@ -23,7 +23,7 @@ public void accept(String request) { SubscriptionCommand command = commandProvider.getByType(message.getType()); command.apply(session, message); } catch (JsonProcessingException e) { - log.error("Cannot read subscription command '{}': {}", request, e); + log.error("Cannot read subscription command '{}'", request, e); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ERROR, null, e.getMessage())); } } From 29fc998ce02c4943daab3ffb239a61b73feddafd Mon Sep 17 00:00:00 2001 From: Michiel Oliemans Date: Fri, 18 Dec 2020 10:18:26 +0100 Subject: [PATCH 5/5] Print stack trace instead of adding to log message --- .../subscriptions/apollo/SubscriptionConnectionInitCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java index d789d30c..e58f0a44 100644 --- a/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java +++ b/graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionConnectionInitCommand.java @@ -19,7 +19,7 @@ public void apply(SubscriptionSession session, OperationMessage message) { connectionListeners.forEach(it -> it.onConnect(session, message)); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ACK, message.getId(), null)); } catch (Throwable t) { - log.error("Cannot initialize subscription command '{}': {}", message, t); + log.error("Cannot initialize subscription command '{}'", message, t); session.sendMessage(new OperationMessage(Type.GQL_CONNECTION_ERROR, message.getId(), t.getMessage())); } }