INT-1850 Set Component Names for Chain Handler Elements

This commit is contained in:
Gary Russell
2011-03-25 11:42:56 -04:00
parent faee3ec1a6
commit 90bb8e6fe8
2 changed files with 31 additions and 1 deletions

View File

@@ -24,6 +24,7 @@ import org.springframework.core.Ordered;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.MessageHandlingException;
import org.springframework.integration.context.IntegrationObjectSupport;
import org.springframework.integration.core.MessageHandler;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.filter.MessageFilter;
@@ -165,6 +166,19 @@ public class MessageHandlerChain extends AbstractMessageHandler implements Messa
}
}
@Override
public void setComponentName(String componentName) {
super.setComponentName(componentName);
int i = 0;
if (this.handlers != null) {
for (MessageHandler messageHandler : this.handlers) {
if (messageHandler instanceof IntegrationObjectSupport) {
((IntegrationObjectSupport) messageHandler).setComponentName(componentName + "#handler#" + i);
}
i++; // increment, regardless of whether we assigned a component name
}
}
}
private class ReplyForwardingMessageChannel implements MessageChannel {

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.handler;
import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
@@ -26,6 +27,7 @@ import org.junit.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.context.IntegrationObjectSupport;
import org.springframework.integration.core.MessageHandler;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.support.MessageBuilder;
@@ -169,8 +171,22 @@ public class MessageHandlerChainTests {
chain.afterPropertiesSet();
}
@Test
public void componentNaming() {
List<MessageHandler> handlers = new ArrayList<MessageHandler>();
handlers.add(producer1);
handlers.add(handler1); // this one won't be named
handlers.add(producer2);
handlers.add(producer3);
MessageHandlerChain chain = new MessageHandlerChain();
chain.setHandlers(handlers);
chain.setComponentName("testChain");
assertEquals("testChain#handler#0", producer1.getComponentName());
assertEquals("testChain#handler#2", producer2.getComponentName());
assertEquals("testChain#handler#3", producer3.getComponentName());
}
private static class ProducingHandlerStub implements MessageHandler, MessageProducer {
private static class ProducingHandlerStub extends IntegrationObjectSupport implements MessageHandler, MessageProducer {
private volatile MessageChannel output;