Fine-tune default mime type in message broker config

Issue: SPR-11370
This commit is contained in:
Rossen Stoyanchev
2014-01-31 20:51:06 -05:00
parent b6da7e2795
commit f0a53ae54e
2 changed files with 34 additions and 17 deletions

View File

@@ -248,27 +248,44 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
@Bean
public CompositeMessageConverter brokerMessageConverter() {
List<MessageConverter> converters = new ArrayList<MessageConverter>();
if (configureMessageConverters(converters)) {
boolean registerDefaults = configureMessageConverters(converters);
if (registerDefaults) {
if (jackson2Present) {
converters.add(new MappingJackson2MessageConverter());
}
converters.add(new StringMessageConverter());
converters.add(new ByteArrayMessageConverter());
}
return new CompositeMessageConverter(converters, getContentTypeResolver());
ContentTypeResolver contentTypeResolver = getContentTypeResolver();
if (contentTypeResolver == null) {
contentTypeResolver = new DefaultContentTypeResolver();
if (jackson2Present && registerDefaults) {
((DefaultContentTypeResolver) contentTypeResolver).setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
}
}
return new CompositeMessageConverter(converters, contentTypeResolver);
}
/**
* Override this method to add custom message converters.
* @param messageConverters the list to add converters to, initially empty
*
* @return {@code true} if default message converters should be added to list,
* {@code false} if no more converters should be added.
*/
protected boolean configureMessageConverters(List<MessageConverter> messageConverters) {
return true;
}
/**
* Override this method to provide a custom {@link ContentTypeResolver}.
*/
protected ContentTypeResolver getContentTypeResolver() {
DefaultContentTypeResolver contentTypeResolver = new DefaultContentTypeResolver();
if (jackson2Present) {
contentTypeResolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
}
return contentTypeResolver;
return null;
}
@Bean

View File

@@ -270,15 +270,6 @@ public class MessageBrokerConfigurationTests {
assertEquals(33, taskExecutor.getKeepAliveSeconds());
}
@Test
public void messageConverter() {
CompositeMessageConverter messageConverter = this.brokerRelayContext.getBean(
"brokerMessageConverter", CompositeMessageConverter.class);
DefaultContentTypeResolver resolver = (DefaultContentTypeResolver) messageConverter.getContentTypeResolver();
assertEquals(MimeTypeUtils.APPLICATION_JSON, resolver.getDefaultMimeType());
}
@Test
public void configureMessageConvertersDefault() {
AbstractMessageBrokerConfiguration config = new AbstractMessageBrokerConfiguration() {};
@@ -289,6 +280,9 @@ public class MessageBrokerConfigurationTests {
assertThat(iterator.next(), Matchers.instanceOf(MappingJackson2MessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(StringMessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(ByteArrayMessageConverter.class));
DefaultContentTypeResolver resolver = (DefaultContentTypeResolver) compositeConverter.getContentTypeResolver();
assertEquals(MimeTypeUtils.APPLICATION_JSON, resolver.getDefaultMimeType());
}
@Test
@@ -301,11 +295,14 @@ public class MessageBrokerConfigurationTests {
return false;
}
};
CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
CompositeMessageConverter compositeConverter = config.brokerMessageConverter();
assertThat(compositeConverter.getConverters().size(), Matchers.is(1));
Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator();
assertThat(iterator.next(), Matchers.is(testConverter));
DefaultContentTypeResolver resolver = (DefaultContentTypeResolver) compositeConverter.getContentTypeResolver();
assertNull(resolver.getDefaultMimeType());
}
@Test
@@ -328,6 +325,9 @@ public class MessageBrokerConfigurationTests {
assertThat(iterator.next(), Matchers.instanceOf(MappingJackson2MessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(StringMessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(ByteArrayMessageConverter.class));
DefaultContentTypeResolver resolver = (DefaultContentTypeResolver) compositeConverter.getContentTypeResolver();
assertEquals(MimeTypeUtils.APPLICATION_JSON, resolver.getDefaultMimeType());
}
@Test