From d684dc4d0e17a3dd0c840e9f0c792fd14dec9b4b Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Wed, 6 Jan 2016 13:22:48 -0500 Subject: [PATCH] INT-3902: XML: SmartLifecycle, Order Attributes JIRA: https://jira.spring.io/browse/INT-3902 Polishing Polishing - PR Comments Introduce `RouterFactoryBean.setSendTimeout` and deprecate `setTimeout` --- .../integration/config/RouterFactoryBean.java | 19 ++++-- ...AbstractMethodAnnotationPostProcessor.java | 4 +- .../config/xml/AbstractRouterParser.java | 11 +++- .../router/AbstractMessageRouter.java | 16 ++++- .../config/spring-integration-4.3.xsd | 17 ++++- .../router/RecipientListRouterTests.java | 14 ++--- .../config/MarshallingTransformerParser.java | 7 ++- .../xml/config/XPathFilterParser.java | 5 +- .../config/XPathMessageSplitterParser.java | 4 +- .../XmlPayloadValidatingFilterParser.java | 3 +- .../config/XsltPayloadTransformerParser.java | 5 +- .../xml/config/spring-integration-xml-4.3.xsd | 41 +----------- ...shallingTransformerParserTests-context.xml | 15 ++++- .../MarshallingTransformerParserTests.java | 26 +++++++- ...shallingTransformerParserTests-context.xml | 18 ++++-- .../UnmarshallingTransformerParserTests.java | 37 +++++++++-- .../config/XPathFilterParserTests-context.xml | 10 +++ .../xml/config/XPathFilterParserTests.java | 63 +++++++++++++------ ...XPathHeaderEnricherParserTests-context.xml | 16 ++++- .../XPathHeaderEnricherParserTests.java | 27 +++++++- .../XPathMessageSplitterParserTests.java | 21 +++++-- .../xml/config/XPathRouterParserTests.java | 37 ++++++++++- .../xml/config/XPathRouterTests-context.xml | 9 +++ .../XPathSplitterParserTests-context.xml | 5 ++ .../xml/config/XPathSplitterParserTests.java | 32 +++++++++- .../XPathTransformerParserTests-context.xml | 14 ++++- .../config/XPathTransformerParserTests.java | 38 ++++++++++- ...oadValidatingFilterParserTests-context.xml | 30 ++++++--- ...XmlPayloadValidatingFilterParserTests.java | 28 ++++++++- ...tPayloadTransformerParserTests-context.xml | 24 ++++--- .../XsltPayloadTransformerParserTests.java | 34 ++++++++-- 31 files changed, 487 insertions(+), 143 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java index cc423eed91..9e3ba12033 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java @@ -44,7 +44,7 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean private volatile String defaultOutputChannelName; - private volatile Long timeout; + private volatile Long sendTimeout; private volatile Boolean resolutionRequired; @@ -60,8 +60,17 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean this.defaultOutputChannelName = defaultOutputChannelName; } + /** + * @param timeout the timeout. + * @deprecated in favor of {@link #setSendTimeout(Long)}. + */ + @Deprecated public void setTimeout(Long timeout) { - this.timeout = timeout; + this.sendTimeout = timeout; + } + + public void setSendTimeout(Long timeout) { + this.sendTimeout = timeout; } public void setResolutionRequired(Boolean resolutionRequired) { @@ -121,8 +130,8 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean if (this.defaultOutputChannelName != null) { router.setDefaultOutputChannelName(this.defaultOutputChannelName); } - if (this.timeout != null) { - router.setTimeout(this.timeout); + if (this.sendTimeout != null) { + router.setSendTimeout(this.sendTimeout); } if (this.applySequence != null) { router.setApplySequence(this.applySequence); @@ -152,7 +161,7 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean private boolean noRouterAttributesProvided() { return this.channelMappings == null && this.defaultOutputChannel == null - && this.timeout == null && this.resolutionRequired == null && this.applySequence == null + && this.sendTimeout == null && this.resolutionRequired == null && this.applySequence == null && this.ignoreSendFailures == null; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java index bdee48558f..a795eb708b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -150,7 +150,7 @@ public abstract class AbstractMethodAnnotationPostProcessorfalse meaning that an Exception will be thrown whenever a send fails. To override this and suppress diff --git a/spring-integration-core/src/main/resources/org/springframework/integration/config/spring-integration-4.3.xsd b/spring-integration-core/src/main/resources/org/springframework/integration/config/spring-integration-4.3.xsd index 40642a928a..10e887ac39 100644 --- a/spring-integration-core/src/main/resources/org/springframework/integration/config/spring-integration-4.3.xsd +++ b/spring-integration-core/src/main/resources/org/springframework/integration/config/spring-integration-4.3.xsd @@ -3394,8 +3394,21 @@ Specify the maximum amount of time in milliseconds to wait - when sending Messages to the target MessageChannels. By - default the send will block indefinitely. + when sending Messages to the target MessageChannels if blocking + is possible (e.g. a bounded queue channel that is currently full). + By default the send will block indefinitely. + DEPRECATED in favor of 'send-timeout' for consistency with other elements. + + + + + + + Specify the maximum amount of time in milliseconds to wait + when sending Messages to the target MessageChannels if blocking + is possible (e.g. a bounded queue channel that is currently full). + By default the send will block indefinitely. + Synonym for 'timeout' - only one can be supplied. diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java index b354eac9aa..faa9eb0086 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -115,7 +115,7 @@ public class RecipientListRouterTests { channelB.setBeanName("channelB"); channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); @@ -145,7 +145,7 @@ public class RecipientListRouterTests { channelB.setBeanName("channelB"); channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); @@ -177,7 +177,7 @@ public class RecipientListRouterTests { channelB.setBeanName("channelB"); channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); @@ -212,7 +212,7 @@ public class RecipientListRouterTests { channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); router.setIgnoreSendFailures(true); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); @@ -242,7 +242,7 @@ public class RecipientListRouterTests { channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); router.setIgnoreSendFailures(true); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); @@ -272,7 +272,7 @@ public class RecipientListRouterTests { channelC.setBeanName("channelC"); RecipientListRouter router = new RecipientListRouter(); router.setIgnoreSendFailures(true); - router.setTimeout(0); + router.setSendTimeout(0); List channels = new ArrayList(); channels.add(channelA); channels.add(channelB); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/MarshallingTransformerParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/MarshallingTransformerParser.java index eb2268d866..4e1a28ce00 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/MarshallingTransformerParser.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/MarshallingTransformerParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2016 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. @@ -17,6 +17,7 @@ package org.springframework.integration.xml.config; import org.w3c.dom.Element; + import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.config.xml.AbstractTransformerParser; @@ -38,8 +39,8 @@ public class MarshallingTransformerParser extends AbstractTransformerParser { @Override protected void parseTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String resultTransformer = element.getAttribute("result-transformer"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-type", "resultType"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-factory", "resultFactoryName"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-type", "resultType"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-factory", "resultFactoryName"); String marshaller = element.getAttribute("marshaller"); Assert.hasText(marshaller, "the 'marshaller' attribute is required"); builder.addConstructorArgReference(marshaller); diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathFilterParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathFilterParser.java index 65f5fc6116..c9720a8585 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathFilterParser.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathFilterParser.java @@ -33,13 +33,13 @@ import org.springframework.util.StringUtils; /** * Parser for the <xpath-filter> element. - * + * * @author Mark Fisher * @since 2.1 */ public class XPathFilterParser extends AbstractConsumerEndpointParser { - private XPathExpressionParser xpathParser = new XPathExpressionParser(); + private final XPathExpressionParser xpathParser = new XPathExpressionParser(); @Override @@ -65,6 +65,7 @@ public class XPathFilterParser extends AbstractConsumerEndpointParser { builder.addPropertyValue("targetObject", selectorBuilder.getBeanDefinition()); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "discard-channel"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "throw-exception-on-rejection"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout"); return builder; } diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java index cd49c37fa0..3e8af52943 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -30,6 +30,7 @@ import org.springframework.util.StringUtils; /** * @author Jonas Partner * @author Artem Bilan + * @author Gary Russell */ public class XPathMessageSplitterParser extends AbstractConsumerEndpointParser { @@ -55,6 +56,7 @@ public class XPathMessageSplitterParser extends AbstractConsumerEndpointParser { IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "apply-sequence"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "iterator"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "output-properties"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout"); return builder; } diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParser.java index c8e71818ec..768cc63fc7 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParser.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParser.java @@ -16,7 +16,6 @@ package org.springframework.integration.xml.config; -import org.springframework.integration.xml.selector.XmlValidatingMessageSelector; import org.w3c.dom.Element; import org.springframework.beans.factory.BeanDefinitionStoreException; @@ -25,6 +24,7 @@ import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.config.FilterFactoryBean; import org.springframework.integration.config.xml.AbstractConsumerEndpointParser; import org.springframework.integration.config.xml.IntegrationNamespaceUtils; +import org.springframework.integration.xml.selector.XmlValidatingMessageSelector; import org.springframework.util.StringUtils; /** @@ -60,6 +60,7 @@ public class XmlPayloadValidatingFilterParser extends AbstractConsumerEndpointPa } IntegrationNamespaceUtils.setValueIfAttributeDefined(selectorBuilder, element, "throw-exception-on-rejection"); filterBuilder.addPropertyValue("targetObject", selectorBuilder.getBeanDefinition()); + IntegrationNamespaceUtils.setValueIfAttributeDefined(filterBuilder, element, "send-timeout"); return filterBuilder; } diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java index 0a0fa10f89..d0baa221b5 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2016 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. @@ -38,6 +38,7 @@ import org.springframework.util.xml.DomUtils; * @author Oleg Zhurakousky * @author Mike Bazos * @author liujiong + * @author Gary Russell */ public class XsltPayloadTransformerParser extends AbstractTransformerParser { @@ -51,7 +52,7 @@ public class XsltPayloadTransformerParser extends AbstractTransformerParser { String xslResource = element.getAttribute("xsl-resource"); String xslTemplates = element.getAttribute("xsl-templates"); String resultTransformer = element.getAttribute("result-transformer"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-type"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-type"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "result-factory", "resultFactoryName"); String transformerFactoryClass = element.getAttribute("transformer-factory-class"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "xslt-param-headers"); diff --git a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-4.3.xsd b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-4.3.xsd index d62032dd70..72e011e535 100644 --- a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-4.3.xsd +++ b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-4.3.xsd @@ -822,27 +822,6 @@ - - - - - - - - - - - - - Message Channel where you want accepted messages to be sent. - - - - - - - - @@ -856,6 +835,7 @@ + @@ -863,24 +843,7 @@ - - - - - - - - - - - - - - - - - - + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/MarshallingTransformerParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/MarshallingTransformerParserTests-context.xml index 507c07386c..aa9c91ae52 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/MarshallingTransformerParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/MarshallingTransformerParserTests-context.xml @@ -14,6 +14,17 @@ + + - + + result-factory="stubResultFactory" /> list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void testDefault() throws Exception { MessageChannel input = (MessageChannel) appContext.getBean("marshallingTransformerNoResultFactory"); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests-context.xml index e9b591a530..77a2cb1510 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests-context.xml @@ -11,26 +11,36 @@ http://www.springframework.org/schema/integration/spring-integration.xsd"> - + - + + + - + - + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests.java index 8189f4e9b9..76a323c857 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/UnmarshallingTransformerParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2016 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. @@ -16,27 +16,38 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import java.util.List; + import javax.xml.transform.dom.DOMSource; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; +import org.springframework.context.SmartLifecycle; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessagingException; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.support.GenericMessage; -import org.springframework.integration.xml.util.XmlTestUtil; +import org.springframework.util.MultiValueMap; import org.springframework.xml.transform.StringSource; /** * @author Jonas Partner * @author Mark Fisher + * @author Gary Russell */ public class UnmarshallingTransformerParserTests { @@ -53,6 +64,20 @@ public class UnmarshallingTransformerParserTests { } + @Test + public void testParse() throws Exception { + EventDrivenConsumer consumer = (EventDrivenConsumer) appContext.getBean("parseOnly"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); + SmartLifecycleRoleController roleController = appContext.getBean(SmartLifecycleRoleController.class); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void testDefaultUnmarshall() throws Exception { MessageChannel input = (MessageChannel) appContext.getBean("input"); @@ -88,7 +113,7 @@ public class UnmarshallingTransformerParserTests { assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof DOMSource); } - + @Test public void testPollingUnmarshall() throws Exception { MessageChannel input = (MessageChannel) appContext.getBean("pollableInput"); @@ -100,9 +125,9 @@ public class UnmarshallingTransformerParserTests { assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof StringSource); } - - - + + + @Test(expected = MessagingException.class) public void testUnmarshallUnsupported() throws Exception { diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests-context.xml index 6ea3dc7a6a..5403dfa4bc 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests-context.xml @@ -10,6 +10,16 @@ http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> + + + + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests.java index e8ca6637bd..362ce282eb 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathFilterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2016 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. @@ -16,40 +16,67 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; +import org.w3c.dom.Document; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.context.SmartLifecycle; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; -import org.springframework.integration.channel.QueueChannel; import org.springframework.messaging.PollableChannel; -import org.springframework.integration.support.MessageBuilder; -import org.springframework.integration.xml.util.XmlTestUtil; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.w3c.dom.Document; +import org.springframework.util.MultiValueMap; /** * @author Mark Fisher + * @author Gary Russell * @since 2.1 */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) +@DirtiesContext public class XPathFilterParserTests { @Autowired private ApplicationContext context; + @Test + public void testParse() throws Exception { + EventDrivenConsumer consumer = (EventDrivenConsumer) context.getBean("parseOnly"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); + SmartLifecycleRoleController roleController = context.getBean(SmartLifecycleRoleController.class); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void simpleStringExpressionBoolean() throws Exception { - MessageChannel inputChannel = context.getBean("booleanFilterInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("booleanFilterInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("booleanFilterRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("booleanFilterRejections", PollableChannel.class); Message shouldBeAccepted = MessageBuilder.withPayload("outputOne").setReplyChannel(replyChannel).build(); Message shouldBeRejected = MessageBuilder.withPayload("outputOne").setReplyChannel(replyChannel).build(); inputChannel.send(shouldBeAccepted); @@ -59,12 +86,12 @@ public class XPathFilterParserTests { assertNull(replyChannel.receive(0)); assertNull(discardChannel.receive(0)); } - + @Test public void stringExpressionWithNamespaceBoolean() throws Exception { - MessageChannel inputChannel = context.getBean("booleanFilterWithNamespaceInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("booleanFilterWithNamespaceInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("booleanFilterWithNamespaceRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("booleanFilterWithNamespaceRejections", PollableChannel.class); Document docToAccept = XmlTestUtil.getDocumentForString("outputOne"); Document docToReject = XmlTestUtil.getDocumentForString("outputOne"); Message shouldBeAccepted = MessageBuilder.withPayload(docToAccept).setReplyChannel(replyChannel).build(); @@ -79,9 +106,9 @@ public class XPathFilterParserTests { @Test public void stringExpressionWithNestedMapBoolean() throws Exception { - MessageChannel inputChannel = context.getBean("nestedNamespaceMapFilterInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("nestedNamespaceMapFilterInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("nestedNamespaceMapFilterRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("nestedNamespaceMapFilterRejections", PollableChannel.class); Document docToAccept = XmlTestUtil.getDocumentForString("outputOne"); Document docToReject = XmlTestUtil.getDocumentForString("outputOne"); Message shouldBeAccepted = MessageBuilder.withPayload(docToAccept).setReplyChannel(replyChannel).build(); @@ -96,9 +123,9 @@ public class XPathFilterParserTests { @Test public void stringExpressionWithNamespaceString() throws Exception { - MessageChannel inputChannel = context.getBean("stringFilterWithNamespaceInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("stringFilterWithNamespaceInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("stringFilterWithNamespaceRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("stringFilterWithNamespaceRejections", PollableChannel.class); Document docToAccept = XmlTestUtil.getDocumentForString("outputOne"); Document docToReject = XmlTestUtil.getDocumentForString("outputOne"); Message shouldBeAccepted = MessageBuilder.withPayload(docToAccept).setReplyChannel(replyChannel).build(); @@ -113,9 +140,9 @@ public class XPathFilterParserTests { @Test public void stringExpressionIgnoresCase() throws Exception { - MessageChannel inputChannel = context.getBean("stringFilterIgnoresCaseInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("stringFilterIgnoresCaseInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("stringFilterIgnoresCaseRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("stringFilterIgnoresCaseRejections", PollableChannel.class); Document docToAccept1 = XmlTestUtil.getDocumentForString("OUTPUTONE"); Document docToAccept2 = XmlTestUtil.getDocumentForString("outputOne"); Document docToReject = XmlTestUtil.getDocumentForString("outputTwo"); @@ -134,9 +161,9 @@ public class XPathFilterParserTests { @Test public void stringExpressionRegex() throws Exception { - MessageChannel inputChannel = context.getBean("stringFilterRegexInput", MessageChannel.class); + MessageChannel inputChannel = context.getBean("stringFilterRegexInput", MessageChannel.class); QueueChannel replyChannel = new QueueChannel(); - PollableChannel discardChannel = context.getBean("stringFilterRegexRejections", PollableChannel.class); + PollableChannel discardChannel = context.getBean("stringFilterRegexRejections", PollableChannel.class); Document docToAccept1 = XmlTestUtil.getDocumentForString("aBcDeFgHiJk"); Document docToAccept2 = XmlTestUtil.getDocumentForString("xyz"); Document docToReject = XmlTestUtil.getDocumentForString("abc123"); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests-context.xml index f53ea00c42..7b944e10fc 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests-context.xml @@ -13,9 +13,9 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> - + - + BOOLEAN_RESULT STRING_RESULT @@ -23,11 +23,21 @@ NODE_RESULT NODE_LIST_RESULT - + + +
+ +
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests.java index e227c1a4be..8135617d76 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathHeaderEnricherParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -16,7 +16,10 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.List; @@ -28,22 +31,30 @@ import org.w3c.dom.Node; import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.context.SmartLifecycle; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.support.MessageBuilder; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.integration.test.util.TestUtils; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.PollableChannel; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.util.MultiValueMap; /** * @author Mark Fisher * @author Artem Bilan + * @author Gary Russell * * @since 2.0 */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) +@DirtiesContext public class XPathHeaderEnricherParserTests { @Autowired @@ -58,6 +69,20 @@ public class XPathHeaderEnricherParserTests { private final Message message = MessageBuilder.withPayload("").build(); + @Test + public void testParse() throws Exception { + EventDrivenConsumer consumer = (EventDrivenConsumer) context.getBean("parseOnly"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); + SmartLifecycleRoleController roleController = context.getBean(SmartLifecycleRoleController.class); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void stringResultByDefault() { Message result = this.getResultMessage(); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java index 12628e0c03..7a2344ce94 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java @@ -17,23 +17,26 @@ package org.springframework.integration.xml.config; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import javax.xml.parsers.DocumentBuilderFactory; import org.junit.Test; +import org.w3c.dom.Document; + import org.springframework.beans.DirectFieldAccessor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageChannel; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.endpoint.EventDrivenConsumer; -import org.springframework.messaging.support.GenericMessage; +import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.xml.util.XmlTestUtil; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.GenericMessage; import org.springframework.test.context.ContextConfiguration; -import org.w3c.dom.Document; /** * @author Jonas Partner @@ -57,8 +60,14 @@ public class XPathMessageSplitterParserTests { GenericMessage docMessage = new GenericMessage(doc); TestXmlApplicationContext ctx = TestXmlApplicationContextHelper .getTestAppContext(channelDefinitions - + ""); + + ""); EventDrivenConsumer consumer = (EventDrivenConsumer) ctx.getBean("splitter"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); consumer.start(); ctx.getAutowireCapableBeanFactory().autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false); @@ -98,7 +107,7 @@ public class XPathMessageSplitterParserTests { Object documnetBuilderFactory = fieldAccessor.getPropertyValue("documentBuilderFactory"); assertTrue("DocumnetBuilderFactory was not expected stub ", documnetBuilderFactory instanceof DocumentBuilderFactory); } - + @Test public void testXPathExpressionRef() throws Exception { TestXmlApplicationContext ctx = TestXmlApplicationContextHelper diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java index 3baf2206b6..d7cb02f575 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2016 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. @@ -16,9 +16,14 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; + +import java.util.List; import org.junit.After; import org.junit.Test; @@ -29,12 +34,13 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.SmartLifecycle; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.router.AbstractMappingMessageRouter; import org.springframework.integration.support.MessageBuilder; -import org.springframework.integration.support.channel.BeanFactoryChannelResolver; +import org.springframework.integration.support.SmartLifecycleRoleController; import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.xml.DefaultXmlPayloadConverter; import org.springframework.integration.xml.util.XmlTestUtil; @@ -43,12 +49,14 @@ import org.springframework.messaging.MessageChannel; import org.springframework.messaging.PollableChannel; import org.springframework.messaging.support.GenericMessage; import org.springframework.test.context.ContextConfiguration; +import org.springframework.util.MultiValueMap; /** * @author Jonas Partner * @author Mark Fisher * @author Oleg Zhurakousky * @author Gunnar Hillert + * @author Gary Russell */ @ContextConfiguration public class XPathRouterParserTests { @@ -84,6 +92,23 @@ public class XPathRouterParserTests { } } + @Test + public void testParse() throws Exception { + ClassPathXmlApplicationContext context = + new ClassPathXmlApplicationContext("XPathRouterTests-context.xml", this.getClass()); + EventDrivenConsumer consumer = (EventDrivenConsumer) context.getBean("parseOnly"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); + SmartLifecycleRoleController roleController = context.getBean(SmartLifecycleRoleController.class); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + context.close(); + } + @Test public void testSimpleStringExpression() throws Exception { Document doc = XmlTestUtil.getDocumentForString("outputOne"); @@ -168,6 +193,7 @@ public class XPathRouterParserTests { inputChannel.send(MessageBuilder.withPayload("").build()); assertEquals("Wrong count of messages on default output channel",1, defaultOutput.getQueueSize()); } + @Test public void testWithDynamicChanges() throws Exception { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("XPathRouterTests-context.xml", this.getClass()); @@ -187,7 +213,9 @@ public class XPathRouterParserTests { inputChannel.send(docMessage); assertNotNull(channelB.receive(10)); assertNull(channelA.receive(10)); + ac.close(); } + @Test public void testWithDynamicChangesWithExistingMappings() throws Exception { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("XPathRouterTests-context.xml", this.getClass()); @@ -207,6 +235,7 @@ public class XPathRouterParserTests { inputChannel.send(docMessage); assertNotNull(channelA.receive(10)); assertNull(channelB.receive(10)); + ac.close(); } @Test @@ -230,7 +259,9 @@ public class XPathRouterParserTests { inputChannel.send(docMessage); assertNotNull(channelA.receive(10)); assertNotNull(channelB.receive(10)); + ac.close(); } + @Test public void testWithStringEvaluationType() throws Exception { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("XPathRouterTests-context.xml", this.getClass()); @@ -240,6 +271,7 @@ public class XPathRouterParserTests { GenericMessage docMessage = new GenericMessage(doc); inputChannel.send(docMessage); assertNotNull(channelA.receive(10)); + ac.close(); } @Test @@ -252,6 +284,7 @@ public class XPathRouterParserTests { Message result = channelZ.receive(0); assertNotNull(result); assertEquals("channelA", result.getPayload()); + ac.close(); } diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml index ec6a65ec22..e9ee4f5ff1 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml @@ -7,6 +7,15 @@ http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> + + + + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathSplitterParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathSplitterParserTests-context.xml index 8ae7ac3d86..d16c4d3e0e 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathSplitterParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathSplitterParserTests-context.xml @@ -21,6 +21,11 @@ list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); } } diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests-context.xml index fe9502afec..6f6659bf9c 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests-context.xml @@ -13,9 +13,9 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> - + - + BOOLEAN_RESULT STRING_RESULT @@ -23,11 +23,19 @@ NODE_RESULT NODE_LIST_RESULT - + + + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests.java index f4409f1f45..5a20235194 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathTransformerParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 the original author or authors. + * Copyright 2002-2016 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. @@ -16,7 +16,10 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.io.StringReader; @@ -33,21 +36,29 @@ import org.w3c.dom.Node; import org.xml.sax.InputSource; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.SmartLifecycle; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.support.MessageBuilder; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.xml.XmlPayloadConverter; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.PollableChannel; -import org.springframework.integration.support.MessageBuilder; -import org.springframework.integration.xml.XmlPayloadConverter; +import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.util.MultiValueMap; import org.springframework.xml.xpath.NodeMapper; /** * @author Mark Fisher + * @author Gary Russell * @since 2.0 */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) +@DirtiesContext public class XPathTransformerParserTests { @Autowired @@ -77,8 +88,25 @@ public class XPathTransformerParserTests { @Autowired private PollableChannel output; + @Autowired + private EventDrivenConsumer parseOnly; + + @Autowired + SmartLifecycleRoleController roleController; + private final Message message = MessageBuilder.withPayload("").build(); + @Test + public void testParse() throws Exception { + assertEquals(2, TestUtils.getPropertyValue(this.parseOnly, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(this.parseOnly, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(this.parseOnly, "phase")); + assertFalse(TestUtils.getPropertyValue(this.parseOnly, "autoStartup", Boolean.class)); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) this.parseOnly)); + } @Test public void stringResultByDefault() { @@ -139,6 +167,7 @@ public class XPathTransformerParserTests { @SuppressWarnings("unused") private static class TestNodeMapper implements NodeMapper { + @Override public Object mapNode(Node node, int nodeNum) throws DOMException { return node.getTextContent() + "-mapped"; } @@ -148,10 +177,12 @@ public class XPathTransformerParserTests { @SuppressWarnings("unused") private static class TestXmlPayloadConverter implements XmlPayloadConverter { + @Override public Source convertToSource(Object object) { throw new UnsupportedOperationException(); } + @Override public Node convertToNode(Object object) { try { return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( @@ -162,6 +193,7 @@ public class XPathTransformerParserTests { } } + @Override public Document convertToDocument(Object object) { throw new UnsupportedOperationException(); } diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests-context.xml index 9abc05dc13..e24024eb2e 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests-context.xml @@ -12,42 +12,54 @@ http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> - + xml-schema - - + + - - - + - + - + - + diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests.java index 4c92bf1647..d0a984a45d 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests.java +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XmlPayloadValidatingFilterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -16,11 +16,16 @@ package org.springframework.integration.xml.config; +import static org.hamcrest.Matchers.contains; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; +import java.util.List; + import org.hamcrest.Matchers; import org.junit.Test; import org.junit.runner.RunWith; @@ -28,7 +33,11 @@ import org.w3c.dom.Document; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; +import org.springframework.context.SmartLifecycle; import org.springframework.integration.MessageRejectedException; +import org.springframework.integration.endpoint.EventDrivenConsumer; +import org.springframework.integration.support.SmartLifecycleRoleController; +import org.springframework.integration.test.util.TestUtils; import org.springframework.integration.xml.AggregatedXmlMessageValidationException; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.messaging.MessageChannel; @@ -37,12 +46,14 @@ import org.springframework.messaging.support.GenericMessage; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.util.MultiValueMap; /** * @author Jonas Partner * @author Oleg Zhurakousky * @author Gunnar Hillert * @author Artem Bilan + * @author Gary Russell */ @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) @@ -52,6 +63,20 @@ public class XmlPayloadValidatingFilterParserTests { @Autowired private ApplicationContext ac; + @Test + public void testParse() throws Exception { + EventDrivenConsumer consumer = (EventDrivenConsumer) ac.getBean("parseOnly"); + assertEquals(2, TestUtils.getPropertyValue(consumer, "handler.order")); + assertEquals(123L, TestUtils.getPropertyValue(consumer, "handler.messagingTemplate.sendTimeout")); + assertEquals(-1, TestUtils.getPropertyValue(consumer, "phase")); + assertFalse(TestUtils.getPropertyValue(consumer, "autoStartup", Boolean.class)); + SmartLifecycleRoleController roleController = ac.getBean(SmartLifecycleRoleController.class); + @SuppressWarnings("unchecked") + List list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void testValidMessage() throws Exception { Document doc = XmlTestUtil.getDocumentForString("hello"); @@ -61,6 +86,7 @@ public class XmlPayloadValidatingFilterParserTests { inputChannel.send(docMessage); assertNotNull(validChannel.receive(100)); } + @Test public void testInvalidMessageWithDiscardChannel() throws Exception { Document doc = XmlTestUtil.getDocumentForString(""); diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml index b205bb1208..2f4eaf7fb4 100644 --- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml +++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml @@ -13,34 +13,44 @@ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd"> - + DOMResult StringResult - + - + + + - + - + - + - + list = (List) TestUtils.getPropertyValue(roleController, "lifecycles", + MultiValueMap.class).get("foo"); + assertThat(list, contains((SmartLifecycle) consumer)); + } + @Test public void testWithResourceProvided() throws Exception { MessageChannel input = (MessageChannel) applicationContext.getBean("withResourceIn");