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 1bb906fe6d..813aa566d6 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 @@ -35,6 +35,7 @@ public class FilterParser extends AbstractConsumerEndpointParser { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".filter.MessageFilter"); builder.addConstructorArgReference(this.parseSelector(element, parserContext)); + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "discard-channel"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "throw-exception-on-rejection"); return builder; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd index b06018c1b8..04a4734069 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/spring-integration-1.0.xsd @@ -807,6 +807,7 @@ + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests-context.xml index 9bf02daac6..9a7caa48cb 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests-context.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests-context.xml @@ -15,6 +15,14 @@ + + + + + + + + + + + + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests.java index 7563b2986e..6b301e76dd 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/FilterParserTests.java @@ -57,6 +57,18 @@ public class FilterParserTests { @Autowired @Qualifier("exceptionInput") MessageChannel exceptionInput; + @Autowired @Qualifier("discardInput") + MessageChannel discardInput; + + @Autowired @Qualifier("discardOutput") + PollableChannel discardOutput; + + @Autowired @Qualifier("discardAndExceptionInput") + MessageChannel discardAndExceptionInput; + + @Autowired @Qualifier("discardAndExceptionOutput") + PollableChannel discardAndExceptionOutput; + @Test public void filterWithSelectorAdapterAccepts() { @@ -100,6 +112,31 @@ public class FilterParserTests { exceptionInput.send(new StringMessage("")); } + @Test + public void filterWithDiscardChannel() { + discardInput.send(new StringMessage("")); + Message discard = discardOutput.receive(0); + assertNotNull(discard); + assertEquals("", discard.getPayload()); + assertNull(adapterOutput.receive(0)); + } + + @Test(expected = MessageRejectedException.class) + public void filterWithDiscardChannelAndException() throws Exception { + Exception exception = null; + try { + discardAndExceptionInput.send(new StringMessage("")); + } + catch (Exception e) { + exception = e; + } + Message discard = discardAndExceptionOutput.receive(0); + assertNotNull(discard); + assertEquals("", discard.getPayload()); + assertNull(adapterOutput.receive(0)); + throw exception; + } + public static class TestSelectorBean {