From f8308f222eace0a56be1065ee6ed59d7f3935a43 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Thu, 28 Mar 2024 11:32:48 -0400 Subject: [PATCH] GH-2667: Use any `Number` for inbound `x-delay` property Fixes: #2667 The `x-delay` header may arrive as a `Short` from RabbitMQ broker. * Fix `DefaultMessagePropertiesConverter.toMessageProperties()` to deal with a `Number` to extract `long` value from the `x-delay` header # Conflicts: # spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java --- .../support/DefaultMessagePropertiesConverter.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java index 72053d28..cb6f48c7 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java @@ -40,6 +40,8 @@ import com.rabbitmq.client.LongString; * @author Mark Fisher * @author Gary Russell * @author Soeren Unruh + * @author Artem Bilan + * * @since 1.0 */ public class DefaultMessagePropertiesConverter implements MessagePropertiesConverter { @@ -92,8 +94,10 @@ public class DefaultMessagePropertiesConverter implements MessagePropertiesConve String key = entry.getKey(); if (MessageProperties.X_DELAY.equals(key)) { Object value = entry.getValue(); - if (value instanceof Integer integ) { - target.setReceivedDelay(integ); + if (value instanceof Number numberValue) { + int receivedDelayLongValue = numberValue.intValue(); + target.setReceivedDelay(receivedDelayLongValue); + target.setHeader(key, receivedDelayLongValue); } } else { @@ -174,7 +178,7 @@ public class DefaultMessagePropertiesConverter implements MessagePropertiesConve } /** - * Converts a header value to a String if the value type is unsupported by AMQP, also handling values + * Convert a header value to a String if the value type is unsupported by AMQP, also handling values * nested inside Lists or Maps. *

{@code null} values are passed through, although Rabbit client will throw an IllegalArgumentException. * @param valueArg the value.