GH-1998: StreamBridge API and conversion logic.

When native encoding is enabled, the StreamBridge API still tries
to convert using the default converter causing runtime exceptions.

Resolves https://github.com/spring-cloud/spring-cloud-stream/issues/1998
This commit is contained in:
Soby Chacko
2020-07-02 12:00:22 -04:00
parent 455ace12b6
commit 725d60bdd4

View File

@@ -36,6 +36,7 @@ import org.springframework.cloud.stream.binding.BindingService;
import org.springframework.cloud.stream.config.BindingServiceProperties;
import org.springframework.cloud.stream.messaging.DirectWithAttributesChannel;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
import org.springframework.messaging.SubscribableChannel;
import org.springframework.util.MimeType;
@@ -135,7 +136,11 @@ public final class StreamBridge implements SmartInitializingSingleton {
ProducerProperties producerProperties = this.bindingServiceProperties.getProducerProperties(bindingName);
SubscribableChannel messageChannel = this.resolveDestination(bindingName, producerProperties);
Function<Object, Object> functionToInvoke = this.functionCatalog.lookup(STREAM_BRIDGE_FUNC_NAME, outputContentType.toString());
boolean skipConversion = producerProperties.isUseNativeEncoding();
Function<Object, Object> functionToInvoke = skipConversion ? v -> MessageBuilder.withPayload(v).build() :
this.functionCatalog.lookup(STREAM_BRIDGE_FUNC_NAME, outputContentType.toString());
if (producerProperties != null && producerProperties.isPartitioned()) {
functionToInvoke = new PartitionAwareFunctionWrapper((FunctionInvocationWrapper) functionToInvoke, this.applicationContext, producerProperties);
}