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