From 7b670760bedb81f61c79c196c39da1c3708f1191 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Thu, 20 Nov 2008 22:34:15 +0000 Subject: [PATCH] Added support for a 'message-driven-channel-adapter' in the JMS namespace. Also, both the 'message-driven-channel-adapter' and the 'inbound-gateway' elements now accept a 'container' attribute with a reference to an instance of AbstractMessageListenerContainer (INT-477, INT-482). --- ...va => JmsMessageDrivenEndpointParser.java} | 32 ++++++++++++++----- .../jms/config/JmsNamespaceHandler.java | 3 +- .../jms/config/spring-integration-jms-1.0.xsd | 27 +++++++++++++++- 3 files changed, 52 insertions(+), 10 deletions(-) rename org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/{JmsInboundGatewayParser.java => JmsMessageDrivenEndpointParser.java} (81%) diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsInboundGatewayParser.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java similarity index 81% rename from org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsInboundGatewayParser.java rename to org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java index d09c668b40..67a902e4d3 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsInboundGatewayParser.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsMessageDrivenEndpointParser.java @@ -32,11 +32,12 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * Parser for the <inbound-gateway> element of the 'jms' integration namespace. + * Parser for the <message-driven-channel-adapter> element and the + * <inbound-gateway> element of the 'jms' namespace. * * @author Mark Fisher */ -public class JmsInboundGatewayParser extends AbstractSingleBeanDefinitionParser { +public class JmsMessageDrivenEndpointParser extends AbstractSingleBeanDefinitionParser { private static String[] containerAttributes = new String[] { JmsAdapterParserUtils.CONNECTION_FACTORY_PROPERTY, @@ -48,6 +49,14 @@ public class JmsInboundGatewayParser extends AbstractSingleBeanDefinitionParser }; + private final boolean expectReply; + + + public JmsMessageDrivenEndpointParser(boolean expectReply) { + this.expectReply = expectReply; + } + + @Override protected Class getBeanClass(Element element) { return JmsMessageDrivenEndpoint.class; @@ -116,14 +125,21 @@ public class JmsInboundGatewayParser extends AbstractSingleBeanDefinitionParser private String parseMessageListener(Element element, ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ChannelPublishingJmsMessageListener.class); - builder.addPropertyValue("expectReply", true); - IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-channel"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reply-timeout"); + builder.addPropertyValue("expectReply", this.expectReply); + if (this.expectReply) { + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-channel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reply-timeout"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-request-payload"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-reply-payload"); + } + else { + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "channel", "requestChannel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout", "requestTimeout"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-payload", "extractRequestPayload"); + } IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "message-converter"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "header-mapper"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-request-payload"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-reply-payload"); return BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java index 3742aa0aa7..50bd601d12 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsNamespaceHandler.java @@ -28,7 +28,8 @@ import org.springframework.integration.jms.JmsHeaders; public class JmsNamespaceHandler extends NamespaceHandlerSupport { public void init() { - this.registerBeanDefinitionParser("inbound-gateway", new JmsInboundGatewayParser()); + this.registerBeanDefinitionParser("inbound-gateway", new JmsMessageDrivenEndpointParser(true)); + this.registerBeanDefinitionParser("message-driven-channel-adapter", new JmsMessageDrivenEndpointParser(false)); this.registerBeanDefinitionParser("inbound-channel-adapter", new JmsInboundChannelAdapterParser()); this.registerBeanDefinitionParser("outbound-gateway", new JmsOutboundGatewayParser()); this.registerBeanDefinitionParser("outbound-channel-adapter", new JmsOutboundChannelAdapterParser()); diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd index 74fb26d8f5..667b28e6c2 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/spring-integration-jms-1.0.xsd @@ -18,10 +18,35 @@ ]]> + + + + Defines a JMS Message-Driven inbound Channel Adapter. + + + + + + + + + + + + + + + + + + + + + - Defines a JMS-based inbound Channel Adapter. + Defines an inbound Channel Adapter for polling a JMS Destination.