diff --git a/spring-integration-adapters/src/main/java/META-INF/spring-integration.parsers b/spring-integration-adapters/src/main/java/META-INF/spring-integration.parsers index d282842c05..5074158088 100644 --- a/spring-integration-adapters/src/main/java/META-INF/spring-integration.parsers +++ b/spring-integration-adapters/src/main/java/META-INF/spring-integration.parsers @@ -5,9 +5,9 @@ file-target=org.springframework.integration.adapter.file.config.FileTargetParser ftp-source=org.springframework.integration.adapter.ftp.config.FtpSourceParser httpinvoker-source=org.springframework.integration.adapter.httpinvoker.config.HttpInvokerSourceAdapterParser httpinvoker-target=org.springframework.integration.adapter.httpinvoker.config.HttpInvokerTargetAdapterParser -jms-source=org.springframework.integration.adapter.jms.config.JmsSourceAdapterParser -jms-target=org.springframework.integration.adapter.jms.config.JmsTargetParser jms-gateway=org.springframework.integration.adapter.jms.config.JmsGatewayParser +jms-source=org.springframework.integration.adapter.jms.config.JmsSourceParser +jms-target=org.springframework.integration.adapter.jms.config.JmsTargetParser mail-target=org.springframework.integration.adapter.mail.config.MailTargetParser rmi-source=org.springframework.integration.adapter.rmi.config.RmiSourceAdapterParser rmi-target=org.springframework.integration.adapter.rmi.config.RmiTargetAdapterParser \ No newline at end of file diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsMessageDrivenSourceAdapter.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java similarity index 95% rename from spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsMessageDrivenSourceAdapter.java rename to spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java index aa0c83a11c..7407b62d35 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsMessageDrivenSourceAdapter.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsGateway.java @@ -24,8 +24,6 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.context.Lifecycle; import org.springframework.core.task.TaskExecutor; import org.springframework.integration.ConfigurationException; -import org.springframework.integration.channel.MessageChannel; -import org.springframework.integration.channel.RequestReplyTemplate; import org.springframework.integration.gateway.MessagingGateway; import org.springframework.jms.listener.AbstractMessageListenerContainer; import org.springframework.jms.listener.DefaultMessageListenerContainer; @@ -39,7 +37,7 @@ import org.springframework.util.Assert; * * @author Mark Fisher */ -public class JmsMessageDrivenSourceAdapter extends MessagingGateway implements Lifecycle, DisposableBean { +public class JmsGateway extends MessagingGateway implements Lifecycle, DisposableBean { private volatile AbstractMessageListenerContainer container; diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsPollableSource.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsSource.java similarity index 79% rename from spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsPollableSource.java rename to spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsSource.java index 31004438b3..e7a4863734 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsPollableSource.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/JmsSource.java @@ -27,22 +27,22 @@ import org.springframework.jms.core.JmsTemplate; /** * A source for receiving JMS Messages with a polling listener. This source is * only recommended for very low message volume. Otherwise, the - * {@link JmsMessageDrivenSourceAdapter} that uses Spring's MessageListener + * {@link JmsGateway} that uses Spring's MessageListener * container support is highly recommended. * * @author Mark Fisher */ -public class JmsPollableSource extends AbstractJmsTemplateBasedAdapter implements Source { +public class JmsSource extends AbstractJmsTemplateBasedAdapter implements Source { - public JmsPollableSource(JmsTemplate jmsTemplate) { + public JmsSource(JmsTemplate jmsTemplate) { super(jmsTemplate); } - public JmsPollableSource(ConnectionFactory connectionFactory, Destination destination) { + public JmsSource(ConnectionFactory connectionFactory, Destination destination) { super(connectionFactory, destination); } - public JmsPollableSource(ConnectionFactory connectionFactory, String destinationName) { + public JmsSource(ConnectionFactory connectionFactory, String destinationName) { super(connectionFactory, destinationName); } diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java index eb8409dba7..de0e5bc449 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsGatewayParser.java @@ -24,7 +24,7 @@ import org.springframework.beans.factory.BeanCreationException; 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.adapter.jms.JmsMessageDrivenSourceAdapter; +import org.springframework.integration.adapter.jms.JmsGateway; import org.springframework.util.StringUtils; /** @@ -36,7 +36,7 @@ public class JmsGatewayParser extends AbstractSingleBeanDefinitionParser { @Override protected Class getBeanClass(Element element) { - return JmsMessageDrivenSourceAdapter.class; + return JmsGateway.class; } @Override @@ -55,7 +55,7 @@ public class JmsGatewayParser extends AbstractSingleBeanDefinitionParser { String destinationName = element.getAttribute(JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE); String messageConverter = element.getAttribute(JmsAdapterParserUtils.MESSAGE_CONVERTER_ATTRIBUTE); if (StringUtils.hasText(element.getAttribute(JmsAdapterParserUtils.JMS_TEMPLATE_ATTRIBUTE))) { - throw new BeanCreationException(JmsMessageDrivenSourceAdapter.class.getSimpleName() + + throw new BeanCreationException(JmsGateway.class.getSimpleName() + " does not accept a '" + JmsAdapterParserUtils.JMS_TEMPLATE_ATTRIBUTE + "' reference. One of '" + JmsAdapterParserUtils.DESTINATION_ATTRIBUTE + "' or '" + JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE + "' must be provided."); diff --git a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParser.java b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceParser.java similarity index 91% rename from spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParser.java rename to spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceParser.java index e214d008b2..dc50cbf984 100644 --- a/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParser.java +++ b/spring-integration-adapters/src/main/java/org/springframework/integration/adapter/jms/config/JmsSourceParser.java @@ -16,8 +16,6 @@ package org.springframework.integration.adapter.jms.config; -import javax.jms.Session; - import org.w3c.dom.Element; import org.springframework.beans.factory.BeanCreationException; @@ -25,8 +23,7 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.adapter.jms.JmsMessageDrivenSourceAdapter; -import org.springframework.integration.adapter.jms.JmsPollableSource; +import org.springframework.integration.adapter.jms.JmsSource; import org.springframework.util.StringUtils; /** @@ -34,7 +31,7 @@ import org.springframework.util.StringUtils; * * @author Mark Fisher */ -public class JmsSourceAdapterParser extends AbstractBeanDefinitionParser { +public class JmsSourceParser extends AbstractBeanDefinitionParser { protected boolean shouldGenerateId() { return false; @@ -46,7 +43,7 @@ public class JmsSourceAdapterParser extends AbstractBeanDefinitionParser { @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { - BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(JmsPollableSource.class); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(JmsSource.class); String jmsTemplate = element.getAttribute(JmsAdapterParserUtils.JMS_TEMPLATE_ATTRIBUTE); String destination = element.getAttribute(JmsAdapterParserUtils.DESTINATION_ATTRIBUTE); String destinationName = element.getAttribute(JmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE); diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java new file mode 100644 index 0000000000..722718b5aa --- /dev/null +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsGatewayParserTests.java @@ -0,0 +1,116 @@ +/* + * Copyright 2002-2008 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.adapter.jms.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; + +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.adapter.jms.JmsGateway; +import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.message.Message; + +/** + * @author Mark Fisher + */ +public class JmsGatewayParserTests { + + @Test + public void testGatewayWithConnectionFactoryAndDestination() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "messageDrivenAdapterWithConnectionFactoryAndDestination.xml", this.getClass()); + MessageChannel channel = new QueueChannel(1); + JmsGateway source = (JmsGateway) context.getBean("jmsSource"); + source.setRequestChannel(channel); + context.start(); + Message message = channel.receive(3000); + assertNotNull("message should not be null", message); + assertEquals("message-driven-test", message.getPayload()); + context.stop(); + } + + @Test + public void testGatewayWithConnectionFactoryAndDestinationName() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "messageDrivenAdapterWithConnectionFactoryAndDestinationName.xml", this.getClass()); + MessageChannel channel = new QueueChannel(1); + JmsGateway source = (JmsGateway) context.getBean("jmsSource"); + source.setRequestChannel(channel); + context.start(); + assertEquals(JmsGateway.class, source.getClass()); + Message message = channel.receive(3000); + assertNotNull("message should not be null", message); + assertEquals("message-driven-test", message.getPayload()); + context.stop(); + } + + @Test + public void testGatewayWithMessageConverter() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "messageDrivenAdapterWithMessageConverter.xml", this.getClass()); + MessageChannel channel = new QueueChannel(1); + JmsGateway source = (JmsGateway) context.getBean("jmsSource"); + source.setRequestChannel(channel); + context.start(); + Message message = channel.receive(3000); + assertNotNull("message should not be null", message); + assertEquals("converted-test-message", message.getPayload()); + context.stop(); + } + + @Test(expected=BeanDefinitionStoreException.class) + public void testGatewayWithConnectionFactoryOnly() { + try { + new ClassPathXmlApplicationContext("messageDrivenAdapterWithConnectionFactoryOnly.xml", this.getClass()); + } + catch (RuntimeException e) { + assertEquals(BeanCreationException.class, e.getCause().getClass()); + throw e; + } + } + + @Test(expected=BeanDefinitionStoreException.class) + public void testGatewayWithEmptyConnectionFactory() { + try { + new ClassPathXmlApplicationContext("messageDrivenAdapterWithEmptyConnectionFactory.xml", this.getClass()); + } + catch (RuntimeException e) { + assertEquals(BeanCreationException.class, e.getCause().getClass()); + throw e; + } + } + + @Test + public void testGatewayWithDefaultConnectionFactory() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "messageDrivenAdapterWithDefaultConnectionFactory.xml", this.getClass()); + MessageChannel channel = new QueueChannel(1); + JmsGateway source = (JmsGateway) context.getBean("jmsSource"); + source.setRequestChannel(channel); + context.start(); + Message message = channel.receive(3000); + assertNotNull("message should not be null", message); + assertEquals("message-driven-test", message.getPayload()); + context.stop(); + } + +} diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java deleted file mode 100644 index 3e2925d70b..0000000000 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceAdapterParserTests.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2002-2008 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.adapter.jms.config; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import javax.jms.JMSException; -import javax.jms.Session; -import javax.jms.TextMessage; - -import org.junit.Test; - -import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.BeanDefinitionStoreException; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.adapter.jms.JmsMessageDrivenSourceAdapter; -import org.springframework.integration.adapter.jms.JmsPollableSource; -import org.springframework.integration.channel.MessageChannel; -import org.springframework.integration.channel.QueueChannel; -import org.springframework.integration.endpoint.PollingSourceEndpoint; -import org.springframework.integration.message.Message; -import org.springframework.jms.support.converter.MessageConversionException; -import org.springframework.jms.support.converter.MessageConverter; - -/** - * @author Mark Fisher - */ -public class JmsSourceAdapterParserTests { - - @Test - public void testPollingAdapterWithJmsTemplate() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingAdapterWithJmsTemplate.xml", this.getClass()); - JmsPollableSource source = (JmsPollableSource) context.getBean("jmsSource"); - Message message = source.receive(); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - } - - @Test - public void testPollingAdapterWithConnectionFactoryAndDestination() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingAdapterWithConnectionFactoryAndDestination.xml", this.getClass()); - JmsPollableSource source = (JmsPollableSource) context.getBean("jmsSource"); - Message message = source.receive(); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - context.stop(); - } - - @Test - public void testPollingAdapterWithConnectionFactoryAndDestinationName() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingAdapterWithConnectionFactoryAndDestinationName.xml", this.getClass()); - JmsPollableSource source = (JmsPollableSource) context.getBean("jmsSource"); - Message message = source.receive(); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - context.stop(); - } - - @Test - public void testMessageDrivenAdapterWithConnectionFactoryAndDestination() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "messageDrivenAdapterWithConnectionFactoryAndDestination.xml", this.getClass()); - MessageChannel channel = new QueueChannel(1); - JmsMessageDrivenSourceAdapter source = (JmsMessageDrivenSourceAdapter) context.getBean("jmsSource"); - source.setRequestChannel(channel); - context.start(); - Message message = channel.receive(3000); - assertNotNull("message should not be null", message); - assertEquals("message-driven-test", message.getPayload()); - context.stop(); - } - - @Test - public void testMessageDrivenAdapterWithConnectionFactoryAndDestinationName() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "messageDrivenAdapterWithConnectionFactoryAndDestinationName.xml", this.getClass()); - MessageChannel channel = new QueueChannel(1); - JmsMessageDrivenSourceAdapter source = (JmsMessageDrivenSourceAdapter) context.getBean("jmsSource"); - source.setRequestChannel(channel); - context.start(); - assertEquals(JmsMessageDrivenSourceAdapter.class, source.getClass()); - Message message = channel.receive(3000); - assertNotNull("message should not be null", message); - assertEquals("message-driven-test", message.getPayload()); - context.stop(); - } - - @Test - public void testMessageDrivenAdapterWithMessageConverter() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "messageDrivenAdapterWithMessageConverter.xml", this.getClass()); - MessageChannel channel = new QueueChannel(1); - JmsMessageDrivenSourceAdapter source = (JmsMessageDrivenSourceAdapter) context.getBean("jmsSource"); - source.setRequestChannel(channel); - context.start(); - Message message = channel.receive(3000); - assertNotNull("message should not be null", message); - assertEquals("converted-test-message", message.getPayload()); - context.stop(); - } - - @Test(expected=BeanDefinitionStoreException.class) - public void testPollingAdapterWithConnectionFactoryOnly() { - try { - new ClassPathXmlApplicationContext("pollingAdapterWithConnectionFactoryOnly.xml", this.getClass()); - } - catch (RuntimeException e) { - assertEquals(BeanCreationException.class, e.getCause().getClass()); - throw e; - } - } - - @Test(expected=BeanCreationException.class) - public void testPollingAdapterWithDestinationOnly() { - try { - new ClassPathXmlApplicationContext("pollingAdapterWithDestinationOnly.xml", this.getClass()); - } - catch (RuntimeException e) { - assertEquals(NoSuchBeanDefinitionException.class, e.getCause().getClass()); - throw e; - } - } - - @Test - public void testPollingAdapterWithDestinationAndDefaultConnectionFactory() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingAdapterWithDestinationAndDefaultConnectionFactory.xml", this.getClass()); - JmsPollableSource source = (JmsPollableSource) context.getBean("jmsSource"); - Message message = source.receive(); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - context.stop(); - } - - @Test(expected=BeanCreationException.class) - public void testPollingAdapterWithDestinationNameOnly() { - new ClassPathXmlApplicationContext("pollingAdapterWithDestinationNameOnly.xml", this.getClass()); - } - - @Test - public void testPollingAdapterWithDestinationNameAndDefaultConnectionFactory() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingAdapterWithDestinationNameAndDefaultConnectionFactory.xml", this.getClass()); - JmsPollableSource source = (JmsPollableSource) context.getBean("jmsSource"); - Message message = source.receive(); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - } - - @Test(expected=BeanDefinitionStoreException.class) - public void testMessageDrivenAdapterWithConnectionFactoryOnly() { - try { - new ClassPathXmlApplicationContext("messageDrivenAdapterWithConnectionFactoryOnly.xml", this.getClass()); - } - catch (RuntimeException e) { - assertEquals(BeanCreationException.class, e.getCause().getClass()); - throw e; - } - } - - @Test(expected=BeanDefinitionStoreException.class) - public void testMessageDrivenAdapterWithEmptyConnectionFactory() { - try { - new ClassPathXmlApplicationContext("messageDrivenAdapterWithEmptyConnectionFactory.xml", this.getClass()); - } - catch (RuntimeException e) { - assertEquals(BeanCreationException.class, e.getCause().getClass()); - throw e; - } - } - - @Test - public void testMessageDrivenAdapterWithDefaultConnectionFactory() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "messageDrivenAdapterWithDefaultConnectionFactory.xml", this.getClass()); - MessageChannel channel = new QueueChannel(1); - JmsMessageDrivenSourceAdapter source = (JmsMessageDrivenSourceAdapter) context.getBean("jmsSource"); - source.setRequestChannel(channel); - context.start(); - Message message = channel.receive(3000); - assertNotNull("message should not be null", message); - assertEquals("message-driven-test", message.getPayload()); - context.stop(); - } - - @Test - public void testPollingJmsSourceEndpoint() { - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( - "pollingJmsSourceEndpoint.xml", this.getClass()); - context.start(); - PollingSourceEndpoint endpoint = (PollingSourceEndpoint) context.getBean("endpoint"); - assertEquals(JmsPollableSource.class, endpoint.getSource().getClass()); - MessageChannel channel = (MessageChannel) context.getBean("channel"); - Message message = channel.receive(3000); - assertNotNull("message should not be null", message); - assertEquals("polling-test", message.getPayload()); - context.stop(); - } - - - public static class TestMessageConverter implements MessageConverter { - - public Object fromMessage(javax.jms.Message message) throws JMSException, MessageConversionException { - String original = ((TextMessage) message).getText(); - return "converted-" + original; - } - - public javax.jms.Message toMessage(Object object, Session session) throws JMSException, - MessageConversionException { - return null; - } - - } - -} diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceParserTests.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceParserTests.java new file mode 100644 index 0000000000..cb1d43164a --- /dev/null +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/JmsSourceParserTests.java @@ -0,0 +1,132 @@ +/* + * Copyright 2002-2008 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.adapter.jms.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; + +import org.springframework.beans.factory.BeanCreationException; +import org.springframework.beans.factory.BeanDefinitionStoreException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.adapter.jms.JmsSource; +import org.springframework.integration.channel.MessageChannel; +import org.springframework.integration.endpoint.PollingSourceEndpoint; +import org.springframework.integration.message.Message; + +/** + * @author Mark Fisher + */ +public class JmsSourceParserTests { + + @Test + public void testSourceWithJmsTemplate() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingAdapterWithJmsTemplate.xml", this.getClass()); + JmsSource source = (JmsSource) context.getBean("jmsSource"); + Message message = source.receive(); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + } + + @Test + public void testSourceWithConnectionFactoryAndDestination() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingAdapterWithConnectionFactoryAndDestination.xml", this.getClass()); + JmsSource source = (JmsSource) context.getBean("jmsSource"); + Message message = source.receive(); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + context.stop(); + } + + @Test + public void testSourceWithConnectionFactoryAndDestinationName() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingAdapterWithConnectionFactoryAndDestinationName.xml", this.getClass()); + JmsSource source = (JmsSource) context.getBean("jmsSource"); + Message message = source.receive(); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + context.stop(); + } + + @Test(expected=BeanDefinitionStoreException.class) + public void testSourceWithConnectionFactoryOnly() { + try { + new ClassPathXmlApplicationContext("pollingAdapterWithConnectionFactoryOnly.xml", this.getClass()); + } + catch (RuntimeException e) { + assertEquals(BeanCreationException.class, e.getCause().getClass()); + throw e; + } + } + + @Test(expected=BeanCreationException.class) + public void testSourceWithDestinationOnly() { + try { + new ClassPathXmlApplicationContext("pollingAdapterWithDestinationOnly.xml", this.getClass()); + } + catch (RuntimeException e) { + assertEquals(NoSuchBeanDefinitionException.class, e.getCause().getClass()); + throw e; + } + } + + @Test + public void testSourceWithDestinationAndDefaultConnectionFactory() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingAdapterWithDestinationAndDefaultConnectionFactory.xml", this.getClass()); + JmsSource source = (JmsSource) context.getBean("jmsSource"); + Message message = source.receive(); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + context.stop(); + } + + @Test(expected=BeanCreationException.class) + public void testPollingAdapterWithDestinationNameOnly() { + new ClassPathXmlApplicationContext("pollingAdapterWithDestinationNameOnly.xml", this.getClass()); + } + + @Test + public void testPollingAdapterWithDestinationNameAndDefaultConnectionFactory() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingAdapterWithDestinationNameAndDefaultConnectionFactory.xml", this.getClass()); + JmsSource source = (JmsSource) context.getBean("jmsSource"); + Message message = source.receive(); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + } + + @Test + public void testSourceEndpoint() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "pollingJmsSourceEndpoint.xml", this.getClass()); + context.start(); + PollingSourceEndpoint endpoint = (PollingSourceEndpoint) context.getBean("endpoint"); + assertEquals(JmsSource.class, endpoint.getSource().getClass()); + MessageChannel channel = (MessageChannel) context.getBean("channel"); + Message message = channel.receive(3000); + assertNotNull("message should not be null", message); + assertEquals("polling-test", message.getPayload()); + context.stop(); + } + +} diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/TestMessageConverter.java b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/TestMessageConverter.java new file mode 100644 index 0000000000..66148cc481 --- /dev/null +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/TestMessageConverter.java @@ -0,0 +1,41 @@ +/* + * Copyright 2002-2008 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.integration.adapter.jms.config; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.Session; +import javax.jms.TextMessage; + +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +/** + * @author Mark Fisher + */ +public class TestMessageConverter implements MessageConverter { + + public Object fromMessage(Message message) throws JMSException, MessageConversionException { + String original = ((TextMessage) message).getText(); + return "converted-" + original; + } + + public javax.jms.Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + return null; + } + +} diff --git a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/messageDrivenAdapterWithMessageConverter.xml b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/messageDrivenAdapterWithMessageConverter.xml index 0e741f7a9d..1e10d871af 100644 --- a/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/messageDrivenAdapterWithMessageConverter.xml +++ b/spring-integration-adapters/src/test/java/org/springframework/integration/adapter/jms/config/messageDrivenAdapterWithMessageConverter.xml @@ -17,7 +17,7 @@ message-converter="converter" request-channel="requestChannel"/> - +