Additional removals of deprecated classes from core
This commit is contained in:
@@ -16,17 +16,6 @@
|
||||
|
||||
package org.springframework.cloud.function.context.message;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.cloud.function.core.Isolated;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.support.MessageBuilder;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
* @author Oleg Zhurakousky
|
||||
@@ -47,74 +36,4 @@ public abstract class MessageUtils {
|
||||
* Value for 'target-protocol' typically use as header key.
|
||||
*/
|
||||
public static String SOURCE_TYPE = "source-type";
|
||||
|
||||
/**
|
||||
* Create a message for the handler. If the handler is a wrapper for a function in an
|
||||
* isolated class loader, then the message will be created with the target class
|
||||
* loader (therefore the {@link Message} class must be on the classpath of the target
|
||||
* class loader).
|
||||
* @param handler the function that will be applied to the message
|
||||
* @param payload the payload of the message
|
||||
* @param headers the headers for the message
|
||||
* @return a message with the correct class loader
|
||||
*/
|
||||
public static Object create(Object handler, Object payload,
|
||||
Map<String, Object> headers) {
|
||||
if (payload instanceof Message) {
|
||||
headers = new HashMap<>(headers);
|
||||
headers.putAll(((Message<?>) payload).getHeaders());
|
||||
payload = ((Message<?>) payload).getPayload();
|
||||
}
|
||||
if (!(handler instanceof Isolated)) {
|
||||
return MessageBuilder.withPayload(payload).copyHeaders(headers).build();
|
||||
}
|
||||
ClassLoader classLoader = ((Isolated) handler).getClassLoader();
|
||||
Class<?> builder = ClassUtils.resolveClassName(MessageBuilder.class.getName(),
|
||||
classLoader);
|
||||
Method withPayload = ClassUtils.getMethod(builder, "withPayload", Object.class);
|
||||
Method copyHeaders = ClassUtils.getMethod(builder, "copyHeaders", Map.class);
|
||||
Method build = ClassUtils.getMethod(builder, "build");
|
||||
Object instance = ReflectionUtils.invokeMethod(withPayload, null, payload);
|
||||
ReflectionUtils.invokeMethod(copyHeaders, instance, headers);
|
||||
return ReflectionUtils.invokeMethod(build, instance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a message from the handler into one that is safe to consume in the caller's
|
||||
* class loader. If the handler is a wrapper for a function in an isolated class
|
||||
* loader, then the message will be created with the target class loader (therefore
|
||||
* the {@link Message} class must be on the classpath of the target class loader).
|
||||
* @param handler the function that generated the message
|
||||
* @param message the message to convert
|
||||
* @return a message with the correct class loader
|
||||
*/
|
||||
public static Message<?> unpack(Object handler, Object message) {
|
||||
if (!(handler instanceof Isolated)) {
|
||||
if (message instanceof Message) {
|
||||
return (Message<?>) message;
|
||||
}
|
||||
return MessageBuilder.withPayload(message).build();
|
||||
}
|
||||
ClassLoader classLoader = ((Isolated) handler).getClassLoader();
|
||||
Class<?> type = ClassUtils.isPresent(Message.class.getName(), classLoader)
|
||||
? ClassUtils.resolveClassName(Message.class.getName(), classLoader)
|
||||
: null;
|
||||
Object payload;
|
||||
Map<String, Object> headers;
|
||||
if (type != null && type.isAssignableFrom(message.getClass())) {
|
||||
Method getPayload = ClassUtils.getMethod(type, "getPayload");
|
||||
Method getHeaders = ClassUtils.getMethod(type, "getHeaders");
|
||||
payload = ReflectionUtils.invokeMethod(getPayload, message);
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> map = (Map<String, Object>) ReflectionUtils
|
||||
.invokeMethod(getHeaders, message);
|
||||
headers = map;
|
||||
}
|
||||
else {
|
||||
payload = message;
|
||||
headers = Collections.emptyMap();
|
||||
}
|
||||
return MessageBuilder.withPayload(payload).copyHeaders(headers).build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user