Skip to content

Commit 3090328

Browse files
committed
Insert WebSocket in the names of GraphQlMessage[Type]
Those are specific to the GraphQL over WebSocket protocol. See gh-339
1 parent eb9a369 commit 3090328

File tree

11 files changed

+182
-179
lines changed

11 files changed

+182
-179
lines changed

spring-graphql/src/main/java/org/springframework/graphql/client/CodecDelegate.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.springframework.core.codec.Encoder;
2424
import org.springframework.core.io.buffer.DataBuffer;
2525
import org.springframework.core.io.buffer.DataBufferUtils;
26-
import org.springframework.graphql.server.support.GraphQlMessage;
26+
import org.springframework.graphql.server.support.GraphQlWebSocketMessage;
2727
import org.springframework.http.MediaType;
2828
import org.springframework.http.codec.ClientCodecConfigurer;
2929
import org.springframework.http.codec.CodecConfigurer;
@@ -42,7 +42,7 @@
4242
*/
4343
final class CodecDelegate {
4444

45-
private static final ResolvableType MESSAGE_TYPE = ResolvableType.forClass(GraphQlMessage.class);
45+
private static final ResolvableType MESSAGE_TYPE = ResolvableType.forClass(GraphQlWebSocketMessage.class);
4646

4747

4848
private final CodecConfigurer codecConfigurer;
@@ -104,7 +104,7 @@ public CodecConfigurer getCodecConfigurer() {
104104

105105

106106
@SuppressWarnings("unchecked")
107-
public <T> WebSocketMessage encode(WebSocketSession session, GraphQlMessage message) {
107+
public <T> WebSocketMessage encode(WebSocketSession session, GraphQlWebSocketMessage message) {
108108

109109
DataBuffer buffer = ((Encoder<T>) this.encoder).encodeValue(
110110
(T) message, session.bufferFactory(), MESSAGE_TYPE, MimeTypeUtils.APPLICATION_JSON, null);
@@ -113,9 +113,9 @@ public <T> WebSocketMessage encode(WebSocketSession session, GraphQlMessage mess
113113
}
114114

115115
@SuppressWarnings("ConstantConditions")
116-
public GraphQlMessage decode(WebSocketMessage webSocketMessage) {
116+
public GraphQlWebSocketMessage decode(WebSocketMessage webSocketMessage) {
117117
DataBuffer buffer = DataBufferUtils.retain(webSocketMessage.getPayload());
118-
return (GraphQlMessage) this.decoder.decode(buffer, MESSAGE_TYPE, null, null);
118+
return (GraphQlWebSocketMessage) this.decoder.decode(buffer, MESSAGE_TYPE, null, null);
119119
}
120120

121121
}

spring-graphql/src/main/java/org/springframework/graphql/client/WebSocketGraphQlTransport.java

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
import org.springframework.graphql.GraphQlRequest;
3434
import org.springframework.graphql.GraphQlResponse;
3535
import org.springframework.graphql.ResponseError;
36-
import org.springframework.graphql.server.support.GraphQlMessage;
37-
import org.springframework.graphql.server.support.GraphQlMessageType;
36+
import org.springframework.graphql.server.support.GraphQlWebSocketMessage;
37+
import org.springframework.graphql.server.support.GraphQlWebSocketMessageType;
3838
import org.springframework.http.HttpHeaders;
3939
import org.springframework.http.codec.CodecConfigurer;
4040
import org.springframework.lang.Nullable;
@@ -226,9 +226,9 @@ public Mono<Void> handle(WebSocketSession session) {
226226
GraphQlSession graphQlSession = new GraphQlSession(session);
227227
registerCloseStatusHandling(graphQlSession, session);
228228

229-
Mono<GraphQlMessage> connectionInitMono = this.interceptor.connectionInitPayload()
229+
Mono<GraphQlWebSocketMessage> connectionInitMono = this.interceptor.connectionInitPayload()
230230
.defaultIfEmpty(Collections.emptyMap())
231-
.map(GraphQlMessage::connectionInit);
231+
.map(GraphQlWebSocketMessage::connectionInit);
232232

233233
Mono<Void> sendCompletion =
234234
session.send(connectionInitMono.concatWith(graphQlSession.getRequestFlux())
@@ -238,8 +238,8 @@ public Mono<Void> handle(WebSocketSession session) {
238238
.flatMap(webSocketMessage -> {
239239
if (sessionNotInitialized()) {
240240
try {
241-
GraphQlMessage message = this.codecDelegate.decode(webSocketMessage);
242-
Assert.state(message.resolvedType() == GraphQlMessageType.CONNECTION_ACK,
241+
GraphQlWebSocketMessage message = this.codecDelegate.decode(webSocketMessage);
242+
Assert.state(message.resolvedType() == GraphQlWebSocketMessageType.CONNECTION_ACK,
243243
() -> "Unexpected message before connection_ack: " + message);
244244
return this.interceptor.handleConnectionAck(message.getPayload())
245245
.then(Mono.defer(() -> {
@@ -261,7 +261,7 @@ public Mono<Void> handle(WebSocketSession session) {
261261
}
262262
else {
263263
try {
264-
GraphQlMessage message = this.codecDelegate.decode(webSocketMessage);
264+
GraphQlWebSocketMessage message = this.codecDelegate.decode(webSocketMessage);
265265
switch (message.resolvedType()) {
266266
case NEXT:
267267
graphQlSession.handleNext(message);
@@ -378,7 +378,7 @@ private static class GraphQlSession {
378378

379379
private final AtomicLong requestIndex = new AtomicLong();
380380

381-
private final Sinks.Many<GraphQlMessage> requestSink = Sinks.many().unicast().onBackpressureBuffer();
381+
private final Sinks.Many<GraphQlWebSocketMessage> requestSink = Sinks.many().unicast().onBackpressureBuffer();
382382

383383
private final Map<String, ResponseState> responseMap = new ConcurrentHashMap<>();
384384

@@ -393,14 +393,14 @@ private static class GraphQlSession {
393393
/**
394394
* Return the {@code Flux} of GraphQL requests to send as WebSocket messages.
395395
*/
396-
public Flux<GraphQlMessage> getRequestFlux() {
396+
public Flux<GraphQlWebSocketMessage> getRequestFlux() {
397397
return this.requestSink.asFlux();
398398
}
399399

400400
public Mono<GraphQlResponse> execute(GraphQlRequest request) {
401401
String id = String.valueOf(this.requestIndex.incrementAndGet());
402402
try {
403-
GraphQlMessage message = GraphQlMessage.subscribe(id, request);
403+
GraphQlWebSocketMessage message = GraphQlWebSocketMessage.subscribe(id, request);
404404
ResponseState state = new ResponseState(request);
405405
this.responseMap.put(id, state);
406406
trySend(message);
@@ -415,7 +415,7 @@ public Mono<GraphQlResponse> execute(GraphQlRequest request) {
415415
public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
416416
String id = String.valueOf(this.requestIndex.incrementAndGet());
417417
try {
418-
GraphQlMessage message = GraphQlMessage.subscribe(id, request);
418+
GraphQlWebSocketMessage message = GraphQlWebSocketMessage.subscribe(id, request);
419419
SubscriptionState state = new SubscriptionState(request);
420420
this.subscriptionMap.put(id, state);
421421
trySend(message);
@@ -428,13 +428,13 @@ public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
428428
}
429429

430430
public void sendPong(@Nullable Map<String, Object> payload) {
431-
GraphQlMessage message = GraphQlMessage.pong(payload);
431+
GraphQlWebSocketMessage message = GraphQlWebSocketMessage.pong(payload);
432432
trySend(message);
433433
}
434434

435435
// TODO: queue to serialize sending?
436436

437-
private void trySend(GraphQlMessage message) {
437+
private void trySend(GraphQlWebSocketMessage message) {
438438
Sinks.EmitResult emitResult = null;
439439
for (int i = 0; i < 100; i++) {
440440
emitResult = this.requestSink.tryEmitNext(message);
@@ -449,7 +449,7 @@ private void stopSubscription(String id) {
449449
SubscriptionState state = this.subscriptionMap.remove(id);
450450
if (state != null) {
451451
try {
452-
trySend(GraphQlMessage.complete(id));
452+
trySend(GraphQlWebSocketMessage.complete(id));
453453
}
454454
catch (Exception ex) {
455455
if (logger.isErrorEnabled()) {
@@ -465,7 +465,7 @@ private void stopSubscription(String id) {
465465
/**
466466
* Handle a "next" message and route to its recipient.
467467
*/
468-
public void handleNext(GraphQlMessage message) {
468+
public void handleNext(GraphQlWebSocketMessage message) {
469469
String id = message.getId();
470470
ResponseState responseState = this.responseMap.remove(id);
471471
SubscriptionState subscriptionState = this.subscriptionMap.get(id);
@@ -496,7 +496,7 @@ public void handleNext(GraphQlMessage message) {
496496
* Handle an "error" message, turning it into an {@link GraphQlResponse}
497497
* for single responses, or signaling an error for streams.
498498
*/
499-
public void handleError(GraphQlMessage message) {
499+
public void handleError(GraphQlWebSocketMessage message) {
500500
String id = message.getId();
501501
ResponseState responseState = this.responseMap.remove(id);
502502
SubscriptionState subscriptionState = this.subscriptionMap.remove(id);
@@ -529,7 +529,7 @@ public void handleError(GraphQlMessage message) {
529529
/**
530530
* Handle a "complete" message.
531531
*/
532-
public void handleComplete(GraphQlMessage message) {
532+
public void handleComplete(GraphQlWebSocketMessage message) {
533533
ResponseState responseState = this.responseMap.remove(message.getId());
534534
SubscriptionState subscriptionState = this.subscriptionMap.remove(message.getId());
535535

spring-graphql/src/main/java/org/springframework/graphql/server/support/GraphQlMessage.java renamed to spring-graphql/src/main/java/org/springframework/graphql/server/support/GraphQlWebSocketMessage.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,13 @@
3535
* @since 1.0.0
3636
* @see <a href="https://github.com/enisdenjo/graphql-ws/blob/master/PROTOCOL.md">GraphQL Over WebSocket Protocol</a>
3737
*/
38-
public class GraphQlMessage {
38+
public class GraphQlWebSocketMessage {
3939

4040
@Nullable
4141
private String id;
4242

4343
@Nullable
44-
private GraphQlMessageType type;
44+
private GraphQlWebSocketMessageType type;
4545

4646
@Nullable
4747
private Object payload;
@@ -50,7 +50,7 @@ public class GraphQlMessage {
5050
/**
5151
* Private constructor. See static factory methods.
5252
*/
53-
private GraphQlMessage(@Nullable String id, GraphQlMessageType type, @Nullable Object payload) {
53+
private GraphQlWebSocketMessage(@Nullable String id, GraphQlWebSocketMessageType type, @Nullable Object payload) {
5454
Assert.notNull(type, "GraphQlMessageType is required");
5555
Assert.isTrue(payload != null || type.doesNotRequirePayload(), "Payload is required for [" + type + "]");
5656
this.id = id;
@@ -63,8 +63,8 @@ private GraphQlMessage(@Nullable String id, GraphQlMessageType type, @Nullable O
6363
* Constructor for deserialization.
6464
*/
6565
@SuppressWarnings("unused")
66-
GraphQlMessage() {
67-
this.type = GraphQlMessageType.NOT_SPECIFIED;
66+
GraphQlWebSocketMessage() {
67+
this.type = GraphQlWebSocketMessageType.NOT_SPECIFIED;
6868
}
6969

7070

@@ -88,7 +88,7 @@ public String getType() {
8888
/**
8989
* Return the message type as an emum.
9090
*/
91-
public GraphQlMessageType resolvedType() {
91+
public GraphQlWebSocketMessageType resolvedType() {
9292
Assert.state(this.type != null, "GraphQlWebSocketMessage does not have a type");
9393
return this.type;
9494
}
@@ -111,7 +111,7 @@ public void setId(@Nullable String id) {
111111
}
112112

113113
public void setType(String type) {
114-
this.type = GraphQlMessageType.fromValue(type);
114+
this.type = GraphQlWebSocketMessageType.fromValue(type);
115115
}
116116

117117
public void setPayload(@Nullable Object payload) {
@@ -129,10 +129,10 @@ public int hashCode() {
129129

130130
@Override
131131
public boolean equals(Object o) {
132-
if (!(o instanceof GraphQlMessage)) {
132+
if (!(o instanceof GraphQlWebSocketMessage)) {
133133
return false;
134134
}
135-
GraphQlMessage other = (GraphQlMessage) o;
135+
GraphQlWebSocketMessage other = (GraphQlWebSocketMessage) o;
136136
return (ObjectUtils.nullSafeEquals(this.type, other.type) &&
137137
(ObjectUtils.nullSafeEquals(this.id, other.id) || (this.id == null && other.id == null)) &&
138138
(ObjectUtils.nullSafeEquals(getPayload(), other.getPayload())));
@@ -151,71 +151,71 @@ public String toString() {
151151
* Create a {@code "connection_init"} client message.
152152
* @param payload an optional payload
153153
*/
154-
public static GraphQlMessage connectionInit(@Nullable Object payload) {
155-
return new GraphQlMessage(null, GraphQlMessageType.CONNECTION_INIT, payload);
154+
public static GraphQlWebSocketMessage connectionInit(@Nullable Object payload) {
155+
return new GraphQlWebSocketMessage(null, GraphQlWebSocketMessageType.CONNECTION_INIT, payload);
156156
}
157157

158158
/**
159159
* Create a {@code "connection_ack"} server message.
160160
* @param payload an optional payload
161161
*/
162-
public static GraphQlMessage connectionAck(@Nullable Object payload) {
163-
return new GraphQlMessage(null, GraphQlMessageType.CONNECTION_ACK, payload);
162+
public static GraphQlWebSocketMessage connectionAck(@Nullable Object payload) {
163+
return new GraphQlWebSocketMessage(null, GraphQlWebSocketMessageType.CONNECTION_ACK, payload);
164164
}
165165

166166
/**
167167
* Create a {@code "subscribe"} client message.
168168
* @param id unique request id
169169
* @param request the request to add as the message payload
170170
*/
171-
public static GraphQlMessage subscribe(String id, GraphQlRequest request) {
171+
public static GraphQlWebSocketMessage subscribe(String id, GraphQlRequest request) {
172172
Assert.notNull(request, "GraphQlRequest is required");
173-
return new GraphQlMessage(id, GraphQlMessageType.SUBSCRIBE, request.toMap());
173+
return new GraphQlWebSocketMessage(id, GraphQlWebSocketMessageType.SUBSCRIBE, request.toMap());
174174
}
175175

176176
/**
177177
* Create a {@code "next"} server message.
178178
* @param id unique request id
179179
* @param responseMap the response map
180180
*/
181-
public static GraphQlMessage next(String id, Map<String, Object> responseMap) {
181+
public static GraphQlWebSocketMessage next(String id, Map<String, Object> responseMap) {
182182
Assert.notNull(responseMap, "'responseMap' is required");
183-
return new GraphQlMessage(id, GraphQlMessageType.NEXT, responseMap);
183+
return new GraphQlWebSocketMessage(id, GraphQlWebSocketMessageType.NEXT, responseMap);
184184
}
185185

186186
/**
187187
* Create an {@code "error"} server message.
188188
* @param id unique request id
189189
* @param error the error to add as the message payload
190190
*/
191-
public static GraphQlMessage error(String id, GraphQLError error) {
191+
public static GraphQlWebSocketMessage error(String id, GraphQLError error) {
192192
Assert.notNull(error, "GraphQlError is required");
193193
List<Map<String, Object>> errors = Collections.singletonList(error.toSpecification());
194-
return new GraphQlMessage(id, GraphQlMessageType.ERROR, errors);
194+
return new GraphQlWebSocketMessage(id, GraphQlWebSocketMessageType.ERROR, errors);
195195
}
196196

197197
/**
198198
* Create a {@code "complete"} server message.
199199
* @param id unique request id
200200
*/
201-
public static GraphQlMessage complete(String id) {
202-
return new GraphQlMessage(id, GraphQlMessageType.COMPLETE, null);
201+
public static GraphQlWebSocketMessage complete(String id) {
202+
return new GraphQlWebSocketMessage(id, GraphQlWebSocketMessageType.COMPLETE, null);
203203
}
204204

205205
/**
206206
* Create a {@code "ping"} client or server message.
207207
* @param payload an optional payload
208208
*/
209-
public static GraphQlMessage ping(@Nullable Object payload) {
210-
return new GraphQlMessage(null, GraphQlMessageType.PING, payload);
209+
public static GraphQlWebSocketMessage ping(@Nullable Object payload) {
210+
return new GraphQlWebSocketMessage(null, GraphQlWebSocketMessageType.PING, payload);
211211
}
212212

213213
/**
214214
* Create a {@code "pong"} client or server message.
215215
* @param payload an optional payload
216216
*/
217-
public static GraphQlMessage pong(@Nullable Object payload) {
218-
return new GraphQlMessage(null, GraphQlMessageType.PONG, payload);
217+
public static GraphQlWebSocketMessage pong(@Nullable Object payload) {
218+
return new GraphQlWebSocketMessage(null, GraphQlWebSocketMessageType.PONG, payload);
219219
}
220220

221221
}

spring-graphql/src/main/java/org/springframework/graphql/server/support/GraphQlMessageType.java renamed to spring-graphql/src/main/java/org/springframework/graphql/server/support/GraphQlWebSocketMessageType.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* @since 1.0.0
2525
* @see <a href="https://github.com/enisdenjo/graphql-ws/blob/master/PROTOCOL.md">GraphQL Over WebSocket Protocol</a>
2626
*/
27-
public enum GraphQlMessageType {
27+
public enum GraphQlWebSocketMessageType {
2828

2929
CONNECTION_INIT("connection_init", false),
3030

@@ -48,7 +48,7 @@ public enum GraphQlMessageType {
4848
NOT_SPECIFIED("", false);
4949

5050

51-
private static final GraphQlMessageType[] VALUES;
51+
private static final GraphQlWebSocketMessageType[] VALUES;
5252

5353
static {
5454
VALUES = values();
@@ -60,7 +60,7 @@ public enum GraphQlMessageType {
6060
private final boolean requiresPayload;
6161

6262

63-
GraphQlMessageType(String value, boolean requiresPayload) {
63+
GraphQlWebSocketMessageType(String value, boolean requiresPayload) {
6464
this.value = value;
6565
this.requiresPayload = requiresPayload;
6666
}
@@ -81,8 +81,8 @@ public boolean doesNotRequirePayload() {
8181
}
8282

8383

84-
public static GraphQlMessageType fromValue(String value) {
85-
for (GraphQlMessageType type : VALUES) {
84+
public static GraphQlWebSocketMessageType fromValue(String value) {
85+
for (GraphQlWebSocketMessageType type : VALUES) {
8686
if (type.value.equals(value)) {
8787
return type;
8888
}

0 commit comments

Comments
 (0)