diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/config/RabbitNamespaceUtils.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/config/RabbitNamespaceUtils.java
index cc7324c4..e2ca73e1 100644
--- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/config/RabbitNamespaceUtils.java
+++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/config/RabbitNamespaceUtils.java
@@ -52,6 +52,8 @@ public class RabbitNamespaceUtils {
private static final String PREFETCH_ATTRIBUTE = "prefetch";
+ private static final String CHANNEL_TRANSACTED_ATTRIBUTE = "channel-transacted";
+
private static final String TRANSACTION_SIZE_ATTRIBUTE = "transaction-size";
private static final String PHASE_ATTRIBUTE = "phase";
@@ -110,6 +112,16 @@ public class RabbitNamespaceUtils {
containerDef.getPropertyValues().add("prefetchCount", new TypedStringValue(prefetch));
}
+ String channelTransacted = containerEle.getAttribute(CHANNEL_TRANSACTED_ATTRIBUTE);
+ if (StringUtils.hasText(channelTransacted)) {
+ // Note: a placeholder will pass this test, but if it resolves to true, it will be caught during container initialization
+ if (acknowledgeMode.isAutoAck() && channelTransacted.equalsIgnoreCase("true")) {
+ parserContext.getReaderContext().error(
+ "Listener Container - cannot set channel-transacted with acknowledge='NONE'", containerEle);
+ }
+ containerDef.getPropertyValues().add("channelTransacted", new TypedStringValue(channelTransacted));
+ }
+
String transactionSize = containerEle.getAttribute(TRANSACTION_SIZE_ATTRIBUTE);
if (StringUtils.hasText(transactionSize)) {
containerDef.getPropertyValues().add("txSize", new TypedStringValue(transactionSize));
diff --git a/spring-rabbit/src/main/resources/org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd b/spring-rabbit/src/main/resources/org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd
index 07ed22ba..a78aaaa5 100644
--- a/spring-rabbit/src/main/resources/org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd
+++ b/spring-rabbit/src/main/resources/org/springframework/amqp/rabbit/config/spring-rabbit-1.1.xsd
@@ -605,6 +605,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/spring-rabbit/src/test/resources/org/springframework/amqp/rabbit/config/ListenerContainerParserTests-fail-context.xml b/spring-rabbit/src/test/resources/org/springframework/amqp/rabbit/config/ListenerContainerParserTests-fail-context.xml
new file mode 100644
index 00000000..b4bb0490
--- /dev/null
+++ b/spring-rabbit/src/test/resources/org/springframework/amqp/rabbit/config/ListenerContainerParserTests-fail-context.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+