diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationConfigUtils.java b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationConfigUtils.java index a4aebfb098..9a1161044e 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationConfigUtils.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/IntegrationConfigUtils.java @@ -34,6 +34,9 @@ public final class IntegrationConfigUtils { public static final String HANDLER_ALIAS_SUFFIX = ".handler"; + // TODO: Boot constant - move to Spring Framework? + public static final String FACTORY_BEAN_OBJECT_TYPE = "factoryBeanObjectType"; + public static void registerSpelFunctionBean(BeanDefinitionRegistry registry, String functionId, String className, String methodSignature) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(SpelFunctionFactoryBean.class) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java index 0162c9a69e..d31c86953d 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 the original author or authors. + * Copyright 2014-2015 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. @@ -23,12 +23,11 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - +import org.springframework.beans.BeanMetadataAttribute; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.BeanDefinitionHolder; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; @@ -53,12 +52,11 @@ import org.springframework.util.StringUtils; * * @author Artem Bilan * @author Gary Russell + * @author Andy Wilksinson * @since 4.0 */ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar { - private static final Log logger = LogFactory.getLog(MessagingGatewayRegistrar.class); - @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if (importingClassMetadata != null && importingClassMetadata.isAnnotated(MessagingGateway.class.getName())) { @@ -163,7 +161,11 @@ public class MessagingGatewayRegistrar implements ImportBeanDefinitionRegistrar gatewayProxyBuilder.addConstructorArgValue(serviceInterface); - return new BeanDefinitionHolder(gatewayProxyBuilder.getBeanDefinition(), id); + AbstractBeanDefinition beanDefinition = gatewayProxyBuilder.getBeanDefinition(); + beanDefinition.addMetadataAttribute(new BeanMetadataAttribute(IntegrationConfigUtils.FACTORY_BEAN_OBJECT_TYPE, + serviceInterface)); + + return new BeanDefinitionHolder(beanDefinition, id); } /** diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests-context.xml index b31f5a41a7..7c012803fa 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests-context.xml @@ -49,7 +49,7 @@ reactor-environment="reactorEnvironment"/> - + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests.java index 0b47149b21..8b6b70b4f9 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/GatewayParserTests.java @@ -30,8 +30,12 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContext; +import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.task.SimpleAsyncTaskExecutor; +import org.springframework.integration.config.IntegrationConfigUtils; +import org.springframework.integration.gateway.RequestReplyExchanger; import org.springframework.integration.gateway.TestService; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.test.util.TestUtils; @@ -105,6 +109,22 @@ public class GatewayParserTests { assertNull(TestUtils.getPropertyValue(service, "asyncExecutor")); } + @Test + public void testFactoryBeanObjectTypeWithServiceInterface() throws Exception { + ConfigurableListableBeanFactory beanFactory = ((GenericApplicationContext)context).getBeanFactory(); + Object attribute = beanFactory.getMergedBeanDefinition("&oneWay").getAttribute( + IntegrationConfigUtils.FACTORY_BEAN_OBJECT_TYPE); + assertEquals(TestService.class.getName(), attribute); + } + + @Test + public void testFactoryBeanObjectTypeWithNoServiceInterface() throws Exception { + ConfigurableListableBeanFactory beanFactory = ((GenericApplicationContext)context).getBeanFactory(); + Object attribute = beanFactory.getMergedBeanDefinition("&defaultConfig").getAttribute( + IntegrationConfigUtils.FACTORY_BEAN_OBJECT_TYPE); + assertEquals(RequestReplyExchanger.class.getName(), attribute); + } + @Test public void testPromiseGateway() throws Exception { PollableChannel requestChannel = context.getBean("requestChannel", PollableChannel.class);