From 4d3cf9cad4658711319c8bec87606574c0e042c8 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Wed, 27 Oct 2010 13:10:35 -0400 Subject: [PATCH] polishing --- .../context/ConversionServiceCreator.java | 28 +++++++++++---- .../context/ConverterRegistrar.java | 34 +++++++++++++------ 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/context/ConversionServiceCreator.java b/spring-integration-core/src/main/java/org/springframework/integration/context/ConversionServiceCreator.java index a7abfe12c2..c6665a36bd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/context/ConversionServiceCreator.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/context/ConversionServiceCreator.java @@ -13,9 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.context; -import org.springframework.beans.BeansException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; @@ -26,14 +29,25 @@ import org.springframework.context.support.ConversionServiceFactoryBean; /** * @author Oleg Zhurakousky - * @sini 2.0 + * @author Mark Fisher + * @since 2.0 */ class ConversionServiceCreator implements BeanFactoryPostProcessor { - public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { - if (!beanFactory.containsBean(IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME)){ - BeanDefinitionBuilder conversionServiceBuilder = BeanDefinitionBuilder.rootBeanDefinition(ConversionServiceFactoryBean.class); - BeanDefinitionHolder csHolder = new BeanDefinitionHolder(conversionServiceBuilder.getBeanDefinition(), IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME); - BeanDefinitionReaderUtils.registerBeanDefinition(csHolder, (BeanDefinitionRegistry) beanFactory); + + private final Log logger = LogFactory.getLog(this.getClass()); + + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { + if (!beanFactory.containsBean(IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME)) { + if (beanFactory instanceof BeanDefinitionRegistry) { + BeanDefinitionBuilder conversionServiceBuilder = BeanDefinitionBuilder.rootBeanDefinition(ConversionServiceFactoryBean.class); + BeanDefinitionHolder beanDefinitionHolder = new BeanDefinitionHolder( + conversionServiceBuilder.getBeanDefinition(), IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME); + BeanDefinitionReaderUtils.registerBeanDefinition(beanDefinitionHolder, (BeanDefinitionRegistry) beanFactory); + } + else if (logger.isWarnEnabled()) { + logger.warn("BeanFactory is not a BeanDefinitionRegistry implementation. Cannot register a default ConversionService."); + } } } + } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/context/ConverterRegistrar.java b/spring-integration-core/src/main/java/org/springframework/integration/context/ConverterRegistrar.java index 2888388e41..ba5e8f201f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/context/ConverterRegistrar.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/context/ConverterRegistrar.java @@ -13,39 +13,53 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.context; import java.util.Set; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.support.ConversionServiceFactory; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.util.Assert; /** + * Utility class that keeps track of a set of Converters in order to register + * them with the "integrationConversionService" upon initialization. + * * @author Oleg Zhurakousky + * @author Mark Fisher * @since 2.0 */ class ConverterRegistrar implements InitializingBean, BeanFactoryAware { + private final Set> converters; + private BeanFactory beanFactory; - - public ConverterRegistrar(Set> converters){ + + + public ConverterRegistrar(Set> converters) { this.converters = converters; } - public void afterPropertiesSet() throws Exception { - GenericConversionService conversionService = beanFactory.getBean(IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME, GenericConversionService.class); - Assert.notNull(conversionService, "can not locate '" + IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME + "' "); - ConversionServiceFactory.registerConverters(converters, conversionService); - } - public void setBeanFactory(BeanFactory beanFactory) throws BeansException { + public void setBeanFactory(BeanFactory beanFactory) { this.beanFactory = beanFactory; } - + + public void afterPropertiesSet() throws Exception { + Assert.notNull(beanFactory, "BeanFactory is required"); + ConversionService conversionService = IntegrationContextUtils.getConversionService(beanFactory); + if (conversionService instanceof GenericConversionService) { + ConversionServiceFactory.registerConverters(converters, (GenericConversionService) conversionService); + } + else { + Assert.notNull(conversionService, "Failed to locate '" + IntegrationContextUtils.INTEGRATION_CONVERSION_SERVICE_BEAN_NAME + "'"); + } + } + }