diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
index 769477ca89..1ee21fc2ba 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractConsumerEndpointParser.java
@@ -40,6 +40,7 @@ import org.springframework.util.xml.DomUtils;
*
* @author Mark Fisher
* @author Oleg Zhurakousky
+ * @author Gary Russell
*/
public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinitionParser {
@@ -88,7 +89,8 @@ public abstract class AbstractConsumerEndpointParser extends AbstractBeanDefinit
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ConsumerEndpointFactoryBean.class);
String handlerBeanName = BeanDefinitionReaderUtils.generateBeanName(handlerBeanDefinition, parserContext.getRegistry());
- parserContext.registerBeanComponent(new BeanComponentDefinition(handlerBeanDefinition, handlerBeanName));
+ String[] handlerAlias = IntegrationNamespaceUtils.generateAlias(element);
+ parserContext.registerBeanComponent(new BeanComponentDefinition(handlerBeanDefinition, handlerBeanName, handlerAlias));
builder.addPropertyReference("handler", handlerBeanName);
String inputChannelName = element.getAttribute(inputChannelAttributeName);
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java
index fe23621d39..00386f3b7d 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/AbstractOutboundChannelAdapterParser.java
@@ -76,7 +76,8 @@ public abstract class AbstractOutboundChannelAdapterParser extends AbstractChann
definition.getPropertyValues().addPropertyValue(IntegrationNamespaceUtils.ORDER, order);
}
String beanName = BeanDefinitionReaderUtils.generateBeanName(definition, parserContext.getRegistry());
- parserContext.registerBeanComponent(new BeanComponentDefinition(definition, beanName));
+ String[] handlerAlias = IntegrationNamespaceUtils.generateAlias(element);
+ parserContext.registerBeanComponent(new BeanComponentDefinition(definition, beanName, handlerAlias));
return beanName;
}
diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java
index 459d26dcc4..db4c2520da 100644
--- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java
+++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java
@@ -13,6 +13,8 @@
package org.springframework.integration.config.xml;
+import static org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.ID_ATTRIBUTE;
+
import java.util.List;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -45,6 +47,8 @@ public abstract class IntegrationNamespaceUtils {
static final String METHOD_ATTRIBUTE = "method";
static final String ORDER = "order";
static final String EXPRESSION_ATTRIBUTE = "expression";
+ public static final String HANDLER_ALIAS_SUFFIX = ".handler";
+
/**
* Configures the provided bean definition builder with a property value corresponding to the attribute whose name
@@ -254,4 +258,13 @@ public abstract class IntegrationNamespaceUtils {
rootBuilder.addPropertyValue("headerMapper", headerMapperBuilder.getBeanDefinition());
}
}
+
+ public static String[] generateAlias(Element element) {
+ String[] handlerAlias = null;
+ String id = element.getAttribute(ID_ATTRIBUTE);
+ if (StringUtils.hasText(id)) {
+ handlerAlias = new String[] {id + HANDLER_ALIAS_SUFFIX};
+ }
+ return handlerAlias;
+ }
}
diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DefaultOutboundChannelAdapterParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DefaultOutboundChannelAdapterParserTests.java
index 52d82e0b8e..dcbccb277a 100644
--- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DefaultOutboundChannelAdapterParserTests.java
+++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/DefaultOutboundChannelAdapterParserTests.java
@@ -19,11 +19,9 @@ package org.springframework.integration.config.xml;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-
import org.junit.runner.RunWith;
-
-import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.ApplicationContext;
import org.springframework.integration.config.TestConsumer;
import org.springframework.integration.handler.MethodInvokingMessageHandler;
@@ -34,6 +32,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Mark Fisher
* @author Artem Bilan
+ * @author Gary Russell
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@@ -42,6 +41,15 @@ public class DefaultOutboundChannelAdapterParserTests {
@Autowired
private ApplicationContext context;
+ @SuppressWarnings("unused") // testing auto wiring only
+ @Autowired
+ @Qualifier("org.springframework.integration.handler.MethodInvokingMessageHandler#0")
+ private MethodInvokingMessageHandler adapterByGeneratedName;
+
+ @SuppressWarnings("unused") // testing auto wiring only
+ @Autowired
+ @Qualifier("adapter.handler")
+ private MethodInvokingMessageHandler adapterByAlias;
@Test
public void checkConfig() {
diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests-context.xml
index 3e9fe45bb5..16950067e9 100644
--- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests-context.xml
+++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests-context.xml
@@ -7,7 +7,7 @@
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd">
-
+
diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests.java
index 9d5930dc87..d87b9a045c 100644
--- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests.java
+++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/ServiceActivatorParserTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2010 the original author or authors.
+ * Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,13 +22,16 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.core.MessagingTemplate;
+import org.springframework.integration.handler.ServiceActivatingHandler;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author Mark Fisher
+ * @author Gary Russell
* @since 2.0
*/
@ContextConfiguration
@@ -53,6 +56,15 @@ public class ServiceActivatorParserTests {
@Autowired
private MessageChannel multipleArgsFromPayloadInput;
+ @SuppressWarnings("unused") // testing auto wiring only
+ @Autowired
+ @Qualifier("org.springframework.integration.config.ServiceActivatorFactoryBean#0")
+ private ServiceActivatingHandler testAliasByGeneratedName;
+
+ @SuppressWarnings("unused") // testing auto wiring only
+ @Autowired
+ @Qualifier("testAlias.handler")
+ private ServiceActivatingHandler testAlias;
@Test
public void literalExpression() {
diff --git a/spring-integration-ip/src/test/java/org/springframework/integration/ip/config/ParserUnitTests.java b/spring-integration-ip/src/test/java/org/springframework/integration/ip/config/ParserUnitTests.java
index 26f5536cb0..52126ae3b2 100644
--- a/spring-integration-ip/src/test/java/org/springframework/integration/ip/config/ParserUnitTests.java
+++ b/spring-integration-ip/src/test/java/org/springframework/integration/ip/config/ParserUnitTests.java
@@ -84,15 +84,15 @@ public class ParserUnitTests {
TcpReceivingChannelAdapter tcpIn;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.udp.UnicastSendingMessageHandler#0")
+ @Qualifier(value="testOutUdp.handler")
UnicastSendingMessageHandler udpOut;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.udp.MulticastSendingMessageHandler#0")
+ @Qualifier(value="testOutUdpiMulticast.handler")
MulticastSendingMessageHandler udpOutMulticast;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.tcp.TcpSendingMessageHandler#0")
+ @Qualifier(value="testOutTcpNio.handler")
TcpSendingMessageHandler tcpOut;
@Autowired
@@ -107,9 +107,14 @@ public class ParserUnitTests {
TcpInboundGateway tcpInboundGateway2;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.tcp.TcpOutboundGateway#0")
+ @Qualifier(value="outGateway.handler")
TcpOutboundGateway tcpOutboundGateway;
+ // verify we can still inject by generated name
+ @Autowired
+ @Qualifier(value="org.springframework.integration.ip.tcp.TcpOutboundGateway#0")
+ TcpOutboundGateway tcpOutboundGatewayByGeneratedName;
+
@Autowired
EventDrivenConsumer outGateway;
@@ -160,11 +165,11 @@ public class ParserUnitTests {
AbstractConnectionFactory cfS3;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.tcp.TcpSendingMessageHandler#1")
+ @Qualifier(value="tcpNewOut1.handler")
TcpSendingMessageHandler tcpNewOut1;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.tcp.TcpSendingMessageHandler#2")
+ @Qualifier(value="tcpNewOut2.handler")
TcpSendingMessageHandler tcpNewOut2;
@Autowired
@@ -192,7 +197,7 @@ public class ParserUnitTests {
TaskScheduler sched;
@Autowired
- @Qualifier(value="org.springframework.integration.ip.tcp.TcpSendingMessageHandler#3")
+ @Qualifier(value="tcpOutClientMode.handler")
TcpSendingMessageHandler tcpOutClientMode;
@Autowired