Skip to content

Commit 267a9e3

Browse files
committed
Deserialize payload depending on type fix #252
1 parent ae0e2c8 commit 267a9e3

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/GraphQLSubscriptionMapper.java

+15-3
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,38 @@
22

33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import graphql.ExecutionResult;
5+
import graphql.GraphQLException;
56
import graphql.kickstart.execution.GraphQLObjectMapper;
67
import graphql.kickstart.execution.GraphQLRequest;
78
import java.util.Map;
9+
import java.util.Objects;
810
import lombok.RequiredArgsConstructor;
911

1012
@RequiredArgsConstructor
1113
public class GraphQLSubscriptionMapper {
1214

1315
private final GraphQLObjectMapper graphQLObjectMapper;
1416

15-
public GraphQLRequest readGraphQLRequest(Object payload) {
17+
public GraphQLRequest readGraphQLRequest(String payload) {
18+
Objects.requireNonNull(payload, "Payload is required");
19+
try {
20+
return graphQLObjectMapper.getJacksonMapper().readValue(payload, GraphQLRequest.class);
21+
} catch (JsonProcessingException e) {
22+
throw new GraphQLException("Cannot read GraphQL request from payload '" + payload + "'", e);
23+
}
24+
}
25+
26+
public GraphQLRequest convertGraphQLRequest(Object payload) {
27+
Objects.requireNonNull(payload, "Payload is required");
1628
return graphQLObjectMapper.getJacksonMapper().convertValue(payload, GraphQLRequest.class);
1729
}
1830

1931
public ExecutionResult sanitizeErrors(ExecutionResult executionResult) {
2032
return graphQLObjectMapper.sanitizeErrors(executionResult);
2133
}
2234

23-
public boolean areErrorsPresent(ExecutionResult executionResult) {
24-
return graphQLObjectMapper.areErrorsPresent(executionResult);
35+
public boolean hasNoErrors(ExecutionResult executionResult) {
36+
return !graphQLObjectMapper.areErrorsPresent(executionResult);
2537
}
2638

2739
public Map<String, Object> convertSanitizedExecutionResult(ExecutionResult executionResult) {

graphql-java-kickstart/src/main/java/graphql/kickstart/execution/subscriptions/apollo/SubscriptionStartCommand.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ public void apply(SubscriptionSession session, OperationMessage message) {
3434

3535
private CompletableFuture<ExecutionResult> executeAsync(Object payload, SubscriptionSession session) {
3636
Objects.requireNonNull(payload, "Payload is required");
37-
GraphQLRequest graphQLRequest = mapper.readGraphQLRequest(payload);
37+
GraphQLRequest graphQLRequest = mapper.convertGraphQLRequest(payload);
3838

3939
GraphQLSingleInvocationInput invocationInput = invocationInputFactory.create(graphQLRequest, session);
4040
return graphQLInvoker.executeAsync(invocationInput);
4141
}
4242

4343
private void handleSubscriptionStart(SubscriptionSession session, String id, ExecutionResult executionResult) {
4444
ExecutionResult sanitizedExecutionResult = mapper.sanitizeErrors(executionResult);
45-
if (!mapper.areErrorsPresent(sanitizedExecutionResult)) {
45+
if (mapper.hasNoErrors(sanitizedExecutionResult)) {
4646
session.subscribe(id, sanitizedExecutionResult.getData());
4747
} else {
4848
Object payload = mapper.convertSanitizedExecutionResult(sanitizedExecutionResult);

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

+1
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request,
198198
response.getHeaders().put(HandshakeRequest.SEC_WEBSOCKET_PROTOCOL,
199199
new ArrayList<>(asList(subscriptionProtocolFactory.getProtocol())));
200200
}
201+
201202
}
202203

203204
/**

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/subscriptions/FallbackSubscriptionConsumer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void accept(String text) {
3030
executionResult.thenAccept(result -> handleSubscriptionStart(session, UUID.randomUUID().toString(), result));
3131
}
3232

33-
private CompletableFuture<ExecutionResult> executeAsync(Object payload, SubscriptionSession session) {
33+
private CompletableFuture<ExecutionResult> executeAsync(String payload, SubscriptionSession session) {
3434
Objects.requireNonNull(payload, "Payload is required");
3535
GraphQLRequest graphQLRequest = mapper.readGraphQLRequest(payload);
3636

@@ -40,7 +40,7 @@ private CompletableFuture<ExecutionResult> executeAsync(Object payload, Subscrip
4040

4141
private void handleSubscriptionStart(SubscriptionSession session, String id, ExecutionResult executionResult) {
4242
ExecutionResult sanitizedExecutionResult = mapper.sanitizeErrors(executionResult);
43-
if (!mapper.areErrorsPresent(sanitizedExecutionResult)) {
43+
if (mapper.hasNoErrors(sanitizedExecutionResult)) {
4444
session.subscribe(id, sanitizedExecutionResult.getData());
4545
} else {
4646
Object payload = mapper.convertSanitizedExecutionResult(sanitizedExecutionResult);

0 commit comments

Comments
 (0)