INT-3431: Fix RecipientListRouter.onInit()

JIRA: https://jira.spring.io/browse/INT-3431

The introduced `late channel resolution by name` via https://jira.spring.io/browse/INT-3324
has lost `onInit()` propagation from `RecipientListRouter.onInit()`
This commit is contained in:
Artem Bilan
2014-06-06 20:54:09 +03:00
committed by Gary Russell
parent f5145f531b
commit ca2ce6adac
2 changed files with 30 additions and 8 deletions

View File

@@ -54,6 +54,7 @@ import org.springframework.util.Assert;
*
* @author Mark Fisher
* @author Oleg Zhurakousky
* @author Artem Bilan
*/
public class RecipientListRouter extends AbstractMessageRouter implements InitializingBean {
@@ -64,7 +65,6 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
* Set the channels for this router. Either call this method or
* {@link #setRecipients(List)} but not both. If MessageSelectors should be
* considered, then use {@link #setRecipients(List)}.
*
* @param channels The channels.
*/
public void setChannels(List<MessageChannel> channels) {
@@ -78,7 +78,6 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
/**
* Set the recipients for this router.
*
* @param recipients The recipients.
*/
public void setRecipients(List<Recipient> recipients) {
@@ -92,8 +91,9 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
}
@Override
public void onInit() {
public void onInit() throws Exception {
Assert.notEmpty(this.recipients, "recipient list must not be empty");
super.onInit();
}
@Override
@@ -131,7 +131,7 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
}
public boolean accept(Message<?> message) {
return (this.selector != null ? this.selector.accept(message) : true);
return (this.selector == null || this.selector.accept(message));
}
}

View File

@@ -16,23 +16,24 @@
package org.springframework.integration.router;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.integration.IntegrationMessageHeaderAccessor;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.core.MessageSelector;
import org.springframework.integration.router.RecipientListRouter.Recipient;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageDeliveryException;
@@ -41,6 +42,7 @@ import org.springframework.messaging.support.GenericMessage;
/**
* @author Mark Fisher
* @author Gary Russell
* @author Artem Bilan
*/
public class RecipientListRouterTests {
@@ -409,6 +411,26 @@ public class RecipientListRouterTests {
assertNull(result2);
}
@Test
public void testDefaultChannelResolutionFromName() {
QueueChannel defaultChannel = new QueueChannel();
List<Recipient> recipients = new ArrayList<Recipient>();
recipients.add(new Recipient(new DirectChannel(), new AlwaysFalseSelector()));
RecipientListRouter router = new RecipientListRouter();
router.setRecipients(recipients);
router.setDefaultOutputChannelName("defaultChannel");
BeanFactory beanFactory = Mockito.mock(BeanFactory.class);
when(beanFactory.getBean(Mockito.eq("defaultChannel"), Mockito.eq(MessageChannel.class)))
.thenReturn(defaultChannel);
router.setBeanFactory(beanFactory);
router.afterPropertiesSet();
assertSame(defaultChannel, TestUtils.getPropertyValue(router, "defaultOutputChannel"));
Mockito.verify(beanFactory).getBean(Mockito.eq("defaultChannel"), Mockito.eq(MessageChannel.class));
}
private static class AlwaysTrueSelector implements MessageSelector {
@Override