From e7e04ddca228afe213b8ec35e109f9755debecdc Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 18 Dec 2019 07:39:12 +0100 Subject: [PATCH] GH-1873 Fix null content-type in FunctionConfiguration Resolves #1873 --- .../stream/function/FunctionConfiguration.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index 9e48a340a..4eeed95e1 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -109,6 +109,7 @@ import org.springframework.util.StringUtils; * @author Ilayaperumal Gopinathan * @since 2.1 */ +@SuppressWarnings("deprecation") @Configuration @EnableConfigurationProperties(StreamFunctionProperties.class) @Import({ BindingBeansRegistrar.class, BinderFactoryAutoConfiguration.class }) @@ -130,7 +131,7 @@ public class FunctionConfiguration { FunctionBindingRegistrar bindingHolder, BinderAwareChannelResolver dynamicDestinationResolver) { boolean shouldCreateInitializer = bindableProxyFactories != null - && (applicationContext.containsBean("output") + && (applicationContext.containsBean("output") // need this to compose to existing legacy message source || ObjectUtils.isEmpty(applicationContext.getBeanNamesForAnnotation(EnableBinding.class))); return shouldCreateInitializer @@ -163,19 +164,16 @@ public class FunctionConfiguration { // gather output content types List contentTypes = new ArrayList(); Assert.isTrue(proxyFactory.getOutputs().size() == 1, "Supplier with multiple outputs is not supported at the moment."); - for (String outputName : proxyFactory.getOutputs()) { - BindingProperties bindingProperties = serviceProperties.getBindingProperties(outputName); - String contentType = bindingProperties.getProducer() != null && bindingProperties.getProducer().isUseNativeEncoding() - ? null : bindingProperties.getContentType(); - contentTypes.add(contentType); + String outputName = proxyFactory.getOutputs().iterator().next(); + + BindingProperties bindingProperties = serviceProperties.getBindingProperties(outputName); + if (!(bindingProperties.getProducer() != null && bindingProperties.getProducer().isUseNativeEncoding())) { + contentTypes.add(bindingProperties.getContentType()); } // obtain function wrapper with proper output content types functionWrapper = functionCatalog.lookup(proxyFactory.getFunctionDefinition(), contentTypes.toArray(new String[0])); Publisher beginPublishingTrigger = setupBindingTrigger(context); - //!!!!!! TEMPORARY (see assertion about multiple outputs above) - String outputName = proxyFactory.getOutputs().iterator().next(); - // end temporary if (!functionProperties.isComposeFrom() && !functionProperties.isComposeTo()) { String integrationFlowName = proxyFactory.getFunctionDefinition() + "_integrationflow"; PollableBean pollable = extractPollableAnnotation(functionProperties, context, proxyFactory);