@Test
public void testDelegationOutbound() {
ContentTypeDelegatingMessageConverter converter = new ContentTypeDelegatingMessageConverter();
Jackson2JsonMessageConverter messageConverter =
new Jackson2JsonMessageConverter(ContentTypeDelegatingMessageConverterTests.class.getPackage().getName());
converter.addDelegate("foo/bar", messageConverter);
converter.addDelegate(MessageProperties.CONTENT_TYPE_JSON, messageConverter);
MessageProperties props = new MessageProperties();
Foo foo = new Foo();
foo.setFoo("bar");
Message message = converter.toMessage(foo, props);
assertEquals(MessageProperties.CONTENT_TYPE_SERIALIZED_OBJECT, message.getMessageProperties().getContentType());
Object converted = converter.fromMessage(message);
assertThat(converted, instanceOf(Foo.class));
props.setContentType("foo/bar");
message = converter.toMessage(foo, props);
assertEquals(MessageProperties.CONTENT_TYPE_JSON, message.getMessageProperties().getContentType());
assertEquals("{\"foo\":\"bar\"}", new String(message.getBody()));
converted = converter.fromMessage(message);
assertThat(converted, instanceOf(Foo.class));
converter = new ContentTypeDelegatingMessageConverter(null);
try {
converter.toMessage(foo, props);
fail("Expected exception");
}
catch (Exception e) {
assertThat(e, instanceOf(MessageConversionException.class));
assertThat(e.getMessage(), containsString("No delegate converter"));
}
}