INT-930 using ConversionService from channel name resolving Message routers if necessary

This commit is contained in:
Mark Fisher
2010-03-10 04:15:30 +00:00
parent 68005b5c5f
commit 88a2c65519
3 changed files with 106 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 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.
@@ -24,9 +24,11 @@ import java.util.List;
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.integration.channel.BeanFactoryChannelResolver;
import org.springframework.integration.channel.ChannelResolutionException;
import org.springframework.integration.channel.ChannelResolver;
import org.springframework.integration.context.IntegrationContextUtils;
import org.springframework.integration.core.Message;
import org.springframework.integration.core.MessageChannel;
import org.springframework.integration.core.MessagingException;
@@ -44,6 +46,8 @@ public abstract class AbstractChannelNameResolvingMessageRouter extends Abstract
private volatile ChannelResolver channelResolver;
private volatile ConversionService conversionService;
private volatile String prefix;
private volatile String suffix;
@@ -137,7 +141,16 @@ public abstract class AbstractChannelNameResolvingMessageRouter extends Abstract
addToCollection(channels, (Collection<?>) channelIndicator, message);
}
else {
throw new MessagingException("unsupported return type for router [" + channelIndicator.getClass() + "]");
if (this.conversionService == null && this.beanFactory != null) {
this.conversionService = IntegrationContextUtils.getConversionService(this.beanFactory);
}
if (this.conversionService != null
&& this.conversionService.canConvert(channelIndicator.getClass(), String.class)) {
addChannelFromString(channels, this.conversionService.convert(channelIndicator, String.class), message);
}
else {
throw new MessagingException("unsupported return type for router [" + channelIndicator.getClass() + "]");
}
}
}
}