Skip to content

Commit d5c4dc7

Browse files
committed
replace executionId with idExpression SpEL evaluator
issue spring-projects#3501
1 parent 2954f2f commit d5c4dc7

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

spring-integration-graphql/src/main/java/org/springframework/integration/graphql/outbound/GraphQlMessageHandler.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.util.Collections;
2020
import java.util.Locale;
2121
import java.util.Map;
22+
import java.util.Objects;
23+
import java.util.UUID;
2224

2325
import org.springframework.beans.factory.BeanFactory;
2426
import org.springframework.expression.Expression;
@@ -31,6 +33,7 @@
3133
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
3234
import org.springframework.lang.Nullable;
3335
import org.springframework.messaging.Message;
36+
import org.springframework.messaging.MessageHeaders;
3437
import org.springframework.util.Assert;
3538

3639
/**
@@ -54,7 +57,7 @@ public class GraphQlMessageHandler extends AbstractReplyProducingMessageHandler
5457
@Nullable
5558
private Locale locale;
5659

57-
private String executionId = null;
60+
private Expression idExpression = new SupplierExpression<>(() -> null);
5861

5962
public GraphQlMessageHandler(final GraphQlService graphQlService) {
6063
Assert.notNull(graphQlService, "'graphQlService' must not be null");
@@ -116,12 +119,12 @@ public void setLocale(@Nullable Locale locale) {
116119
}
117120

118121
/**
119-
* Set a Execution Id for GraphQL Operation to execute.
120-
* @param executionId the executionId to use.
122+
* Set a SpEL expression to evaluate Id for GraphQL Operation Request to execute.
123+
* @param idExpression the idExpression to use.
121124
*/
122-
public void setExecutionId(String executionId) {
123-
Assert.hasText(executionId, "'executionId' must not be empty");
124-
this.executionId = executionId;
125+
public void setIdExpression(Expression idExpression) {
126+
Assert.notNull(idExpression, "'idExpression' must not be null");
127+
this.idExpression = idExpression;
125128
}
126129

127130
@Override
@@ -140,11 +143,12 @@ protected Object handleRequestMessage(Message<?> requestMessage) {
140143
}
141144
else {
142145
Assert.notNull(this.operationExpression, "'operationExpression' must not be null");
143-
// Assert.hasText(this.executionId, "'executionId' must not be empty");
146+
Assert.notNull(this.idExpression, "'idExpression' must not be null");
144147
String query = evaluateOperationExpression(requestMessage);
145148
String operationName = evaluateOperationNameExpression(requestMessage);
146149
Map<String, Object> variables = evaluateVariablesExpression(requestMessage);
147-
requestInput = new RequestInput(query, operationName, variables, this.locale, this.executionId);
150+
String id = evaluateIdExpression(requestMessage);
151+
requestInput = new RequestInput(query, operationName, variables, this.locale, id);
148152
}
149153

150154
return this.graphQlService
@@ -167,4 +171,13 @@ private Map<String, Object> evaluateVariablesExpression(Message<?> message) {
167171
return this.variablesExpression.getValue(this.evaluationContext, message, Map.class);
168172
}
169173

174+
private String evaluateIdExpression(Message<?> message) {
175+
String id = this.idExpression.getValue(this.evaluationContext, message, String.class);
176+
if (id == null) {
177+
return Objects.requireNonNull(message.getHeaders().get(MessageHeaders.ID)).toString();
178+
}
179+
180+
return id;
181+
}
182+
170183
}

spring-integration-graphql/src/test/java/org/springframework/integration/graphql/outbound/GraphQlMessageHandlerTests.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.Collections;
2323
import java.util.Locale;
2424
import java.util.Map;
25-
import java.util.Objects;
2625
import java.util.UUID;
2726

2827
import org.junit.jupiter.api.Test;
@@ -56,8 +55,6 @@
5655
import org.springframework.stereotype.Repository;
5756
import org.springframework.test.annotation.DirtiesContext;
5857
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
59-
import org.springframework.util.AlternativeJdkIdGenerator;
60-
import org.springframework.util.IdGenerator;
6158

6259
import graphql.execution.reactive.SubscriptionPublisher;
6360
import reactor.core.publisher.Flux;
@@ -125,9 +122,6 @@ void testHandleMessageForQueryWithQueryProvided() {
125122
Locale locale = Locale.getDefault();
126123
this.graphQlMessageHandler.setLocale(locale);
127124

128-
String executionId = UUID.randomUUID().toString();
129-
this.graphQlMessageHandler.setExecutionId(executionId);
130-
131125
StepVerifier.create(
132126
Mono.from((Mono<RequestOutput>) this.graphQlMessageHandler.handleRequestMessage(MessageBuilder.withPayload(fakeQuery).build()))
133127
)

0 commit comments

Comments
 (0)