From d4b75786271792ebf90b904df0e27d0c9545bf7c Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Wed, 5 Aug 2020 12:16:40 -0400 Subject: [PATCH] GH-1236: Handle non-String contentType Resolves https://github.com/spring-projects/spring-amqp/issues/1236 The user may set the contentType to a `MimeType`. Always use `toString()` when replacing the `contentType`. **cherry-pick to 2.2.x, 2.1.x, 1.7.x** (cherry picked from commit 8c7e4f95ee24fc60ff634d00fe4fc5858f728d88) # Conflicts: # spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java --- .../amqp/support/converter/MessagingMessageConverter.java | 4 ++-- ...ContentTypeDelegatingMessageConverterIntegrationTests.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessagingMessageConverter.java b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessagingMessageConverter.java index 5069eaa8..50fd72c4 100644 --- a/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessagingMessageConverter.java +++ b/spring-amqp/src/main/java/org/springframework/amqp/support/converter/MessagingMessageConverter.java @@ -108,9 +108,9 @@ public class MessagingMessageConverter implements MessageConverter, Initializing input.getPayload(), messageProperties); // Default previous behavior of mapper wins for backwards compatibility. if (!Boolean.TRUE.equals(input.getHeaders().get(AmqpHeaders.CONTENT_TYPE_CONVERTER_WINS))) { - String contentType = input.getHeaders().get(MessageHeaders.CONTENT_TYPE, String.class); + Object contentType = input.getHeaders().get(MessageHeaders.CONTENT_TYPE); if (contentType != null) { - messageProperties.setContentType(contentType); + messageProperties.setContentType(contentType.toString()); } } return amqpMessage; diff --git a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java index 4ca1a022..ab30e0f7 100644 --- a/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java +++ b/spring-rabbit/src/test/java/org/springframework/amqp/rabbit/annotation/ContentTypeDelegatingMessageConverterIntegrationTests.java @@ -47,6 +47,7 @@ import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.support.MessageBuilder; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.MimeType; /** * @author Gary Russell @@ -172,7 +173,7 @@ public class ContentTypeDelegatingMessageConverterIntegrationTests { @SendTo("#{@queue2.name}") public org.springframework.messaging.Message listen1(String in) { MessageBuilder builder = MessageBuilder.withPayload(in) - .setHeader(MessageHeaders.CONTENT_TYPE, "baz/qux"); + .setHeader(MessageHeaders.CONTENT_TYPE, MimeType.valueOf("baz/qux")); if ("bar".equals(in)) { builder.setHeader(AmqpHeaders.CONTENT_TYPE_CONVERTER_WINS, true); }