GH-1533 Fixed regression in ObjectStringMessageConverter

Resolves #1533
This commit is contained in:
Oleg Zhurakousky
2018-11-21 19:26:26 +01:00
parent 8b70826c2c
commit 7c529336a9
2 changed files with 74 additions and 2 deletions

View File

@@ -57,7 +57,7 @@ public class ObjectStringMessageConverter extends AbstractMessageConverter {
@Override
protected boolean supportsMimeType(@Nullable MessageHeaders headers) {
MimeType mimeType = getMimeType(headers);
if (mimeType != null && !super.supportsMimeType(headers)) {
if (mimeType != null) {
for (MimeType current : getSupportedMimeTypes()) {
if (current.getType().equals(mimeType.getType())) {
return true;
@@ -65,7 +65,7 @@ public class ObjectStringMessageConverter extends AbstractMessageConverter {
}
}
return false;
return super.supportsMimeType(headers);
}
protected Object convertFromInternal(Message<?> message, Class<?> targetClass, Object conversionHint) {

View File

@@ -232,6 +232,52 @@ public class ContentTypeTckTests {
assertEquals(jsonPayload, new String(outputMessage.getPayload(), StandardCharsets.UTF_8));
}
@Test
public void typelessToPojoWithTextHeaderContentTypeBinding() {
ApplicationContext context = new SpringApplicationBuilder(TypelessToPojoStreamListener.class)
.web(WebApplicationType.NONE)
.run("--spring.jmx.enabled=false");
InputDestination source = context.getBean(InputDestination.class);
OutputDestination target = context.getBean(OutputDestination.class);
String jsonPayload = "{\"name\":\"oleg\"}";
source.send(MessageBuilder.withPayload(jsonPayload.getBytes()).setHeader(MessageHeaders.CONTENT_TYPE, MimeType.valueOf("text/plain")).build());
Message<byte[]> outputMessage = target.receive();
assertEquals(MimeTypeUtils.APPLICATION_JSON, outputMessage.getHeaders().get(MessageHeaders.CONTENT_TYPE));
assertEquals(jsonPayload, new String(outputMessage.getPayload(), StandardCharsets.UTF_8));
}
@Test
public void typelessToPojoOutboundContentTypeBinding() {
ApplicationContext context = new SpringApplicationBuilder(TypelessToMessageStreamListener.class)
.web(WebApplicationType.NONE)
.run("--spring.cloud.stream.bindings.output.contentType=text/plain", "--spring.jmx.enabled=false");
InputDestination source = context.getBean(InputDestination.class);
OutputDestination target = context.getBean(OutputDestination.class);
String jsonPayload = "{\"name\":\"oleg\"}";
//source.send(MessageBuilder.withPayload(jsonPayload.getBytes()).setHeader(MessageHeaders.CONTENT_TYPE, MimeType.valueOf("text/*")).build());
source.send(MessageBuilder.withPayload(jsonPayload.getBytes()).setHeader("contentType", new MimeType("text", "plain")).build());
Message<byte[]> outputMessage = target.receive();
//assertEquals(MimeTypeUtils.APPLICATION_JSON, outputMessage.getHeaders().get(MessageHeaders.CONTENT_TYPE));
assertEquals(jsonPayload, new String(outputMessage.getPayload(), StandardCharsets.UTF_8));
}
@Test
public void outboundMessageWithTextContentTypeOnly() {
ApplicationContext context = new SpringApplicationBuilder(TypelessToMessageTextOnlyContentTypeStreamListener.class)
.web(WebApplicationType.NONE)
.run("--spring.jmx.enabled=false");
InputDestination source = context.getBean(InputDestination.class);
OutputDestination target = context.getBean(OutputDestination.class);
String jsonPayload = "{\"name\":\"oleg\"}";
//source.send(MessageBuilder.withPayload(jsonPayload.getBytes()).setHeader(MessageHeaders.CONTENT_TYPE, MimeType.valueOf("text/*")).build());
source.send(MessageBuilder.withPayload(jsonPayload.getBytes()).setHeader("contentType", new MimeType("text")).build());
Message<byte[]> outputMessage = target.receive();
//assertEquals(MimeTypeUtils.APPLICATION_JSON, outputMessage.getHeaders().get(MessageHeaders.CONTENT_TYPE));
assertEquals(jsonPayload, new String(outputMessage.getPayload(), StandardCharsets.UTF_8));
}
@Test
@@ -566,6 +612,32 @@ public class ContentTypeTckTests {
@EnableBinding(Processor.class)
@Import(TestChannelBinderConfiguration.class)
<<<<<<< HEAD
=======
@EnableAutoConfiguration
public static class TypelessToMessageStreamListener {
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Message<?> echo(Object value) throws Exception {
return MessageBuilder.withPayload(value.toString()).setHeader("contentType", new MimeType("text", "plain")).build();
}
}
@EnableBinding(Processor.class)
@Import(TestChannelBinderConfiguration.class)
@EnableAutoConfiguration
public static class TypelessToMessageTextOnlyContentTypeStreamListener {
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Message<?> echo(Object value) throws Exception {
return MessageBuilder.withPayload(value.toString()).setHeader("contentType", new MimeType("text")).build();
}
}
@EnableBinding(Processor.class)
@Import(TestChannelBinderConfiguration.class)
@EnableAutoConfiguration
>>>>>>> f6381d72... GH-1533 Fixed regression in ObjectStringMessageConverter
public static class ByteArrayToByteArrayStreamListener {
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)