@SuppressWarnings("unchecked")
private <T> Message<O> toMessage(T value, Message<I> originalMessage) {
if (logger.isDebugEnabled()) {
logger.debug("Converting result back to message using the original message: " + originalMessage);
}
Message<O> returnMessage;
if(producerProperties.isUseNativeEncoding()){
if (logger.isDebugEnabled()) {
logger.debug("Native encoding enabled wrapping result to message using the original message: " + originalMessage);
}
returnMessage = wrapOutputToMessage(value,originalMessage);
}
else {
returnMessage = (Message<O>)
(value instanceof Message
? value
: this.messageConverter.toMessage(value, originalMessage.getHeaders(), this.outputClass));
if (returnMessage == null && value.getClass().isAssignableFrom(this.outputClass)) {
returnMessage = wrapOutputToMessage(value, originalMessage);
}
else if (this.bindingServiceProperties != null
&& this.bindingServiceProperties.getBindingProperties(this.functionProperties.getOutputDestinationName()) != null
&& !returnMessage.getHeaders().containsKey(MessageHeaders.CONTENT_TYPE)) {
((Map<String, Object>) ReflectionUtils.getField(MESSAGE_HEADERS_FIELD, returnMessage.getHeaders()))
.put(MessageHeaders.CONTENT_TYPE, MimeType.valueOf(bindingServiceProperties.getBindingProperties("output").getContentType()));
}
Assert.notNull(returnMessage, "Failed to convert result value '" + value + "' to message.");
}
return returnMessage;
}