GH-2202 Remove Reflection calls for adding MessageConverters

Resolves #2202
This commit is contained in:
Oleg Zhurakousky
2021-07-26 13:52:47 +02:00
parent fa88b91b76
commit 9a8ff1521e

View File

@@ -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<String, MessageConverter> 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());
}
}