Change converter ordering in message broker config
Issue: SPR-11961
This commit is contained in:
parent
2ebc921545
commit
670c216d38
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2013 the original author or authors.
|
||||
* Copyright 2002-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
|
@ -118,10 +118,8 @@ public abstract class AbstractMessageConverter implements MessageConverter {
|
|||
*/
|
||||
public void setStrictContentTypeMatch(boolean strictContentTypeMatch) {
|
||||
if (strictContentTypeMatch) {
|
||||
Assert.notEmpty(getSupportedMimeTypes(),
|
||||
"A strict converter requires a non-empty list of supported mime types");
|
||||
Assert.notNull(getContentTypeResolver(),
|
||||
"A strict converter requires a ContentTypeResolver");
|
||||
Assert.notEmpty(getSupportedMimeTypes(), "Strict match requires non-empty list of supported mime types.");
|
||||
Assert.notNull(getContentTypeResolver(), "Strict match requires ContentTypeResolver.");
|
||||
}
|
||||
this.strictContentTypeMatch = strictContentTypeMatch;
|
||||
}
|
||||
|
|
@ -242,9 +240,8 @@ public abstract class AbstractMessageConverter implements MessageConverter {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
for (MimeType supported : getSupportedMimeTypes()) {
|
||||
if (supported.getType().equals(mimeType.getType()) &&
|
||||
supported.getSubtype().equals(mimeType.getSubtype())) {
|
||||
for (MimeType current : getSupportedMimeTypes()) {
|
||||
if (current.getType().equals(mimeType.getType()) && current.getSubtype().equals(mimeType.getSubtype())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -250,6 +250,8 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
|||
List<MessageConverter> converters = new ArrayList<MessageConverter>();
|
||||
boolean registerDefaults = configureMessageConverters(converters);
|
||||
if (registerDefaults) {
|
||||
converters.add(new StringMessageConverter());
|
||||
converters.add(new ByteArrayMessageConverter());
|
||||
if (jackson2Present) {
|
||||
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
|
||||
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
|
||||
|
|
@ -257,8 +259,6 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
|
|||
converter.setContentTypeResolver(resolver);
|
||||
converters.add(converter);
|
||||
}
|
||||
converters.add(new StringMessageConverter());
|
||||
converters.add(new ByteArrayMessageConverter());
|
||||
}
|
||||
return new CompositeMessageConverter(converters);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -154,7 +154,7 @@ public class MessageBrokerConfigurationTests {
|
|||
|
||||
assertEquals(SimpMessageType.MESSAGE, headers.getMessageType());
|
||||
assertEquals("/foo", headers.getDestination());
|
||||
assertEquals("\"bar\"", new String((byte[]) message.getPayload()));
|
||||
assertEquals("bar", new String((byte[]) message.getPayload()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -244,7 +244,7 @@ public class MessageBrokerConfigurationTests {
|
|||
|
||||
assertEquals(SimpMessageType.MESSAGE, headers.getMessageType());
|
||||
assertEquals("/bar", headers.getDestination());
|
||||
assertEquals("\"bar\"", new String((byte[]) message.getPayload()));
|
||||
assertEquals("bar", new String((byte[]) message.getPayload()));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -290,11 +290,11 @@ public class MessageBrokerConfigurationTests {
|
|||
|
||||
List<MessageConverter> converters = compositeConverter.getConverters();
|
||||
assertThat(converters.size(), Matchers.is(3));
|
||||
assertThat(converters.get(0), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
assertThat(converters.get(1), Matchers.instanceOf(StringMessageConverter.class));
|
||||
assertThat(converters.get(2), Matchers.instanceOf(ByteArrayMessageConverter.class));
|
||||
assertThat(converters.get(0), Matchers.instanceOf(StringMessageConverter.class));
|
||||
assertThat(converters.get(1), Matchers.instanceOf(ByteArrayMessageConverter.class));
|
||||
assertThat(converters.get(2), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
|
||||
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(0)).getContentTypeResolver();
|
||||
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(2)).getContentTypeResolver();
|
||||
assertEquals(MimeTypeUtils.APPLICATION_JSON, ((DefaultContentTypeResolver) resolver).getDefaultMimeType());
|
||||
}
|
||||
|
||||
|
|
@ -350,9 +350,9 @@ public class MessageBrokerConfigurationTests {
|
|||
assertThat(compositeConverter.getConverters().size(), Matchers.is(4));
|
||||
Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator();
|
||||
assertThat(iterator.next(), Matchers.is(testConverter));
|
||||
assertThat(iterator.next(), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
assertThat(iterator.next(), Matchers.instanceOf(StringMessageConverter.class));
|
||||
assertThat(iterator.next(), Matchers.instanceOf(ByteArrayMessageConverter.class));
|
||||
assertThat(iterator.next(), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -398,6 +398,8 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
|||
|
||||
if (convertersElement == null || Boolean.valueOf(convertersElement.getAttribute("register-defaults"))) {
|
||||
convertersDef.setSource(source);
|
||||
convertersDef.add(new RootBeanDefinition(StringMessageConverter.class));
|
||||
convertersDef.add(new RootBeanDefinition(ByteArrayMessageConverter.class));
|
||||
if (jackson2Present) {
|
||||
RootBeanDefinition jacksonConverterDef = new RootBeanDefinition(MappingJackson2MessageConverter.class);
|
||||
RootBeanDefinition resolverDef = new RootBeanDefinition(DefaultContentTypeResolver.class);
|
||||
|
|
@ -405,8 +407,6 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
|||
jacksonConverterDef.getPropertyValues().add("contentTypeResolver", resolverDef);
|
||||
convertersDef.add(jacksonConverterDef);
|
||||
}
|
||||
convertersDef.add(new RootBeanDefinition(StringMessageConverter.class));
|
||||
convertersDef.add(new RootBeanDefinition(ByteArrayMessageConverter.class));
|
||||
}
|
||||
|
||||
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
|
||||
|
|
|
|||
|
|
@ -279,11 +279,11 @@ public class MessageBrokerBeanDefinitionParserTests {
|
|||
|
||||
List<MessageConverter> converters = compositeMessageConverter.getConverters();
|
||||
assertThat(converters.size(), Matchers.is(3));
|
||||
assertThat(converters.get(0), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
assertThat(converters.get(1), Matchers.instanceOf(StringMessageConverter.class));
|
||||
assertThat(converters.get(2), Matchers.instanceOf(ByteArrayMessageConverter.class));
|
||||
assertThat(converters.get(0), Matchers.instanceOf(StringMessageConverter.class));
|
||||
assertThat(converters.get(1), Matchers.instanceOf(ByteArrayMessageConverter.class));
|
||||
assertThat(converters.get(2), Matchers.instanceOf(MappingJackson2MessageConverter.class));
|
||||
|
||||
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(0)).getContentTypeResolver();
|
||||
ContentTypeResolver resolver = ((MappingJackson2MessageConverter) converters.get(2)).getContentTypeResolver();
|
||||
assertEquals(MimeTypeUtils.APPLICATION_JSON, ((DefaultContentTypeResolver) resolver).getDefaultMimeType());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -176,7 +176,7 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
|||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
assertTrue(payload.startsWith("MESSAGE\n"));
|
||||
assertTrue(payload.contains("destination:/user/queue/error\n"));
|
||||
assertTrue(payload.endsWith("\"Got error: Bad input\"\0"));
|
||||
assertTrue(payload.endsWith("Got error: Bad input\0"));
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
|
|
@ -201,7 +201,7 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
|
|||
String payload = clientHandler.actual.get(0).getPayload();
|
||||
assertTrue(payload.startsWith("MESSAGE\n"));
|
||||
assertTrue(payload.contains("destination:/topic/scopedBeanValue\n"));
|
||||
assertTrue(payload.endsWith("\"55\"\0"));
|
||||
assertTrue(payload.endsWith("55\0"));
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
|
|
|
|||
Loading…
Reference in New Issue