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 0d9e3cfd58..728b43e9f9 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 @@ -44,6 +44,7 @@ * @author Artem Bilan * @author Ngoc Nhan * @author Johan Kaving + * @author Raul Avila * * @since 1.0 */ @@ -147,7 +148,11 @@ else if (MessageProperties.RETRY_COUNT.equals(key)) { if (target.getRetryCount() == 0) { List> xDeathHeader = target.getXDeathHeader(); if (!CollectionUtils.isEmpty(xDeathHeader)) { - target.setRetryCount((long) xDeathHeader.get(0).get("count")); + Object value = xDeathHeader.get(0).get("count"); + + if (value instanceof Number numberValue) { + target.setRetryCount(numberValue.longValue()); + } } } diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java index 91ce11892f..dd2cc1eab7 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java @@ -104,6 +104,21 @@ public void testToMessagePropertiesLongStringInMap() { assertThat(((Map) messageProperties.getHeaders().get("map")).get("longString")).as("LongString nested in Map not converted to String").isEqualTo(longStringString); } + @Test + public void testToMessagePropertiesXDeathCount() { + Map headers = new HashMap(); + + headers.put("x-death", List.of(Map.of("count", Integer.valueOf(2)))); + + BasicProperties source = new BasicProperties.Builder() + .headers(headers) + .build(); + + MessageProperties messageProperties = messagePropertiesConverter.toMessageProperties(source, envelope, "UTF-8"); + + assertThat(messageProperties.getRetryCount()).isEqualTo(2); + } + @Test public void testLongLongString() { Map headers = new HashMap();