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 @@
/* /*
* 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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) { public void setStrictContentTypeMatch(boolean strictContentTypeMatch) {
if (strictContentTypeMatch) { if (strictContentTypeMatch) {
Assert.notEmpty(getSupportedMimeTypes(), Assert.notEmpty(getSupportedMimeTypes(), "Strict match requires non-empty list of supported mime types.");
"A strict converter requires a non-empty list of supported mime types"); Assert.notNull(getContentTypeResolver(), "Strict match requires ContentTypeResolver.");
Assert.notNull(getContentTypeResolver(),
"A strict converter requires a ContentTypeResolver");
} }
this.strictContentTypeMatch = strictContentTypeMatch; this.strictContentTypeMatch = strictContentTypeMatch;
} }
@ -242,9 +240,8 @@ public abstract class AbstractMessageConverter implements MessageConverter {
return true; return true;
} }
} }
for (MimeType supported : getSupportedMimeTypes()) { for (MimeType current : getSupportedMimeTypes()) {
if (supported.getType().equals(mimeType.getType()) && if (current.getType().equals(mimeType.getType()) && current.getSubtype().equals(mimeType.getSubtype())) {
supported.getSubtype().equals(mimeType.getSubtype())) {
return true; 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
List<MessageConverter> converters = new ArrayList<MessageConverter>(); List<MessageConverter> converters = new ArrayList<MessageConverter>();
boolean registerDefaults = configureMessageConverters(converters); boolean registerDefaults = configureMessageConverters(converters);
if (registerDefaults) { if (registerDefaults) {
converters.add(new StringMessageConverter());
converters.add(new ByteArrayMessageConverter());
if (jackson2Present) { if (jackson2Present) {
DefaultContentTypeResolver resolver = new DefaultContentTypeResolver(); DefaultContentTypeResolver resolver = new DefaultContentTypeResolver();
resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON); resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON);
@ -257,8 +259,6 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC
converter.setContentTypeResolver(resolver); converter.setContentTypeResolver(resolver);
converters.add(converter); converters.add(converter);
} }
converters.add(new StringMessageConverter());
converters.add(new ByteArrayMessageConverter());
} }
return new CompositeMessageConverter(converters); return new CompositeMessageConverter(converters);
} }

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

@ -154,7 +154,7 @@ public class MessageBrokerConfigurationTests {
assertEquals(SimpMessageType.MESSAGE, headers.getMessageType()); assertEquals(SimpMessageType.MESSAGE, headers.getMessageType());
assertEquals("/foo", headers.getDestination()); assertEquals("/foo", headers.getDestination());
assertEquals("\"bar\"", new String((byte[]) message.getPayload())); assertEquals("bar", new String((byte[]) message.getPayload()));
} }
@Test @Test
@ -244,7 +244,7 @@ public class MessageBrokerConfigurationTests {
assertEquals(SimpMessageType.MESSAGE, headers.getMessageType()); assertEquals(SimpMessageType.MESSAGE, headers.getMessageType());
assertEquals("/bar", headers.getDestination()); assertEquals("/bar", headers.getDestination());
assertEquals("\"bar\"", new String((byte[]) message.getPayload())); assertEquals("bar", new String((byte[]) message.getPayload()));
} }
@Test @Test
@ -290,11 +290,11 @@ public class MessageBrokerConfigurationTests {
List<MessageConverter> converters = compositeConverter.getConverters(); List<MessageConverter> converters = compositeConverter.getConverters();
assertThat(converters.size(), Matchers.is(3)); assertThat(converters.size(), Matchers.is(3));
assertThat(converters.get(0), Matchers.instanceOf(MappingJackson2MessageConverter.class)); assertThat(converters.get(0), Matchers.instanceOf(StringMessageConverter.class));
assertThat(converters.get(1), Matchers.instanceOf(StringMessageConverter.class)); assertThat(converters.get(1), Matchers.instanceOf(ByteArrayMessageConverter.class));
assertThat(converters.get(2), 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()); assertEquals(MimeTypeUtils.APPLICATION_JSON, ((DefaultContentTypeResolver) resolver).getDefaultMimeType());
} }
@ -350,9 +350,9 @@ public class MessageBrokerConfigurationTests {
assertThat(compositeConverter.getConverters().size(), Matchers.is(4)); assertThat(compositeConverter.getConverters().size(), Matchers.is(4));
Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator(); Iterator<MessageConverter> iterator = compositeConverter.getConverters().iterator();
assertThat(iterator.next(), Matchers.is(testConverter)); 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(StringMessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(ByteArrayMessageConverter.class)); assertThat(iterator.next(), Matchers.instanceOf(ByteArrayMessageConverter.class));
assertThat(iterator.next(), Matchers.instanceOf(MappingJackson2MessageConverter.class));
} }
@Test @Test

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

@ -398,6 +398,8 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
if (convertersElement == null || Boolean.valueOf(convertersElement.getAttribute("register-defaults"))) { if (convertersElement == null || Boolean.valueOf(convertersElement.getAttribute("register-defaults"))) {
convertersDef.setSource(source); convertersDef.setSource(source);
convertersDef.add(new RootBeanDefinition(StringMessageConverter.class));
convertersDef.add(new RootBeanDefinition(ByteArrayMessageConverter.class));
if (jackson2Present) { if (jackson2Present) {
RootBeanDefinition jacksonConverterDef = new RootBeanDefinition(MappingJackson2MessageConverter.class); RootBeanDefinition jacksonConverterDef = new RootBeanDefinition(MappingJackson2MessageConverter.class);
RootBeanDefinition resolverDef = new RootBeanDefinition(DefaultContentTypeResolver.class); RootBeanDefinition resolverDef = new RootBeanDefinition(DefaultContentTypeResolver.class);
@ -405,8 +407,6 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
jacksonConverterDef.getPropertyValues().add("contentTypeResolver", resolverDef); jacksonConverterDef.getPropertyValues().add("contentTypeResolver", resolverDef);
convertersDef.add(jacksonConverterDef); convertersDef.add(jacksonConverterDef);
} }
convertersDef.add(new RootBeanDefinition(StringMessageConverter.class));
convertersDef.add(new RootBeanDefinition(ByteArrayMessageConverter.class));
} }
ConstructorArgumentValues cavs = new ConstructorArgumentValues(); ConstructorArgumentValues cavs = new ConstructorArgumentValues();

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

@ -279,11 +279,11 @@ public class MessageBrokerBeanDefinitionParserTests {
List<MessageConverter> converters = compositeMessageConverter.getConverters(); List<MessageConverter> converters = compositeMessageConverter.getConverters();
assertThat(converters.size(), Matchers.is(3)); assertThat(converters.size(), Matchers.is(3));
assertThat(converters.get(0), Matchers.instanceOf(MappingJackson2MessageConverter.class)); assertThat(converters.get(0), Matchers.instanceOf(StringMessageConverter.class));
assertThat(converters.get(1), Matchers.instanceOf(StringMessageConverter.class)); assertThat(converters.get(1), Matchers.instanceOf(ByteArrayMessageConverter.class));
assertThat(converters.get(2), 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()); 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
String payload = clientHandler.actual.get(0).getPayload(); String payload = clientHandler.actual.get(0).getPayload();
assertTrue(payload.startsWith("MESSAGE\n")); assertTrue(payload.startsWith("MESSAGE\n"));
assertTrue(payload.contains("destination:/user/queue/error\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 { finally {
session.close(); session.close();
@ -201,7 +201,7 @@ public class StompWebSocketIntegrationTests extends AbstractWebSocketIntegration
String payload = clientHandler.actual.get(0).getPayload(); String payload = clientHandler.actual.get(0).getPayload();
assertTrue(payload.startsWith("MESSAGE\n")); assertTrue(payload.startsWith("MESSAGE\n"));
assertTrue(payload.contains("destination:/topic/scopedBeanValue\n")); assertTrue(payload.contains("destination:/topic/scopedBeanValue\n"));
assertTrue(payload.endsWith("\"55\"\0")); assertTrue(payload.endsWith("55\0"));
} }
finally { finally {
session.close(); session.close();

Loading…
Cancel
Save