GH-1851 ensured proper ordering of custom message converters

Resolves #1851
This commit is contained in:
Oleg Zhurakousky
2019-11-22 12:54:28 +01:00
parent 9354dde5fc
commit 8a1c4acb1c
2 changed files with 8 additions and 17 deletions

View File

@@ -261,21 +261,7 @@ public class MessageConverterConfigurer
.getField(MessageConverterConfigurer.this.headersField,
message.getHeaders());
MimeType contentType = this.mimeType;
// /*
// * NOTE: The below code for BINDER_ORIGINAL_CONTENT_TYPE is to support legacy
// * message format established in 1.x version of the framework and should/will
// * no longer be supported in 3.x
// */
// if (message.getHeaders()
// .containsKey(BinderHeaders.BINDER_ORIGINAL_CONTENT_TYPE)) {
// Object ct = message.getHeaders()
// .get(BinderHeaders.BINDER_ORIGINAL_CONTENT_TYPE);
// contentType = ct instanceof String ? MimeType.valueOf((String) ct)
// : (ct == null ? this.mimeType : (MimeType) ct);
// headersMap.put(MessageHeaders.CONTENT_TYPE, contentType);
// headersMap.remove(BinderHeaders.BINDER_ORIGINAL_CONTENT_TYPE);
// }
// // == end legacy note
if (!message.getHeaders().containsKey(MessageHeaders.CONTENT_TYPE)) {
headersMap.put(MessageHeaders.CONTENT_TYPE, contentType);

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.stream.config;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -29,6 +30,7 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Role;
import org.springframework.integration.context.IntegrationContextUtils;
import org.springframework.integration.support.converter.ConfigurableCompositeMessageConverter;
import org.springframework.integration.support.converter.DefaultDatatypeChannelMessageConverter;
import org.springframework.messaging.converter.MessageConverter;
/**
@@ -44,11 +46,14 @@ class ContentTypeConfiguration {
ObjectProvider<ObjectMapper> objectMapperObjectProvider,
List<MessageConverter> customMessageConverters) {
customMessageConverters = customMessageConverters.stream()
.filter(c -> !(c instanceof DefaultDatatypeChannelMessageConverter)).collect(Collectors.toList());
CompositeMessageConverterFactory factory =
new CompositeMessageConverterFactory(new ArrayList<>(), objectMapperObjectProvider.getIfAvailable(ObjectMapper::new));
ArrayList<MessageConverter> messageConverters = new ArrayList<>(factory.getMessageConverterForAllRegistered().getConverters());
messageConverters.addAll(customMessageConverters);
ArrayList<MessageConverter> messageConverters = new ArrayList<>(customMessageConverters);
messageConverters.addAll(factory.getMessageConverterForAllRegistered().getConverters());
return new ConfigurableCompositeMessageConverter(messageConverters);
}