Skip to content

Commit 52202d4

Browse files
committed
Add empty "data:" field for SSE complete event
Prior to this commit, the "event:complete" event would have no "data:" field when completing the stream of data. This can cause problems with browsers, as the `EventSource` callback might not get called without it. This commit ensures that an empty data field is present in all cases. Fixes gh-940
1 parent 8632199 commit 52202d4

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

spring-graphql/src/main/java/org/springframework/graphql/server/webflux/GraphQlSseHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class GraphQlSseHandler {
5454

5555
private static final Log logger = LogFactory.getLog(GraphQlSseHandler.class);
5656

57-
private static final Mono<ServerSentEvent<Map<String, Object>>> COMPLETE_EVENT = Mono.just(ServerSentEvent.<Map<String, Object>>builder().event("complete").build());
57+
private static final Mono<ServerSentEvent<Map<String, Object>>> COMPLETE_EVENT = Mono.just(ServerSentEvent.<Map<String, Object>>builder(Collections.emptyMap()).event("complete").build());
5858

5959
private final WebGraphQlHandler graphQlHandler;
6060

spring-graphql/src/main/java/org/springframework/graphql/server/webmvc/GraphQlSseHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ private void writeNext(Map<String, Object> value) {
147147
@Override
148148
protected void hookOnComplete() {
149149
try {
150-
this.sseBuilder.event("complete").send();
150+
this.sseBuilder.event("complete").data("");
151151
} catch (IOException exc) {
152152
throw new RuntimeException(exc);
153153
}

spring-graphql/src/test/java/org/springframework/graphql/server/webflux/GraphQlSseHandlerTests.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ void shouldRejectQueryOperations() {
7676
data:{"errors":[{"message":"SSE transport only supports Subscription operations","locations":[],"extensions":{"classification":"OperationNotSupported"}}]}
7777
7878
event:complete
79+
data:{}
7980
8081
""");
8182
}
@@ -96,7 +97,8 @@ void shouldWriteMultipleEventsForSubscription() {
9697
data:{"data":{"bookSearch":{"id":"5","name":"Animal Farm"}}}
9798
9899
event:complete
99-
100+
data:{}
101+
100102
""");
101103
}
102104

@@ -118,6 +120,7 @@ void shouldWriteEventsAndTerminalError() {
118120
data:{"errors":[{"message":"Subscription error","locations":[],"extensions":{"classification":"INTERNAL_ERROR"}}]}
119121
120122
event:complete
123+
data:{}
121124
122125
""");
123126
}

spring-graphql/src/test/java/org/springframework/graphql/server/webmvc/GraphQlSseHandlerTests.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ void shouldRejectQueryOperations() throws Exception {
7171
data:{"errors":[{"message":"SSE transport only supports Subscription operations","locations":[],"extensions":{"classification":"OperationNotSupported"}}]}
7272
7373
event:complete
74+
data:
7475
7576
""");
7677
}
@@ -95,7 +96,8 @@ void shouldWriteMultipleEventsForSubscription() throws Exception {
9596
data:{"data":{"bookSearch":{"id":"5","name":"Animal Farm"}}}
9697
9798
event:complete
98-
99+
data:
100+
99101
""");
100102
}
101103

@@ -121,7 +123,8 @@ void shouldWriteEventsAndTerminalError() throws Exception {
121123
data:{"errors":[{"message":"Subscription error","locations":[],"extensions":{"classification":"INTERNAL_ERROR"}}]}
122124
123125
event:complete
124-
126+
data:
127+
125128
""");
126129
}
127130

0 commit comments

Comments
 (0)