Fix potential issue when Message is not available but not needed

If an isolated function doesn't have Message in its classpath, we
will never actually need to instantiate that class. This change
makes sure we check first.
This commit is contained in:
Dave Syer
2018-04-25 07:27:33 +01:00
parent 8cf3d7bc5a
commit 59f94c1533
4 changed files with 48 additions and 7 deletions

View File

@@ -90,10 +90,12 @@ public abstract class MessageUtils {
return MessageBuilder.withPayload(message).build();
}
ClassLoader classLoader = ((Isolated) handler).getClassLoader();
Class<?> type = ClassUtils.resolveClassName(Message.class.getName(), classLoader);
Class<?> type = ClassUtils.isPresent(Message.class.getName(), classLoader)
? ClassUtils.resolveClassName(Message.class.getName(), classLoader)
: null;
Object payload;
Map<String, Object> headers;
if (type.isAssignableFrom(message.getClass())) {
if (type != null && type.isAssignableFrom(message.getClass())) {
Method getPayload = ClassUtils.getMethod(type, "getPayload");
Method getHeaders = ClassUtils.getMethod(type, "getHeaders");
payload = ReflectionUtils.invokeMethod(getPayload, message);
@@ -101,7 +103,8 @@ public abstract class MessageUtils {
Map<String, Object> map = (Map<String, Object>) ReflectionUtils
.invokeMethod(getHeaders, message);
headers = map;
} else {
}
else {
payload = message;
headers = Collections.emptyMap();
}