From 118dc27b7c2258242e15b6324acc78f2fc9eeda3 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Sun, 12 Oct 2008 03:23:48 +0000 Subject: [PATCH] Refactored the 'jms-target' element to an 'outbound-channel-adapter' element within the 'jms' namespace. --- ...et.java => JmsSendingMessageConsumer.java} | 5 +- .../jms/config/JmsNamespaceHandler.java | 2 +- ...a => JmsOutboundChannelAdapterParser.java} | 30 +++++------- .../jms/config/spring-integration-jms-1.0.xsd | 5 +- ...JmsOutboundChannelAdapterParserTests.java} | 46 ++++++++++--------- ...ndWithConnectionFactoryAndDestination.xml} | 10 ++-- ...thConnectionFactoryAndDestinationName.xml} | 10 ++-- ...sOutboundWithDefaultConnectionFactory.xml} | 6 ++- ...jmsOutboundWithEmptyConnectionFactory.xml} | 10 ++-- ...ry.xml => jmsOutboundWithHeaderMapper.xml} | 10 +++- 10 files changed, 77 insertions(+), 57 deletions(-) rename org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/{JmsTarget.java => JmsSendingMessageConsumer.java} (84%) rename org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/{JmsTargetParser.java => JmsOutboundChannelAdapterParser.java} (78%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{JmsTargetParserTests.java => JmsOutboundChannelAdapterParserTests.java} (54%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{targetWithConnectionFactoryAndDestination.xml => jmsOutboundWithConnectionFactoryAndDestination.xml} (80%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{targetWithConnectionFactoryAndDestinationName.xml => jmsOutboundWithConnectionFactoryAndDestinationName.xml} (78%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{targetWithHeaderMapper.xml => jmsOutboundWithDefaultConnectionFactory.xml} (83%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{targetWithEmptyConnectionFactory.xml => jmsOutboundWithEmptyConnectionFactory.xml} (76%) rename org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/{targetWithDefaultConnectionFactory.xml => jmsOutboundWithHeaderMapper.xml} (75%) diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsTarget.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsSendingMessageConsumer.java similarity index 84% rename from org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsTarget.java rename to org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsSendingMessageConsumer.java index bab464c6f2..5b89f62a3f 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsTarget.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/JmsSendingMessageConsumer.java @@ -20,11 +20,12 @@ import org.springframework.integration.message.Message; import org.springframework.integration.message.MessageConsumer; /** - * A target for sending JMS Messages. + * A MessageConsumer that sends the converted Message payload within + * a JMS Message. * * @author Mark Fisher */ -public class JmsTarget extends AbstractJmsTemplateBasedAdapter implements MessageConsumer { +public class JmsSendingMessageConsumer extends AbstractJmsTemplateBasedAdapter implements MessageConsumer { public final void onMessage(final Message message) { if (message == null) { 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 febdfdbb72..a36614f8ea 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,7 @@ public class JmsNamespaceHandler extends NamespaceHandlerSupport { public void init() { this.registerBeanDefinitionParser("jms-gateway", new JmsGatewayParser()); this.registerBeanDefinitionParser("inbound-channel-adapter", new JmsInboundChannelAdapterParser()); - this.registerBeanDefinitionParser("jms-target", new JmsTargetParser()); + this.registerBeanDefinitionParser("outbound-channel-adapter", new JmsOutboundChannelAdapterParser()); } } diff --git a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsTargetParser.java b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParser.java similarity index 78% rename from org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsTargetParser.java rename to org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParser.java index 56f63e8a94..e0abbbce85 100644 --- a/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsTargetParser.java +++ b/org.springframework.integration.jms/src/main/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParser.java @@ -19,10 +19,11 @@ package org.springframework.integration.jms.config; import org.w3c.dom.Element; import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.jms.JmsTarget; +import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser; +import org.springframework.integration.jms.JmsSendingMessageConsumer; import org.springframework.util.StringUtils; /** @@ -30,21 +31,11 @@ import org.springframework.util.StringUtils; * * @author Mark Fisher */ -public class JmsTargetParser extends AbstractSingleBeanDefinitionParser { +public class JmsOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser { - protected Class getBeanClass(Element element) { - return JmsTarget.class; - } - - protected boolean shouldGenerateId() { - return false; - } - - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + @Override + protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(JmsSendingMessageConsumer.class); String jmsTemplate = element.getAttribute(JmsAdapterParserUtils.JMS_TEMPLATE_ATTRIBUTE); String destination = element.getAttribute(JmsAdapterParserUtils.DESTINATION_ATTRIBUTE); String destinationName = element.getAttribute(JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE); @@ -53,7 +44,7 @@ public class JmsTargetParser extends AbstractSingleBeanDefinitionParser { if (element.hasAttribute(JmsAdapterParserUtils.CONNECTION_FACTORY_ATTRIBUTE) || element.hasAttribute(JmsAdapterParserUtils.DESTINATION_ATTRIBUTE) || element.hasAttribute(JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE)) { - throw new BeanCreationException("when providing a 'jms-template' reference, none of " + + throw new BeanCreationException("When providing a 'jms-template' reference, none of " + "'connection-factory', 'destination', or 'destination-name' should be provided."); } builder.addPropertyReference(JmsAdapterParserUtils.JMS_TEMPLATE_PROPERTY, jmsTemplate); @@ -69,12 +60,13 @@ public class JmsTargetParser extends AbstractSingleBeanDefinitionParser { } } else { - throw new BeanCreationException("Either a 'jms-template' reference or " + - "one of 'destination' or 'destination-name' attributes must be provided."); + throw new BeanCreationException("Either a 'jms-template' reference " + + "or one of 'destination' or 'destination-name' must be provided."); } if (StringUtils.hasText(headerMapper)) { builder.addPropertyReference(JmsAdapterParserUtils.HEADER_MAPPER_PROPERTY, headerMapper); } + return builder.getBeanDefinition(); } } 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 2e2655a29a..1514cad7e0 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 @@ -62,15 +62,16 @@ - + - Defines a target that sends JMS Messages. + Defines an outbound JMS Message-sending Channel Adapter. + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsTargetParserTests.java b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java similarity index 54% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsTargetParserTests.java rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java index fe14a8d6a3..a3c6a1ddc9 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsTargetParserTests.java +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/JmsOutboundChannelAdapterParserTests.java @@ -26,57 +26,61 @@ import org.springframework.beans.factory.BeanCreationException; import org.springframework.beans.factory.BeanDefinitionStoreException; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.adapter.MessageHeaderMapper; -import org.springframework.integration.jms.JmsTarget; +import org.springframework.integration.endpoint.SubscribingConsumerEndpoint; /** * @author Mark Fisher */ -public class JmsTargetParserTests { +public class JmsOutboundChannelAdapterParserTests { @Test - public void testTargetWithConnectionFactoryAndDestination() { + public void adapterWithConnectionFactoryAndDestination() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "targetWithConnectionFactoryAndDestination.xml", this.getClass()); - JmsTarget target = (JmsTarget) context.getBean("target"); - DirectFieldAccessor accessor = new DirectFieldAccessor(target); + "jmsOutboundWithConnectionFactoryAndDestination.xml", this.getClass()); + SubscribingConsumerEndpoint endpoint = (SubscribingConsumerEndpoint) context.getBean("adapter"); + DirectFieldAccessor accessor = new DirectFieldAccessor( + new DirectFieldAccessor(endpoint).getPropertyValue("consumer")); assertNotNull(accessor.getPropertyValue("jmsTemplate")); } @Test - public void testTargetWithConnectionFactoryAndDestinationName() { + public void adapterWithConnectionFactoryAndDestinationName() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "targetWithConnectionFactoryAndDestinationName.xml", this.getClass()); - JmsTarget target = (JmsTarget) context.getBean("target"); - DirectFieldAccessor accessor = new DirectFieldAccessor(target); + "jmsOutboundWithConnectionFactoryAndDestinationName.xml", this.getClass()); + SubscribingConsumerEndpoint endpoint = (SubscribingConsumerEndpoint) context.getBean("adapter"); + DirectFieldAccessor accessor = new DirectFieldAccessor( + new DirectFieldAccessor(endpoint).getPropertyValue("consumer")); assertNotNull(accessor.getPropertyValue("jmsTemplate")); } @Test - public void testTargetWithDefaultConnectionFactory() { + public void adapterWithDefaultConnectionFactory() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "targetWithDefaultConnectionFactory.xml", this.getClass()); - JmsTarget target = (JmsTarget) context.getBean("target"); - DirectFieldAccessor accessor = new DirectFieldAccessor(target); + "jmsOutboundWithDefaultConnectionFactory.xml", this.getClass()); + SubscribingConsumerEndpoint endpoint = (SubscribingConsumerEndpoint) context.getBean("adapter"); + DirectFieldAccessor accessor = new DirectFieldAccessor( + new DirectFieldAccessor(endpoint).getPropertyValue("consumer")); assertNotNull(accessor.getPropertyValue("jmsTemplate")); } @Test @SuppressWarnings("unchecked") - public void testTargetWithHeaderMapper() { + public void adapterWithHeaderMapper() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "targetWithHeaderMapper.xml", this.getClass()); - JmsTarget target = (JmsTarget) context.getBean("target"); - DirectFieldAccessor accessor = new DirectFieldAccessor(target); + "jmsOutboundWithHeaderMapper.xml", this.getClass()); + SubscribingConsumerEndpoint endpoint = (SubscribingConsumerEndpoint) context.getBean("adapter"); + DirectFieldAccessor accessor = new DirectFieldAccessor( + new DirectFieldAccessor(endpoint).getPropertyValue("consumer")); MessageHeaderMapper headerMapper = (MessageHeaderMapper) accessor.getPropertyValue("headerMapper"); assertNotNull(headerMapper); assertEquals(TestMessageHeaderMapper.class, headerMapper.getClass()); } - @Test(expected=BeanDefinitionStoreException.class) - public void testTargetWithEmptyConnectionFactory() { + @Test(expected = BeanDefinitionStoreException.class) + public void adapterWithEmptyConnectionFactory() { try { - new ClassPathXmlApplicationContext("targetWithEmptyConnectionFactory.xml", this.getClass()); + new ClassPathXmlApplicationContext("jmsOutboundWithEmptyConnectionFactory.xml", this.getClass()); } catch (RuntimeException e) { assertEquals(BeanCreationException.class, e.getCause().getClass()); diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestination.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestination.xml similarity index 80% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestination.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestination.xml index d11c4d59cc..310c06ad8b 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestination.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestination.xml @@ -1,6 +1,7 @@ - + + + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestinationName.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestinationName.xml similarity index 78% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestinationName.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestinationName.xml index 48a5ef3361..9926051271 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithConnectionFactoryAndDestinationName.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithConnectionFactoryAndDestinationName.xml @@ -1,6 +1,7 @@ - + + + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithHeaderMapper.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithDefaultConnectionFactory.xml similarity index 83% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithHeaderMapper.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithDefaultConnectionFactory.xml index 36d3502b48..6f4ee67058 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithHeaderMapper.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithDefaultConnectionFactory.xml @@ -1,6 +1,7 @@ - + - + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithEmptyConnectionFactory.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithEmptyConnectionFactory.xml similarity index 76% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithEmptyConnectionFactory.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithEmptyConnectionFactory.xml index ba52a979c9..189122faef 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithEmptyConnectionFactory.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithEmptyConnectionFactory.xml @@ -1,6 +1,7 @@ - + + + diff --git a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithDefaultConnectionFactory.xml b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml similarity index 75% rename from org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithDefaultConnectionFactory.xml rename to org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml index 8f33eb6a19..93f8df9931 100644 --- a/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/targetWithDefaultConnectionFactory.xml +++ b/org.springframework.integration.jms/src/test/java/org/springframework/integration/jms/config/jmsOutboundWithHeaderMapper.xml @@ -1,6 +1,7 @@ - + + + + +