INT-1274 JMS inbound adapter parsing now properly handles 'request-pub-sub-domain' for <inbound-gateway> and 'pub-sub-domain' for <message-driven-channel-adapter>

This commit is contained in:
Mark Fisher
2010-07-27 12:29:34 +00:00
parent 9cbef4f13c
commit 5a854aec24
5 changed files with 85 additions and 3 deletions

View File

@@ -107,6 +107,7 @@ public class JmsMessageDrivenEndpointParser extends AbstractSingleBeanDefinition
"org.springframework.jms.listener.DefaultMessageListenerContainer");
String destinationAttribute = this.expectReply ? "request-destination" : "destination";
String destinationNameAttribute = this.expectReply ? "request-destination-name" : "destination-name";
String pubSubDomainAttribute = this.expectReply ? "request-pub-sub-domain" : "pub-sub-domain";
String destination = element.getAttribute(destinationAttribute);
String destinationName = element.getAttribute(destinationNameAttribute);
boolean hasDestination = StringUtils.hasText(destination);
@@ -123,8 +124,7 @@ public class JmsMessageDrivenEndpointParser extends AbstractSingleBeanDefinition
}
else {
builder.addPropertyValue("destinationName", destinationName);
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element,
"request-pub-sub-domain", "pubSubDomain");
IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, pubSubDomainAttribute, "pubSubDomain");
}
Integer acknowledgeMode = JmsAdapterParserUtils.parseAcknowledgeMode(element, parserContext);
if (acknowledgeMode != null) {

View File

@@ -33,6 +33,7 @@ import org.springframework.integration.core.Message;
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
import org.springframework.jms.connection.JmsTransactionManager;
import org.springframework.jms.listener.AbstractMessageListenerContainer;
import org.springframework.jms.support.destination.JmsDestinationAccessor;
/**
* @author Mark Fisher
@@ -287,4 +288,13 @@ public class JmsInboundGatewayParserTests {
assertEquals(false, accessor.getPropertyValue("explicitQosEnabledForReplies"));
}
@Test
public void gatewayWithPubSubDomain() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"jmsGatewayWithPubSubDomain.xml", this.getClass());
JmsMessageDrivenEndpoint endpoint = context.getBean("gateway", JmsMessageDrivenEndpoint.class);
JmsDestinationAccessor container = (JmsDestinationAccessor) new DirectFieldAccessor(endpoint).getPropertyValue("listenerContainer");
assertEquals(Boolean.TRUE, container.isPubSubDomain());
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2009 the original author or authors.
* Copyright 2002-2010 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,9 +21,12 @@ import static org.junit.Assert.assertNotNull;
import org.junit.Test;
import org.springframework.beans.DirectFieldAccessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.channel.PollableChannel;
import org.springframework.integration.core.Message;
import org.springframework.integration.jms.JmsMessageDrivenEndpoint;
import org.springframework.jms.support.destination.JmsDestinationAccessor;
/**
* @author Mark Fisher
@@ -42,4 +45,13 @@ public class JmsMessageDrivenChannelAdapterParserTests {
assertEquals("test [with selector: TestProperty = 'foo']", message.getPayload());
}
@Test
public void adapterWithPubSubDomain() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
"jmsInboundWithPubSubDomain.xml", this.getClass());
JmsMessageDrivenEndpoint endpoint = context.getBean("messageDrivenAdapter", JmsMessageDrivenEndpoint.class);
JmsDestinationAccessor container = (JmsDestinationAccessor) new DirectFieldAccessor(endpoint).getPropertyValue("listenerContainer");
assertEquals(Boolean.TRUE, container.isPubSubDomain());
}
}

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:si="http://www.springframework.org/schema/integration"
xmlns:jms="http://www.springframework.org/schema/integration/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/jms
http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">
<si:channel id="output">
<si:queue capacity="1"/>
</si:channel>
<jms:inbound-gateway id="gateway"
request-destination-name="testDestination"
request-pub-sub-domain="true"
request-channel="output"/>
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg>
<bean class="org.springframework.integration.jms.StubConnection">
<constructor-arg value="test"/>
</bean>
</constructor-arg>
</bean>
</beans>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:si="http://www.springframework.org/schema/integration"
xmlns:jms="http://www.springframework.org/schema/integration/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration
http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/integration/jms
http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">
<si:channel id="output">
<si:queue capacity="1"/>
</si:channel>
<jms:message-driven-channel-adapter id="messageDrivenAdapter"
destination-name="testDestination"
pub-sub-domain="true"
channel="output"/>
<bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<constructor-arg>
<bean class="org.springframework.integration.jms.StubConnection">
<constructor-arg value="test"/>
</bean>
</constructor-arg>
</bean>
</beans>