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:
Mark Fisher
2008-05-15 20:43:00 +00:00
parent d38a7259d3
commit 397f976c08
3 changed files with 3 additions and 7 deletions

View File

@@ -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 {

View File

@@ -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();

View File

@@ -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;
}