Moved the setting of target object and method into DefaultMessageHandlerCreator instead of AbstractMessageHandlerCreator. If AbstractMessageHandlerAdapter's mapping result is null, the corresponding method argument will be null (no longer invoking getPayload() since there is a chance for null mapping results).
This commit is contained in:
@@ -150,7 +150,7 @@ public abstract class AbstractMessageHandlerAdapter implements MessageHandler, I
|
||||
}
|
||||
Object args[] = null;
|
||||
Object mappingResult = (this.methodExpectsMessage) ? message : this.messageMapper.mapMessage(message);
|
||||
if (mappingResult.getClass().isArray()) {
|
||||
if (mappingResult != null && mappingResult.getClass().isArray()) {
|
||||
args = (Object[]) mappingResult;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -21,7 +21,6 @@ import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.integration.ConfigurationException;
|
||||
import org.springframework.integration.handler.AbstractMessageHandlerAdapter;
|
||||
import org.springframework.integration.handler.MessageHandler;
|
||||
|
||||
/**
|
||||
@@ -34,11 +33,6 @@ public abstract class AbstractMessageHandlerCreator implements MessageHandlerCre
|
||||
|
||||
public final MessageHandler createHandler(Object object, Method method, Map<String, ?> attributes) {
|
||||
MessageHandler handler = this.doCreateHandler(object, method, attributes);
|
||||
if (handler instanceof AbstractMessageHandlerAdapter) {
|
||||
AbstractMessageHandlerAdapter adapter = ((AbstractMessageHandlerAdapter) handler);
|
||||
adapter.setObject(object);
|
||||
adapter.setMethodName(method.getName());
|
||||
}
|
||||
if (handler instanceof InitializingBean) {
|
||||
try {
|
||||
((InitializingBean) handler).afterPropertiesSet();
|
||||
|
||||
@@ -41,6 +41,8 @@ public class DefaultMessageHandlerCreator extends AbstractMessageHandlerCreator
|
||||
throw new ConfigurationException("exactly one method parameter is required");
|
||||
}
|
||||
DefaultMessageHandlerAdapter adapter = new DefaultMessageHandlerAdapter();
|
||||
adapter.setObject(object);
|
||||
adapter.setMethodName(method.getName());
|
||||
adapter.setMethodExpectsMessage(Message.class.isAssignableFrom(types[0]));
|
||||
return adapter;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user