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"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+