Browse Source

Change converter ordering in message broker config

Issue: SPR-11961
pull/588/merge
Rossen Stoyanchev 12 years ago
parent
commit
670c216d38
  1. 13
      spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java
  2. 4
      spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java
  3. 14
      spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java
  4. 4
      spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java
  5. 8
      spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java
  6. 4
      spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompWebSocketIntegrationTests.java

13
spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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 { @@ -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;
}
}

4
spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java

@ -250,6 +250,8 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC @@ -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 @@ -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);
}

14
spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java

@ -154,7 +154,7 @@ public class MessageBrokerConfigurationTests { @@ -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 { @@ -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 { @@ -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 { @@ -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

4
spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java

@ -398,6 +398,8 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser { @@ -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 { @@ -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();

8
spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java

@ -279,11 +279,11 @@ public class MessageBrokerBeanDefinitionParserTests { @@ -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());
}

4
spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompWebSocketIntegrationTests.java

@ -176,7 +176,7 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration @@ -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 @@ -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…
Cancel
Save