org.springframework.integration.handler
Class AbstractMessageHandler

java.lang.Object
  extended by org.springframework.integration.handler.AbstractMessageHandler
All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered, MessageHandler
Direct Known Subclasses:
DefaultMessageHandler, MethodInvokingTarget, RouterMessageHandler, SplitterMessageHandler, TransformerMessageHandler

public abstract class AbstractMessageHandler
extends java.lang.Object
implements MessageHandler, org.springframework.core.Ordered, org.springframework.beans.factory.InitializingBean

A base class for any MessageHandler that may act as an adapter by invoking a "plain" (not Message-aware) method for a given target object. When used as an adapter, the target Object is mandatory and either a Method reference or a 'methodName' must be provided. If no Object and Method are provided, the handler will simply process the request Message's payload.

Author:
Mark Fisher

Field Summary
private  java.lang.Object initializationMonitor
           
private  boolean initialized
           
private  MethodInvoker invoker
           
protected static org.apache.commons.logging.Log logger
           
private  java.lang.reflect.Method method
           
private  MessageMapper<java.lang.Object,java.lang.Object[]> methodArgumentMapper
           
private  boolean methodExpectsMessage
           
private  java.lang.String methodName
           
private  java.lang.Object object
           
private  int order
           
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
AbstractMessageHandler()
           
AbstractMessageHandler(java.lang.Object object, java.lang.reflect.Method method)
           
AbstractMessageHandler(java.lang.Object object, java.lang.String methodName)
           
 
Method Summary
 void afterPropertiesSet()
           
protected abstract  Message<?> createReplyMessage(java.lang.Object result, Message<?> requestMessage)
          Subclasses must implement this method to generate the reply Message when the return value is not a Message instance.
 int getOrder()
           
 Message<?> handle(Message<?> requestMessage)
           
private  java.lang.Object invokeHandlerMethod(Message<?> message)
           
private  java.lang.Object[] mapMessageToMethodArguments(Message message)
           
protected abstract  Message<?> postProcessReplyMessage(Message<?> replyMessage, Message<?> requestMessage)
          Subclasses must implement this method to process a return value that is already a Message instance.
 void setMethod(java.lang.reflect.Method method)
           
 void setMethodName(java.lang.String methodName)
           
 void setObject(java.lang.Object object)
           
 void setOrder(int order)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected static final org.apache.commons.logging.Log logger

methodExpectsMessage

private volatile boolean methodExpectsMessage

object

private volatile java.lang.Object object

method

private volatile java.lang.reflect.Method method

methodName

private volatile java.lang.String methodName

methodArgumentMapper

private volatile MessageMapper<java.lang.Object,java.lang.Object[]> methodArgumentMapper

invoker

private volatile MethodInvoker invoker

order

private volatile int order

initialized

private volatile boolean initialized

initializationMonitor

private final java.lang.Object initializationMonitor
Constructor Detail

AbstractMessageHandler

public AbstractMessageHandler(java.lang.Object object,
                              java.lang.reflect.Method method)

AbstractMessageHandler

public AbstractMessageHandler(java.lang.Object object,
                              java.lang.String methodName)

AbstractMessageHandler

public AbstractMessageHandler()
Method Detail

setObject

public void setObject(java.lang.Object object)

setMethod

public void setMethod(java.lang.reflect.Method method)

setMethodName

public void setMethodName(java.lang.String methodName)

setOrder

public void setOrder(int order)

getOrder

public int getOrder()
Specified by:
getOrder in interface org.springframework.core.Ordered

afterPropertiesSet

public void afterPropertiesSet()
Specified by:
afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean

handle

public Message<?> handle(Message<?> requestMessage)
Specified by:
handle in interface MessageHandler

postProcessReplyMessage

protected abstract Message<?> postProcessReplyMessage(Message<?> replyMessage,
                                                      Message<?> requestMessage)
Subclasses must implement this method to process a return value that is already a Message instance.

Parameters:
replyMessage - the Message returned from an adapter method
requestMessage - the original request Message
Returns:
the Message to be sent to the reply MessageTarget

createReplyMessage

protected abstract Message<?> createReplyMessage(java.lang.Object result,
                                                 Message<?> requestMessage)
Subclasses must implement this method to generate the reply Message when the return value is not a Message instance.

Parameters:
result - the return value from an adapter method, or the Message payload if not acting as an adapter
requestMessage - the original request Message
Returns:
the Message to be sent to the reply MessageTarget

invokeHandlerMethod

private java.lang.Object invokeHandlerMethod(Message<?> message)

mapMessageToMethodArguments

private java.lang.Object[] mapMessageToMethodArguments(Message message)