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 607e5858bd..138ecd37ec 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 @@ -37,6 +37,7 @@ public class FilterParser extends AbstractConsumerEndpointParser { protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MessageFilter.class); builder.addConstructorArgReference(this.parseSelector(element, parserContext)); + 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 a03f9e09eb..ad7dbc6e8b 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 @@ -257,7 +257,15 @@ - + + + + + + + + + @@ -424,12 +432,19 @@ - + Defines a Filter. + + + + + + + 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 9821fc9c2a..9bf02daac6 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 @@ -22,6 +22,8 @@ + + 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 bbad2f7d09..7563b2986e 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 @@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessageChannel; +import org.springframework.integration.message.MessageRejectedException; import org.springframework.integration.message.StringMessage; import org.springframework.integration.selector.MessageSelector; import org.springframework.test.context.ContextConfiguration; @@ -53,6 +54,9 @@ public class FilterParserTests { @Autowired @Qualifier("implementationOutput") PollableChannel implementationOutput; + @Autowired @Qualifier("exceptionInput") + MessageChannel exceptionInput; + @Test public void filterWithSelectorAdapterAccepts() { @@ -84,6 +88,18 @@ public class FilterParserTests { assertNull(reply); } + @Test + public void exceptionThrowingFilterAccepts() { + exceptionInput.send(new StringMessage("test")); + Message reply = implementationOutput.receive(0); + assertNotNull(reply); + } + + @Test(expected = MessageRejectedException.class) + public void exceptionThrowingFilterRejects() { + exceptionInput.send(new StringMessage("")); + } + public static class TestSelectorBean {