From 18213fcdac6fc2519c77e8c00bfeb948a39bfb4d Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Wed, 23 Dec 2009 06:45:51 +0000 Subject: [PATCH] INT-857 --- .../integration/config/xml/FilterParser.java | 6 ++++ .../filter/FilterContextTests.java | 32 +++++++++++++++++++ .../integration/filter/filterContextTests.xml | 23 +++++++++++++ 3 files changed, 61 insertions(+) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java index 3c6a7e91e1..a679f35753 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/FilterParser.java @@ -19,6 +19,7 @@ package org.springframework.integration.config.xml; import org.w3c.dom.Element; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.BeanDefinitionHolder; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; @@ -56,6 +57,11 @@ public class FilterParser extends AbstractConsumerEndpointParser { return null; } } + else { + String name = BeanDefinitionReaderUtils.generateBeanName(innerHandlerDefinition, parserContext.getRegistry(), true); + BeanDefinitionReaderUtils.registerBeanDefinition(new BeanDefinitionHolder(innerHandlerDefinition, name), parserContext.getRegistry()); + ref = name; + } String method = element.getAttribute("method"); if (!StringUtils.hasText(method)) { return ref; diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/filter/FilterContextTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/filter/FilterContextTests.java index b780c22345..1de8a23c7a 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/filter/FilterContextTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/filter/FilterContextTests.java @@ -27,9 +27,11 @@ import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessageChannel; import org.springframework.integration.message.StringMessage; +import org.springframework.integration.selector.MessageSelector; /** * @author Mark Fisher + * @author Grzegorz Grzybek */ public class FilterContextTests { @@ -55,4 +57,34 @@ public class FilterContextTests { assertEquals("foobar", reply.getPayload()); } + @Test + public void filterWithEmbeddedSelector() { + ApplicationContext context = new ClassPathXmlApplicationContext( + "filterContextTests.xml", this.getClass()); + MessageChannel input = (MessageChannel) context.getBean("input-embedded-selector"); + PollableChannel output = (PollableChannel) context.getBean("output-embedded-selector"); + input.send(new StringMessage("foo")); + Message reply = output.receive(0); + assertNull(reply); + } + + @Test + public void filterWithEmbeddedBean() { + ApplicationContext context = new ClassPathXmlApplicationContext( + "filterContextTests.xml", this.getClass()); + MessageChannel input = (MessageChannel) context.getBean("input-embedded"); + PollableChannel output = (PollableChannel) context.getBean("output-embedded"); + input.send(new StringMessage("foo")); + Message reply = output.receive(0); + assertNull(reply); + } + + + static class TestSelector implements MessageSelector { + + public boolean accept(Message message) { + return false; + } + } + } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/filter/filterContextTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/filter/filterContextTests.xml index b985edfb17..381481c54a 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/filter/filterContextTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/filter/filterContextTests.xml @@ -19,5 +19,28 @@ output-channel="output"/> + + + + + + + + + + + + + + + + + + + +