INT-901 Removed shouldSplitMessages() method and factored out a protected handleResult() method instead.

This commit is contained in:
Mark Fisher
2009-12-10 22:53:53 +00:00
parent 9e4e9ba7e7
commit b47c48c9c9
2 changed files with 21 additions and 27 deletions

View File

@@ -92,15 +92,10 @@ public abstract class AbstractReplyProducingMessageHandler extends AbstractMessa
}
}
protected boolean shouldSplitReplies() {
return false;
}
/**
* {@inheritDoc}
*/
@Override
@SuppressWarnings("unchecked")
protected final void handleMessageInternal(Message<?> message) {
Object result = this.handleRequestMessage(message);
if (result == null) {
@@ -115,25 +110,14 @@ public abstract class AbstractReplyProducingMessageHandler extends AbstractMessa
}
MessageChannel replyChannel = resolveReplyChannel(message, this.outputChannel, this.channelResolver);
MessageHeaders requestHeaders = message.getHeaders();
if (this.shouldSplitReplies() && result instanceof Iterable) {
this.sendReplyMessages((Iterable) result, requestHeaders, replyChannel);
}
else {
Message<?> replyMessage = this.createReplyMessage(result, requestHeaders);
if (!this.sendReplyMessage(replyMessage, replyChannel)) {
throw new MessageDeliveryException(replyMessage,
"failed to send reply Message to channel '" + replyChannel + "'");
}
}
this.handleResult(result, requestHeaders, replyChannel);
}
private void sendReplyMessages(Iterable<?> replies, MessageHeaders requestHeaders, MessageChannel replyChannel) {
for (Object reply : replies) {
Message<?> replyMessage = this.createReplyMessage(reply, requestHeaders);
if (!this.sendReplyMessage(replyMessage, replyChannel)) {
throw new MessageDeliveryException(replyMessage,
"failed to send reply Message to channel '" + replyChannel + "'");
}
protected void handleResult(Object result, MessageHeaders requestHeaders, MessageChannel replyChannel) {
Message<?> replyMessage = this.createReplyMessage(result, requestHeaders);
if (!this.sendReplyMessage(replyMessage, replyChannel)) {
throw new MessageDeliveryException(replyMessage,
"failed to send reply Message to channel '" + replyChannel + "'");
}
}

View File

@@ -22,6 +22,7 @@ import java.util.List;
import java.util.UUID;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.core.MessageHeaders;
import org.springframework.integration.handler.AbstractReplyProducingMessageHandler;
import org.springframework.integration.message.MessageBuilder;
@@ -34,11 +35,7 @@ import org.springframework.integration.message.MessageBuilder;
public abstract class AbstractMessageSplitter extends AbstractReplyProducingMessageHandler {
@Override
protected boolean shouldSplitReplies() {
return true;
}
@Override
@SuppressWarnings("unchecked")
protected final Object handleRequestMessage(Message<?> message) {
Object result = this.splitMessage(message);
if (result == null) {
@@ -80,6 +77,19 @@ public abstract class AbstractMessageSplitter extends AbstractReplyProducingMess
return builder;
}
@Override
@SuppressWarnings("unchecked")
protected void handleResult(Object result, MessageHeaders requestHeaders, MessageChannel replyChannel) {
if (result instanceof Iterable) {
for (Object o : (Iterable<?>) result) {
super.handleResult(o, requestHeaders, replyChannel);
}
}
else {
super.handleResult(result, requestHeaders, replyChannel);
}
}
/**
* Subclasses must override this method to split the received Message. The
* return value may be a Collection or Array. The individual elements may