@@ -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