diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java index f014dfb604..b7ad5178b5 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java @@ -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 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 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)); } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java index 373821c09d..5b6a0dc725 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java @@ -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 recipients = new ArrayList(); + 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