Remove reflection usage to accomodate AOT
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
|
||||
package org.springframework.cloud.function.context.catalog;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
@@ -69,7 +68,6 @@ import org.springframework.messaging.support.MessageBuilder;
|
||||
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;
|
||||
|
||||
|
||||
@@ -90,8 +88,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
*
|
||||
*/
|
||||
|
||||
private final Field headersField;
|
||||
|
||||
private final Set<FunctionRegistration<?>> functionRegistrations = new CopyOnWriteArraySet<>();
|
||||
|
||||
private final Map<String, FunctionInvocationWrapper> wrappedFunctionDefinitions = new HashMap<>();
|
||||
@@ -117,8 +113,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
this.conversionService = conversionService;
|
||||
this.jsonMapper = jsonMapper;
|
||||
this.messageConverter = messageConverter;
|
||||
this.headersField = ReflectionUtils.findField(MessageHeaders.class, "headers");
|
||||
this.headersField.setAccessible(true);
|
||||
this.functionInvocationHelper = functionInvocationHelper;
|
||||
this.functionProperties = functionProperties;
|
||||
}
|
||||
@@ -782,7 +776,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
/**
|
||||
* Will wrap the result in a Message if necessary and will copy input headers to the output message.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private Object enrichInvocationResultIfNecessary(Object input, Object result) {
|
||||
if (result != null && !(result instanceof Publisher) && input instanceof Message) {
|
||||
if (result instanceof Message) {
|
||||
@@ -790,9 +783,9 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
result = functionInvocationHelper.postProcessResult(result, (Message) input);
|
||||
}
|
||||
else {
|
||||
Map<String, Object> headersMap = (Map<String, Object>) ReflectionUtils
|
||||
.getField(SimpleFunctionRegistry.this.headersField, ((Message) result).getHeaders());
|
||||
this.sanitizeHeaders(((Message) input).getHeaders()).forEach((k, v) -> headersMap.putIfAbsent(k, v));
|
||||
Map<String, Object> headersMap = new HashMap<>(((Message) result).getHeaders());
|
||||
this.sanitizeHeaders(((Message) result).getHeaders()).forEach((k, v) -> headersMap.putIfAbsent(k, v));
|
||||
result = MessageBuilder.withPayload(((Message) result).getPayload()).copyHeaders(headersMap).build();
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -1182,10 +1175,9 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
output = enhancer.apply(output);
|
||||
}
|
||||
if (this.getTarget() instanceof PassThruFunction) { // scst-2303
|
||||
Map<String, Object> headersMap = (Map<String, Object>) ReflectionUtils
|
||||
.getField(SimpleFunctionRegistry.this.headersField, ((Message) output).getHeaders());
|
||||
headersMap.put(MessageHeaders.CONTENT_TYPE, contentType[0]);
|
||||
return messageConverter.toMessage(((Message) output).getPayload(), ((Message) output).getHeaders());
|
||||
Message enrichedMessage = MessageBuilder.fromMessage((Message) output)
|
||||
.setHeader(MessageHeaders.CONTENT_TYPE, contentType[0]).build();
|
||||
return messageConverter.toMessage(enrichedMessage.getPayload(), enrichedMessage.getHeaders());
|
||||
}
|
||||
|
||||
if (ObjectUtils.isEmpty(contentType) && !(output instanceof Publisher)) {
|
||||
@@ -1380,17 +1372,17 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
private Object convertOutputMessageIfNecessary(Object output, String expectedOutputContetntType) {
|
||||
Map<String, Object> headersMap = (Map<String, Object>) ReflectionUtils
|
||||
.getField(SimpleFunctionRegistry.this.headersField, ((Message) output).getHeaders());
|
||||
String contentType = ((Message) output).getHeaders().containsKey(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER)
|
||||
? (String) ((Message) output).getHeaders().get(FunctionProperties.EXPECT_CONTENT_TYPE_HEADER)
|
||||
: expectedOutputContetntType;
|
||||
|
||||
if (StringUtils.hasText(contentType)) {
|
||||
Map<String, Object> headersMap = new HashMap(((Message) output).getHeaders());
|
||||
String[] expectedContentTypes = StringUtils.delimitedListToStringArray(contentType, ",");
|
||||
for (String expectedContentType : expectedContentTypes) {
|
||||
headersMap.put(MessageHeaders.CONTENT_TYPE, expectedContentType);
|
||||
Object result = messageConverter.toMessage(((Message) output).getPayload(), ((Message) output).getHeaders());
|
||||
Message message = MessageBuilder.withPayload(((Message) output).getPayload()).copyHeaders(headersMap).build();
|
||||
Object result = messageConverter.toMessage(message.getPayload(), message.getHeaders());
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user