diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java index 9981126c5..652d4185f 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/DefaultBinderFactory.java @@ -16,7 +16,6 @@ package org.springframework.cloud.stream.binder; -import java.lang.reflect.Field; import java.util.AbstractMap.SimpleImmutableEntry; import java.util.ArrayList; import java.util.Arrays; @@ -38,6 +37,7 @@ import org.springframework.boot.Banner.Mode; import org.springframework.boot.WebApplicationType; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.function.context.FunctionCatalog; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry; import org.springframework.cloud.stream.config.ListenerContainerCustomizer; import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration; import org.springframework.cloud.stream.config.SpelExpressionConverterConfiguration.SpelConverter; @@ -55,12 +55,10 @@ import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.StandardEnvironment; import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.converter.CompositeMessageConverter; import org.springframework.messaging.converter.MessageConverter; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; -import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; /** @@ -273,14 +271,8 @@ public class DefaultBinderFactory implements BinderFactory, DisposableBean, Appl Map messageConverters = binderProducingContext.getBeansOfType(MessageConverter.class); if (!CollectionUtils.isEmpty(messageConverters) && !ObjectUtils.isEmpty(context.getBeansOfType(FunctionCatalog.class))) { FunctionCatalog functionCatalog = this.context.getBean(FunctionCatalog.class); - try { - Field field = ReflectionUtils.findField(functionCatalog.getClass(), "messageConverter"); - field.setAccessible(true); - CompositeMessageConverter mc = (CompositeMessageConverter) field.get(functionCatalog); - mc.getConverters().addAll(0, messageConverters.values()); - } - catch (Exception e) { - logger.warn("Failed to add additional Message Converters from child context", e); + if (functionCatalog instanceof SimpleFunctionRegistry) { + ((SimpleFunctionRegistry) functionCatalog).addMessageConverters(messageConverters.values()); } }