From 8ec28bb0048484e56ef1719a377e45d9e41a2b82 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 24 Oct 2019 12:19:14 +0200 Subject: [PATCH] GH-419 Fix output type conversion Ensured that we check for the output type and see if and what type of conversion needs to be applied. If output is already a message with payload byte[], then no conversion is necessary Resolves #419 --- .../BeanFactoryAwareFunctionRegistry.java | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index 0fdcc0568..518e6f7e8 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -602,10 +602,28 @@ public class BeanFactoryAwareFunctionRegistry convertedValue = acceptedContentTypes.stream() .map(acceptedContentType -> { - Object v = value instanceof Message ? ((Message) value).getPayload() : value; - return messageConverter - .toMessage(v, new MessageHeaders(Collections.singletonMap(MessageHeaders.CONTENT_TYPE, acceptedContentType))); - }) + + Message resultMessage = null; + if (value instanceof Message) { + Message message = (Message) value; + if (message.getPayload() instanceof byte[]) { + resultMessage = message; + } + else { + resultMessage = messageConverter.toMessage(message.getPayload(), message.getHeaders()); + } + } + else { + if (value instanceof byte[]) { + resultMessage = MessageBuilder.withPayload(value).setHeader(MessageHeaders.CONTENT_TYPE, acceptedContentType).build(); + } + else { + resultMessage = messageConverter + .toMessage(value, new MessageHeaders(Collections.singletonMap(MessageHeaders.CONTENT_TYPE, acceptedContentType))); + } + } + return resultMessage; + }) .filter(v -> v != null) .findFirst().orElse(null); }