diff --git a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsAdapterParserUtils.java b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsAdapterParserUtils.java
index 6f3d819df6..06df385f98 100644
--- a/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsAdapterParserUtils.java
+++ b/spring-integration-jms/src/main/java/org/springframework/integration/jms/config/JmsAdapterParserUtils.java
@@ -57,7 +57,8 @@ abstract class JmsAdapterParserUtils {
private static final String[] JMS_TEMPLATE_ATTRIBUTES = {
"connection-factory", "message-converter", "destination-resolver", "pub-sub-domain",
- "time-to-live", "priority", "delivery-persistent", "explicit-qos-enabled", "acknowledge"
+ "time-to-live", "priority", "delivery-persistent", "explicit-qos-enabled", "acknowledge",
+ "receive-timeout"
};
@@ -123,8 +124,9 @@ abstract class JmsAdapterParserUtils {
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "priority");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "delivery-persistent");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "explicit-qos-enabled");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "receive-timeout");
Integer acknowledgeMode = parseAcknowledgeMode(element, parserContext);
- if (acknowledgeMode != null){
+ if (acknowledgeMode != null) {
builder.addPropertyValue("sessionAcknowledgeMode", acknowledgeMode);
}
diff --git a/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd b/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
index aecb4abb50..45a4945abf 100644
--- a/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
+++ b/spring-integration-jms/src/main/resources/org/springframework/integration/jms/config/spring-integration-jms-2.0.xsd
@@ -473,6 +473,14 @@
+
+
+
+ Timeout for receive calls on the template.
+ NOTE: for JmsTemplate, 0 means indefinite while -1 means no-wait.
+
+
+
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParserTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParserTests.java
index f2930dc40d..da43cf4eca 100644
--- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParserTests.java
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/JmsInboundChannelAdapterParserTests.java
@@ -151,6 +151,15 @@ public class JmsInboundChannelAdapterParserTests {
assertEquals("test [with selector: TestProperty = 'foo']", message.getPayload());
}
+ @Test
+ public void pollingAdapterWithReceiveTimeout() {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
+ "jmsInboundWithReceiveTimeout.xml", this.getClass());
+ JmsTemplate jmsTemplate =
+ TestUtils.getPropertyValue(context.getBean("adapter"), "source.jmsTemplate", JmsTemplate.class);
+ assertEquals(99, jmsTemplate.getReceiveTimeout());
+ }
+
@Test
public void pollingAdapterWithMessageConverter() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithReceiveTimeout.xml b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithReceiveTimeout.xml
new file mode 100644
index 0000000000..5d6ccdf7a5
--- /dev/null
+++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/jmsInboundWithReceiveTimeout.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+