GH-1851 ensured proper ordering of custom message converters
Resolves #1851
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user