Skip to content

Commit 18e3b08

Browse files
author
Raul Avila
committed
Read x-death count in a safer way
1 parent 355be1e commit 18e3b08

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverter.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.amqp.core.MessageProperties;
3434
import org.springframework.util.CollectionUtils;
3535
import org.springframework.util.StringUtils;
36+
import org.springframework.util.NumberUtils;
3637

3738
/**
3839
* Default implementation of the {@link MessagePropertiesConverter} strategy.
@@ -147,7 +148,13 @@ else if (MessageProperties.RETRY_COUNT.equals(key)) {
147148
if (target.getRetryCount() == 0) {
148149
List<Map<String, ?>> xDeathHeader = target.getXDeathHeader();
149150
if (!CollectionUtils.isEmpty(xDeathHeader)) {
150-
target.setRetryCount((long) xDeathHeader.get(0).get("count"));
151+
Object countValue = xDeathHeader.get(0).get("count");
152+
153+
if(countValue != null) {
154+
target.setRetryCount(
155+
NumberUtils.convertNumberToTargetClass((Number) countValue, Long.class));
156+
}
157+
151158
}
152159
}
153160

spring-rabbit/src/test/java/org/springframework/amqp/rabbit/support/DefaultMessagePropertiesConverterTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,21 @@ public void testToMessagePropertiesLongStringInMap() {
104104
assertThat(((Map<String, Object>) messageProperties.getHeaders().get("map")).get("longString")).as("LongString nested in Map not converted to String").isEqualTo(longStringString);
105105
}
106106

107+
@Test
108+
public void testToMessagePropertiesXDeathCount() {
109+
Map<String, Object> headers = new HashMap<String, Object>();
110+
111+
headers.put("x-death", List.of(Map.of("count", Integer.valueOf(2))));
112+
113+
BasicProperties source = new BasicProperties.Builder()
114+
.headers(headers)
115+
.build();
116+
117+
MessageProperties messageProperties = messagePropertiesConverter.toMessageProperties(source, envelope, "UTF-8");
118+
119+
assertThat(messageProperties.getRetryCount()).isEqualTo(2);
120+
}
121+
107122
@Test
108123
public void testLongLongString() {
109124
Map<String, Object> headers = new HashMap<String, Object>();

0 commit comments

Comments
 (0)