Merge pull request #336 from garyrussell/INT-2411

INT-2411 default-output-channel Ignored on RLR
This commit is contained in:
Mark Fisher
2012-01-23 10:31:23 -05:00
4 changed files with 40 additions and 1 deletions

View File

@@ -65,6 +65,7 @@ public class RecipientListRouterParser extends AbstractConsumerEndpointParser {
IntegrationNamespaceUtils.setValueIfAttributeDefined(recipientListRouterBuilder, element, "timeout");
IntegrationNamespaceUtils.setValueIfAttributeDefined(recipientListRouterBuilder, element, "ignore-send-failures");
IntegrationNamespaceUtils.setValueIfAttributeDefined(recipientListRouterBuilder, element, "apply-sequence");
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(recipientListRouterBuilder, element, "default-output-channel");
return recipientListRouterBuilder;
}

View File

@@ -25,7 +25,6 @@ import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
@@ -382,6 +381,25 @@ public class RecipientListRouterTests {
assertNull(reply5);
}
@Test
public void routeToDefaultChannelNoSelectorHits() {
QueueChannel channel = new QueueChannel();
channel.setBeanName("channel");
QueueChannel defaultChannel = new QueueChannel();
channel.setBeanName("default");
List<Recipient> recipients = new ArrayList<Recipient>();
recipients.add(new Recipient(channel, new AlwaysFalseSelector()));
RecipientListRouter router = new RecipientListRouter();
router.setRecipients(recipients);
router.setDefaultOutputChannel(defaultChannel);
Message<String> message = new GenericMessage<String>("test");
router.handleMessage(message);
Message<?> result1 = defaultChannel.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
Message<?> result2 = channel.receive(5);
assertNull(result2);
}
private static class AlwaysTrueSelector implements MessageSelector {

View File

@@ -44,6 +44,10 @@
<recipient selector-expression="@testBean.accept(payload)" channel="channel3"/>
</recipient-list-router>
<recipient-list-router id="noSelectorMatchRouter" input-channel="noSelectorMatchInput" default-output-channel="channel1">
<recipient selector-expression="false" channel="channel2"/>
</recipient-list-router>
<beans:bean id="testBean" class="org.springframework.integration.router.config.RecipientListRouterParserTests.TestBean"/>
</beans:beans>

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.router.config;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -55,6 +56,9 @@ public class RecipientListRouterParserTests {
@Autowired
private MessageChannel simpleDynamicInput;
@Autowired
private MessageChannel noSelectorMatchInput;
@Test
public void checkMessageRouting() {
context.start();
@@ -103,6 +107,18 @@ public class RecipientListRouterParserTests {
assertNull(chanel2.receive(0));
}
@Test
public void noSelectorMatchRouter() {
context.start();
Message<?> message = new GenericMessage<Integer>(1);
noSelectorMatchInput.send(message);
PollableChannel chanel1 = (PollableChannel) context.getBean("channel1");
PollableChannel chanel2 = (PollableChannel) context.getBean("channel2");
Message<?> output = chanel1.receive(0);
assertNotNull(output);
assertTrue(output.getPayload().equals(1));
assertNull(chanel2.receive(0));
}
public static class TestBean {