org.springframework.integration.splitter
Class SplitterMessageHandler

java.lang.Object
  extended by org.springframework.integration.handler.AbstractMessageHandler
      extended by org.springframework.integration.splitter.SplitterMessageHandler
All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean, org.springframework.core.Ordered, MessageHandler

public class SplitterMessageHandler
extends AbstractMessageHandler

A MessageHandler implementation for splitting a single Message into multiple reply Messages. If an object and method (or methodName) pair are provided, the provided method will be invoked and its return value will be split if it is a Collection or Array. If no object and method are provided, this handler will split the Message payload itself if it is a Collection or an Array. In either case, if the Message payload or return value from a Method invocation is not a Collection or Array, then the single Object will be returned as the payload of a single reply Message.

Author:
Mark Fisher

Field Summary
private  java.lang.String delimiters
           
 
Fields inherited from class org.springframework.integration.handler.AbstractMessageHandler
logger
 
Fields inherited from interface org.springframework.core.Ordered
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
 
Constructor Summary
SplitterMessageHandler()
           
SplitterMessageHandler(java.lang.Object object, java.lang.reflect.Method method)
           
SplitterMessageHandler(java.lang.Object object, java.lang.String methodName)
           
 
Method Summary
protected  CompositeMessage 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.
private  Message<?> createSplitMessage(java.lang.Object item, MessageHeaders requestHeaders, int sequenceNumber, int sequenceSize)
           
protected  Message<?> postProcessReplyMessage(Message<?> replyMessage, Message<?> requestMessage)
          Subclasses must implement this method to process a return value that is already a Message instance.
 void setDelimiters(java.lang.String delimiters)
          Set delimiters to use for tokenizing String values.
private  Message<?> setSplitMessageHeaders(MessageBuilder<?> builder, java.lang.Object requestMessageId, int sequenceNumber, int sequenceSize)
           
 
Methods inherited from class org.springframework.integration.handler.AbstractMessageHandler
afterPropertiesSet, getOrder, handle, setMethod, setMethodName, setObject, setOrder
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

delimiters

private volatile java.lang.String delimiters
Constructor Detail

SplitterMessageHandler

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

SplitterMessageHandler

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

SplitterMessageHandler

public SplitterMessageHandler()
Method Detail

setDelimiters

public void setDelimiters(java.lang.String delimiters)
Set delimiters to use for tokenizing String values. The default is null indicating that no tokenization should occur. If delimiters are provided, they will be applied to any String payload, or if an Object and Method have been provided, tokenization will be applied to any String return value from the invoked Method.


createReplyMessage

protected CompositeMessage createReplyMessage(java.lang.Object result,
                                              Message<?> requestMessage)
Description copied from class: AbstractMessageHandler
Subclasses must implement this method to generate the reply Message when the return value is not a Message instance.

Specified by:
createReplyMessage in class AbstractMessageHandler
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

postProcessReplyMessage

protected Message<?> postProcessReplyMessage(Message<?> replyMessage,
                                             Message<?> requestMessage)
Description copied from class: AbstractMessageHandler
Subclasses must implement this method to process a return value that is already a Message instance.

Specified by:
postProcessReplyMessage in class AbstractMessageHandler
Parameters:
replyMessage - the Message returned from an adapter method
requestMessage - the original request Message
Returns:
the Message to be sent to the reply MessageTarget

createSplitMessage

private Message<?> createSplitMessage(java.lang.Object item,
                                      MessageHeaders requestHeaders,
                                      int sequenceNumber,
                                      int sequenceSize)

setSplitMessageHeaders

private Message<?> setSplitMessageHeaders(MessageBuilder<?> builder,
                                          java.lang.Object requestMessageId,
                                          int sequenceNumber,
                                          int sequenceSize)