diff --git a/build.gradle b/build.gradle index e112ac3d24..36842e252c 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,7 @@ subprojects { subproject -> h2Version = '1.3.172' activeMqVersion = '5.8.0' - springVersion = project.hasProperty('springVersion') ? project.springVersion : '4.0.1.BUILD-SNAPSHOT' + springVersion = project.hasProperty('springVersion') ? project.springVersion : '4.0.1.RELEASE' springAmqpVersion = project.hasProperty('springAmqpVersion') ? project.springAmqpVersion : '1.3.0.BUILD-SNAPSHOT' diff --git a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java index 203852cb03..fe69a7ae91 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/channel/AbstractMessageChannel.java @@ -46,8 +46,10 @@ import org.springframework.util.StringUtils; * @author Mark Fisher * @author Oleg Zhurakousky * @author Gary Russell + * @author Artem Bilan */ -public abstract class AbstractMessageChannel extends IntegrationObjectSupport implements MessageChannel, TrackableComponent { +public abstract class AbstractMessageChannel extends IntegrationObjectSupport + implements MessageChannel, TrackableComponent, ChannelInterceptorAware { protected final Log logger = LogFactory.getLog(this.getClass()); @@ -94,6 +96,7 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport im * * @param interceptors The list of interceptors. */ + @Override public void setInterceptors(List interceptors) { Collections.sort(interceptors, new OrderComparator()); this.interceptors.set(interceptors); @@ -104,10 +107,22 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport im * * @param interceptor The interceptor. */ + @Override public void addInterceptor(ChannelInterceptor interceptor) { this.interceptors.add(interceptor); } + /** + * Add a channel interceptor to the specified index of the list. + * + * @param index The index to add interceptor. + * @param interceptor The interceptor. + */ + @Override + public void addInterceptor(int index, ChannelInterceptor interceptor) { + this.interceptors.add(index, interceptor); + } + /** * Specify the {@link ConversionService} to use when trying to convert to * one of this channel's supported datatypes for a Message whose payload @@ -124,6 +139,14 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport im super.setConversionService(conversionService); } + /** + * Return a read-only list of the configured interceptors. + */ + @Override + public List getChannelInterceptors() { + return this.interceptors.getInterceptors(); + } + /** * Exposes the interceptor list for subclasses. * @@ -261,6 +284,10 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport im return this.interceptors.add(interceptor); } + public void add(int index, ChannelInterceptor interceptor) { + this.interceptors.add(index, interceptor); + } + public Message preSend(Message message, MessageChannel channel) { if (logger.isDebugEnabled()) { logger.debug("preSend on channel '" + channel + "', message: " + message); @@ -310,5 +337,9 @@ public abstract class AbstractMessageChannel extends IntegrationObjectSupport im } return message; } + + public List getInterceptors() { + return Collections.unmodifiableList(this.interceptors); + } } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/channel/ChannelInterceptorAware.java b/spring-integration-core/src/main/java/org/springframework/integration/channel/ChannelInterceptorAware.java new file mode 100644 index 0000000000..1273fb9fd3 --- /dev/null +++ b/spring-integration-core/src/main/java/org/springframework/integration/channel/ChannelInterceptorAware.java @@ -0,0 +1,43 @@ +/* + * Copyright 2014 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.channel; + +import java.util.List; + +import org.springframework.messaging.support.ChannelInterceptor; + +/** + * A marker interface providing the ability to configure {@link ChannelInterceptor}s + * on {@link org.springframework.messaging.MessageChannel} implementations. + *

+ * Typically useful when the target {@link org.springframework.messaging.MessageChannel} + * is an AOP Proxy. + * * + * @author Artem Bilan + * @since 4.0 + */ +public interface ChannelInterceptorAware { + + void setInterceptors(List interceptors); + + void addInterceptor(ChannelInterceptor interceptor); + + void addInterceptor(int index, ChannelInterceptor interceptor); + + List getChannelInterceptors(); + +} diff --git a/spring-integration-core/src/main/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorBeanPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorBeanPostProcessor.java index b9f0184d62..1e972ccbf2 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorBeanPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorBeanPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -25,16 +25,12 @@ import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.aop.framework.Advised; -import org.springframework.aop.support.AopUtils; import org.springframework.beans.BeansException; -import org.springframework.beans.DirectFieldAccessor; -import org.springframework.beans.NotReadablePropertyException; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.OrderComparator; +import org.springframework.integration.channel.ChannelInterceptorAware; import org.springframework.messaging.MessageChannel; -import org.springframework.messaging.support.ChannelInterceptor; import org.springframework.util.PatternMatchUtils; import org.springframework.util.StringUtils; @@ -43,6 +39,7 @@ import org.springframework.util.StringUtils; * * @author Oleg Zhurakousky * @author Mark Fisher + * @author Artem Bilan * @since 2.0 */ final class GlobalChannelInterceptorBeanPostProcessor implements BeanPostProcessor, InitializingBean { @@ -83,11 +80,11 @@ final class GlobalChannelInterceptorBeanPostProcessor implements BeanPostProcess @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof MessageChannel) { + if (bean instanceof ChannelInterceptorAware && bean instanceof MessageChannel) { if (logger.isDebugEnabled()) { logger.debug("Applying global interceptors on channel '" + beanName + "'"); } - this.addMatchingInterceptors((MessageChannel) bean, beanName); + this.addMatchingInterceptors((ChannelInterceptorAware) bean, beanName); } return bean; } @@ -95,67 +92,34 @@ final class GlobalChannelInterceptorBeanPostProcessor implements BeanPostProcess /** * Adds any interceptor whose pattern matches against the channel's name. */ - private void addMatchingInterceptors(MessageChannel channel, String beanName) { - List interceptors = this.getExistingInterceptors(channel); - if (interceptors != null) { - List tempInterceptors = new ArrayList(); - for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.positiveOrderInterceptors) { - String[] patterns = globalChannelInterceptorWrapper.getPatterns(); - patterns = StringUtils.trimArrayElements(patterns); - if (PatternMatchUtils.simpleMatch(patterns, beanName)) { - tempInterceptors.add(globalChannelInterceptorWrapper); - } - } - Collections.sort(tempInterceptors, this.comparator); - for (GlobalChannelInterceptorWrapper next : tempInterceptors) { - interceptors.add(next.getChannelInterceptor()); - } - tempInterceptors = new ArrayList(); - for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.negativeOrderInterceptors) { - String[] patterns = globalChannelInterceptorWrapper.getPatterns(); - patterns = StringUtils.trimArrayElements(patterns); - if (PatternMatchUtils.simpleMatch(patterns, beanName)) { - tempInterceptors.add(globalChannelInterceptorWrapper); - } - } - Collections.sort(tempInterceptors, comparator); - if (!tempInterceptors.isEmpty()) { - for (int i = tempInterceptors.size() - 1; i >= 0; i--) { - interceptors.add(0, tempInterceptors.get(i).getChannelInterceptor()); - } + private void addMatchingInterceptors(ChannelInterceptorAware channel, String beanName) { + List tempInterceptors = new ArrayList(); + for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.positiveOrderInterceptors) { + String[] patterns = globalChannelInterceptorWrapper.getPatterns(); + patterns = StringUtils.trimArrayElements(patterns); + if (PatternMatchUtils.simpleMatch(patterns, beanName)) { + tempInterceptors.add(globalChannelInterceptorWrapper); } } - else if (logger.isDebugEnabled()) { - logger.debug("Global Channel interceptors will not be applied to Channel: " + beanName); + Collections.sort(tempInterceptors, this.comparator); + for (GlobalChannelInterceptorWrapper next : tempInterceptors) { + channel.addInterceptor(next.getChannelInterceptor()); } - } - @SuppressWarnings("unchecked") - private List getExistingInterceptors(MessageChannel channel) { - try { - MessageChannel targetChannel = channel; - if (AopUtils.isAopProxy(channel)) { - Object target = ((Advised) channel).getTargetSource().getTarget(); - if (target instanceof MessageChannel) { - targetChannel = (MessageChannel) target; - } - } - DirectFieldAccessor channelAccessor = new DirectFieldAccessor(targetChannel); - Object interceptorListWrapper = channelAccessor.getPropertyValue("interceptors"); - if (interceptorListWrapper != null) { - return (List) new DirectFieldAccessor(interceptorListWrapper).getPropertyValue("interceptors"); + tempInterceptors.clear(); + for (GlobalChannelInterceptorWrapper globalChannelInterceptorWrapper : this.negativeOrderInterceptors) { + String[] patterns = globalChannelInterceptorWrapper.getPatterns(); + patterns = StringUtils.trimArrayElements(patterns); + if (PatternMatchUtils.simpleMatch(patterns, beanName)) { + tempInterceptors.add(globalChannelInterceptorWrapper); } } - catch (NotReadablePropertyException e) { - // Channel doesn't support interceptors - null return logged by caller - } - catch (Exception e) { - // interceptors not supported, will return null - if (logger.isDebugEnabled() && channel != null) { - logger.debug("interceptors not supported by channel '" + channel + "'", e); + Collections.sort(tempInterceptors, comparator); + if (!tempInterceptors.isEmpty()) { + for (int i = tempInterceptors.size() - 1; i >= 0; i--) { + channel.addInterceptor(0, tempInterceptors.get(i).getChannelInterceptor()); } } - return null; } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/ChannelInterceptorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/ChannelInterceptorTests.java index 1d24425e5f..3afce01490 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/ChannelInterceptorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/ChannelInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -20,22 +20,25 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; +import org.hamcrest.Matchers; import org.junit.Test; -import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.channel.AbstractMessageChannel; +import org.springframework.integration.channel.ChannelInterceptorAware; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.support.ChannelInterceptor; import org.springframework.messaging.support.ChannelInterceptorAdapter; import org.springframework.messaging.support.GenericMessage; import org.springframework.util.StringUtils; @@ -43,6 +46,7 @@ import org.springframework.util.StringUtils; /** * @author Mark Fisher * @author Oleg Zhurakousky + * @author Artem Bilan */ public class ChannelInterceptorTests { @@ -162,14 +166,11 @@ public class ChannelInterceptorTests { @Test public void testInterceptorBeanWithPnamespace(){ ApplicationContext ac = new ClassPathXmlApplicationContext("ChannelInterceptorTests-context.xml", ChannelInterceptorTests.class); - AbstractMessageChannel channel = ac.getBean("input", AbstractMessageChannel.class); - DirectFieldAccessor cAccessor = new DirectFieldAccessor(channel); - Object iList = cAccessor.getPropertyValue("interceptors"); - DirectFieldAccessor iAccessor = new DirectFieldAccessor(iList); - @SuppressWarnings("unchecked") - List interceptorList = - (List) iAccessor.getPropertyValue("interceptors"); - String foo = interceptorList.get(0).getFoo(); + ChannelInterceptorAware channel = ac.getBean("input", AbstractMessageChannel.class); + List interceptors = channel.getChannelInterceptors(); + ChannelInterceptor channelInterceptor = interceptors.get(0); + assertThat(channelInterceptor, Matchers.instanceOf(PreSendReturnsMessageInterceptor.class)); + String foo = ((PreSendReturnsMessageInterceptor) channelInterceptor).getFoo(); assertTrue(StringUtils.hasText(foo)); assertEquals("foo", foo); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml index 15b46e39db..3661ae6c0b 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests-context.xml @@ -14,22 +14,22 @@ - + - - - - - - + + + + + + - + @@ -38,22 +38,22 @@ - + - + - + - + - + @@ -61,16 +61,16 @@ - + - + - + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests.java index c4ce8ab18f..3faed12889 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/channel/interceptor/GlobalChannelInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2014 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. @@ -26,13 +26,12 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -import org.springframework.aop.framework.Advised; -import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.core.Ordered; -import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.channel.AbstractMessageChannel; +import org.springframework.integration.channel.ChannelInterceptorAware; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.ChannelInterceptor; @@ -42,27 +41,31 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author Oleg Zhurakousky * @author David Turanski + * @author Artem Bilan * @since 2.0 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class GlobalChannelInterceptorTests { + @Autowired ApplicationContext applicationContext; + @Autowired + @Qualifier("inputC") + ChannelInterceptorAware inputCChannel; + + @Test public void validateGlobalInterceptor() throws Exception{ - Map channels = applicationContext.getBeansOfType(MessageChannel.class); + Map channels = applicationContext.getBeansOfType(ChannelInterceptorAware.class); for (String channelName : channels.keySet()) { - MessageChannel channel = channels.get(channelName); + ChannelInterceptorAware channel = channels.get(channelName); if (channelName.equals("nullChannel")){ continue; } - if (AopUtils.isAopProxy(channel)){ - channel = (MessageChannel) ((Advised)channel).getTargetSource().getTarget(); - } - List interceptorList = TestUtils.getPropertyValue(channel, "interceptors.interceptors", List.class); - ChannelInterceptor[] interceptors = interceptorList.toArray(new ChannelInterceptor[] {}); + + ChannelInterceptor[] interceptors = channel.getChannelInterceptors().toArray(new ChannelInterceptor[channel.getChannelInterceptors().size()]); if (channelName.equals("inputA")){ // 328741 Assert.assertTrue(interceptors.length ==10); Assert.assertEquals("interceptor-three", interceptors[0].toString()); @@ -111,17 +114,12 @@ public class GlobalChannelInterceptorTests { } } } - - - @Autowired - @Qualifier("inpuC") - MessageChannel inpuCchannel; @Test public void testWildCardPatternMatch() { - List interceptorList = TestUtils.getPropertyValue(inpuCchannel, "interceptors.interceptors", List.class); + List channelInterceptors = this.inputCChannel.getChannelInterceptors(); List interceptorNames = new ArrayList(); - for (Object interceptor : interceptorList) { + for (ChannelInterceptor interceptor : channelInterceptors) { interceptorNames.add(interceptor.toString()); } Assert.assertTrue(interceptorNames.contains("interceptor-ten")); diff --git a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/GlobalChannelInterceptorTests.java b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/GlobalChannelInterceptorTests.java index b4e62ddc4c..74ba183536 100644 --- a/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/GlobalChannelInterceptorTests.java +++ b/spring-integration-jms/src/test/java/org/springframework/integration/jms/config/GlobalChannelInterceptorTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -27,12 +27,15 @@ import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.channel.AbstractMessageChannel; -import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.channel.ChannelInterceptorAware; +import org.springframework.messaging.support.ChannelInterceptor; import org.springframework.messaging.support.ChannelInterceptorAdapter; /** * @author Oleg Zhurakousky * @author Mark Fisher + * @author Artem Bilan + * * @since 2.0.1 */ public class GlobalChannelInterceptorTests { @@ -42,12 +45,11 @@ public class GlobalChannelInterceptorTests { ActiveMqTestUtils.prepare(); ApplicationContext context = new ClassPathXmlApplicationContext( "GlobalChannelInterceptorTests-context.xml", GlobalChannelInterceptorTests.class); - AbstractMessageChannel jmsChannel = context.getBean("jmsChannel", AbstractMessageChannel.class); - Object interceptors = TestUtils.getPropertyValue((TestUtils.getPropertyValue(jmsChannel, "interceptors")), "interceptors"); + ChannelInterceptorAware jmsChannel = context.getBean("jmsChannel", AbstractMessageChannel.class); + List interceptors = jmsChannel.getChannelInterceptors(); assertNotNull(interceptors); - assertTrue(interceptors instanceof List); - assertEquals(1, ((List) interceptors).size()); - assertTrue(((List) interceptors).get(0) instanceof SampleInterceptor); + assertEquals(1, interceptors.size()); + assertTrue(interceptors.get(0) instanceof SampleInterceptor); } diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/MessageChannelsMonitorIntegrationTests.java b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/MessageChannelsMonitorIntegrationTests.java index 81db3224b8..f18da3791e 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/MessageChannelsMonitorIntegrationTests.java +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/MessageChannelsMonitorIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2009-2013 the original author or authors. + * Copyright 2009-2014 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 @@ -13,8 +13,10 @@ package org.springframework.integration.monitor; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -22,18 +24,23 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; +import org.hamcrest.Matchers; import org.junit.Test; import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.integration.channel.ChannelInterceptorAware; +import org.springframework.integration.channel.interceptor.WireTap; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandlingException; +import org.springframework.messaging.support.ChannelInterceptor; import org.springframework.messaging.support.GenericMessage; /** * @author Dave Syer * @author Gary Russell + * @author Artem Bilan * */ public class MessageChannelsMonitorIntegrationTests { @@ -185,6 +192,10 @@ public class MessageChannelsMonitorIntegrationTests { int sends = messageChannelsMonitor.getChannelSendRate("" + channel).getCount(); assertEquals("No statistics for input channel", 1, sends, 0.01); + assertThat(channel, Matchers.instanceOf(ChannelInterceptorAware.class)); + List channelInterceptors = ((ChannelInterceptorAware) channel).getChannelInterceptors(); + assertEquals(1, channelInterceptors.size()); + assertThat(channelInterceptors.get(0), Matchers.instanceOf(WireTap.class)); } finally { context.close(); @@ -223,7 +234,7 @@ public class MessageChannelsMonitorIntegrationTests { } @Aspect - public static class ChannelInterceptor { + public static class TestChannelInterceptor { @Before("execution(* *..MessageChannel+.send(*)) && args(input)") public void around(Message input) { logger.debug("Handling: " + input); diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/anonymous-channel.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/anonymous-channel.xml index 5c541693ce..5a546457f0 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/anonymous-channel.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/anonymous-channel.xml @@ -9,6 +9,8 @@ + + diff --git a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/proxy-channel.xml b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/proxy-channel.xml index 7b7148600a..fe2092f22d 100644 --- a/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/proxy-channel.xml +++ b/spring-integration-jmx/src/test/java/org/springframework/integration/monitor/proxy-channel.xml @@ -8,15 +8,17 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> - + + + - +