Skip to content

Commit 9492c3f

Browse files
artembilanspring-builds
authored andcommitted
Fix Nullability in the GatewayMethodInboundMessageMapper
(cherry picked from commit 337ffc1)
1 parent 36abab9 commit 9492c3f

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapper.java

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -197,14 +197,16 @@ public void setReplyTimeoutExpression(Expression replyTimeoutExpression) {
197197
}
198198
}
199199

200-
private Map<String, @Nullable Object> evaluateHeaders(MethodArgsHolder methodArgsHolder,
200+
private Map<String, Object> evaluateHeaders(MethodArgsHolder methodArgsHolder,
201201
Map<String, Expression> headerExpressions) {
202202

203-
Map<String, @Nullable Object> evaluatedHeaders = new HashMap<>();
203+
Map<String, Object> evaluatedHeaders = new HashMap<>();
204204
for (Map.Entry<String, Expression> entry : headerExpressions.entrySet()) {
205205
Object value = entry.getValue()
206206
.getValue(GatewayMethodInboundMessageMapper.this.evaluationContext, methodArgsHolder);
207-
evaluatedHeaders.put(entry.getKey(), value);
207+
if (value != null) {
208+
evaluatedHeaders.put(entry.getKey(), value);
209+
}
208210
}
209211
return evaluatedHeaders;
210212
}
@@ -215,7 +217,7 @@ public void setReplyTimeoutExpression(Expression replyTimeoutExpression) {
215217
return expression.getValue(this.evaluationContext, argumentValue);
216218
}
217219

218-
private static void copyHeaders(Map<?, ?> argumentValue, Map<String, @Nullable Object> headers) {
220+
private static void copyHeaders(Map<?, ?> argumentValue, Map<String, Object> headers) {
219221
for (Entry<?, ?> entry : argumentValue.entrySet()) {
220222
Object key = entry.getKey();
221223
if (!(key instanceof String)) {
@@ -273,7 +275,7 @@ public Message<?> toMessage(MethodArgsHolder holder, @Nullable Map<String, Objec
273275
Object messageOrPayload = null;
274276
boolean foundPayloadAnnotation = false;
275277
Object[] arguments = holder.args();
276-
Map<String, @Nullable Object> headersToPopulate =
278+
Map<String, Object> headersToPopulate =
277279
headersToMap != null
278280
? new HashMap<>(headersToMap)
279281
: new HashMap<>();
@@ -321,7 +323,7 @@ else if (GatewayMethodInboundMessageMapper.this.payloadExpression == null) {
321323
return buildMessage(holder, headersToPopulate, messageOrPayload);
322324
}
323325

324-
private void headerOrHeaders(Map<String, @Nullable Object> headersToPopulate, Object argumentValue,
326+
private void headerOrHeaders(Map<String, Object> headersToPopulate, Object argumentValue,
325327
MethodParameter methodParameter, Annotation annotation) {
326328

327329
if (annotation.annotationType().equals(Header.class)) {
@@ -348,20 +350,20 @@ private Object processPayloadAnnotation(@Nullable Object messageOrPayload,
348350
}
349351
}
350352

351-
private void processHeaderAnnotation(Map<String, @Nullable Object> headersToPopulate, @Nullable Object argumentValue,
353+
private void processHeaderAnnotation(Map<String, Object> headersToPopulate, @Nullable Object argumentValue,
352354
MethodParameter methodParameter, Annotation annotation) {
353355

354356
String headerName = determineHeaderName(annotation, methodParameter);
355357
if (Boolean.TRUE.equals(AnnotationUtils.getValue(annotation, "required")) && argumentValue == null) {
356358
throw new IllegalArgumentException("Received null argument value for required header: '"
357359
+ headerName + "'");
358360
}
359-
headersToPopulate.put(headerName, argumentValue);
361+
if (argumentValue != null) {
362+
headersToPopulate.put(headerName, argumentValue);
363+
}
360364
}
361365

362-
private void processHeadersAnnotation(Map<String, @Nullable Object> headersToPopulate,
363-
@Nullable Object argumentValue) {
364-
366+
private void processHeadersAnnotation(Map<String, Object> headersToPopulate, @Nullable Object argumentValue) {
365367
if (argumentValue != null) {
366368
if (!(argumentValue instanceof Map)) {
367369
throw new IllegalArgumentException(
@@ -377,7 +379,7 @@ private void processHeadersAnnotation(Map<String, @Nullable Object> headersToPop
377379
}
378380

379381
private void processMapArgument(Object messageOrPayload, boolean foundPayloadAnnotation,
380-
Map<String, @Nullable Object> headersToPopulate, Map<?, ?> argumentValue) {
382+
Map<String, Object> headersToPopulate, Map<?, ?> argumentValue) {
381383

382384
if (messageOrPayload instanceof Map && !foundPayloadAnnotation
383385
&& GatewayMethodInboundMessageMapper.this.payloadExpression == null) {
@@ -388,7 +390,7 @@ private void processMapArgument(Object messageOrPayload, boolean foundPayloadAnn
388390
}
389391

390392
private void populateSendAndReplyTimeoutHeaders(MethodArgsHolder methodArgsHolder,
391-
Map<String, @Nullable Object> headersToPopulate) {
393+
Map<String, Object> headersToPopulate) {
392394

393395
Expression sendTimeoutExpressionToUse = GatewayMethodInboundMessageMapper.this.sendTimeoutExpression;
394396
if (sendTimeoutExpressionToUse != null) {
@@ -406,7 +408,7 @@ private void populateSendAndReplyTimeoutHeaders(MethodArgsHolder methodArgsHolde
406408
}
407409
}
408410

409-
private Message<?> buildMessage(MethodArgsHolder methodArgsHolder, Map<String, @Nullable Object> headers,
411+
private Message<?> buildMessage(MethodArgsHolder methodArgsHolder, Map<String, Object> headers,
410412
Object messageOrPayload) {
411413

412414
MessageBuilderFactory msgBuilderFactory = GatewayMethodInboundMessageMapper.this.messageBuilderFactory;
@@ -417,13 +419,13 @@ private Message<?> buildMessage(MethodArgsHolder methodArgsHolder, Map<String, @
417419
builder.copyHeadersIfAbsent(headers);
418420
// Explicit headers in XML override any @Header annotations...
419421
if (!CollectionUtils.isEmpty(GatewayMethodInboundMessageMapper.this.headerExpressions)) {
420-
Map<String, @Nullable Object> evaluatedHeaders =
422+
Map<String, Object> evaluatedHeaders =
421423
evaluateHeaders(methodArgsHolder, GatewayMethodInboundMessageMapper.this.headerExpressions);
422424
builder.copyHeaders(evaluatedHeaders);
423425
}
424426
// ...whereas global (default) headers do not...
425427
if (!CollectionUtils.isEmpty(GatewayMethodInboundMessageMapper.this.globalHeaderExpressions)) {
426-
Map<String, @Nullable Object> evaluatedHeaders =
428+
Map<String, Object> evaluatedHeaders =
427429
evaluateHeaders(methodArgsHolder,
428430
GatewayMethodInboundMessageMapper.this.globalHeaderExpressions);
429431
builder.copyHeadersIfAbsent(evaluatedHeaders);

0 commit comments

Comments
 (0)