diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java
index a49ede4f44..c69f6981dd 100644
--- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java
+++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/DelayerParser.java
@@ -39,7 +39,7 @@ public class DelayerParser extends AbstractConsumerEndpointParser {
parserContext.getReaderContext().error("The 'default-delay' attribute is required.", element);
return null;
}
- builder.getBeanDefinition().getConstructorArgumentValues().addIndexedArgumentValue(0, defaultDelay);
+ builder.addConstructorArgValue(defaultDelay);
String scheduler = element.getAttribute("scheduler");
if (StringUtils.hasText(scheduler)) {
builder.addConstructorArgReference(scheduler);
diff --git a/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd b/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd
index b866f6e787..9353fbb495 100644
--- a/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd
+++ b/org.springframework.integration/src/main/resources/org/springframework/integration/config/xml/spring-integration-1.0.xsd
@@ -597,6 +597,21 @@
+
+
+
+ Provide a reference to the ScheduledExecutorService instance to which this endpoint should
+ delegate when scheduling the sending of delayed Messages. If not provided, the default
+ will use a thread pool of size 1.
+
+
+
+
+
+
+
+
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml
index f4a4ef1ad7..a3afc15a29 100644
--- a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml
+++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests-context.xml
@@ -13,7 +13,7 @@
-
+
+
+
+
+
+
diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java
index b71536d668..83c41fb4bd 100644
--- a/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java
+++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/xml/DelayerParserTests.java
@@ -24,6 +24,7 @@ import org.junit.runner.RunWith;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
+import org.springframework.core.Ordered;
import org.springframework.integration.endpoint.EventDrivenConsumer;
import org.springframework.integration.handler.DelayHandler;
import org.springframework.test.context.ContextConfiguration;
@@ -42,8 +43,8 @@ public class DelayerParserTests {
@Test
- public void checkConfiguration() {
- Object endpoint = context.getBean("delayer");
+ public void defaultScheduler() {
+ Object endpoint = context.getBean("delayerWithDefaultScheduler");
assertEquals(EventDrivenConsumer.class, endpoint.getClass());
Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler");
assertEquals(DelayHandler.class, handler.getClass());
@@ -58,4 +59,19 @@ public class DelayerParserTests {
assertEquals(Boolean.TRUE, accessor.getPropertyValue("waitForTasksToCompleteOnShutdown"));
}
+
+ @Test
+ public void customScheduler() {
+ Object endpoint = context.getBean("delayerWithCustomScheduler");
+ assertEquals(EventDrivenConsumer.class, endpoint.getClass());
+ Object handler = new DirectFieldAccessor(endpoint).getPropertyValue("handler");
+ assertEquals(DelayHandler.class, handler.getClass());
+ DelayHandler delayHandler = (DelayHandler) handler;
+ assertEquals(Ordered.LOWEST_PRECEDENCE, delayHandler.getOrder());
+ DirectFieldAccessor accessor = new DirectFieldAccessor(delayHandler);
+ assertEquals(context.getBean("output"), accessor.getPropertyValue("outputChannel"));
+ assertEquals(new Long(0), accessor.getPropertyValue("defaultDelay"));
+ assertEquals(context.getBean("testScheduler"), accessor.getPropertyValue("scheduler"));
+ }
+
}