diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java index e5886cf43f..88ee9c1f54 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceHandler.java @@ -59,7 +59,7 @@ public class IntegrationNamespaceHandler extends AbstractIntegrationNamespaceHan registerBeanDefinitionParser("poller", new PollerParser()); registerBeanDefinitionParser("annotation-config", new AnnotationConfigParser()); registerBeanDefinitionParser("application-event-multicaster", new ApplicationEventMulticasterParser()); - registerBeanDefinitionParser("publisher", new PublisherParser()); + registerBeanDefinitionParser("publishing-interceptor", new PublishingInterceptorParser()); registerBeanDefinitionParser("channel-interceptor", new GlobalChannelInterceptorParser()); registerBeanDefinitionParser("converter", new ConverterParser()); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublisherParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java similarity index 96% rename from spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublisherParser.java rename to spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java index 02b94616fb..a2f3003975 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublisherParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java @@ -20,6 +20,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.w3c.dom.Element; + import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -32,21 +34,21 @@ import org.springframework.integration.channel.MapBasedChannelResolver; import org.springframework.integration.context.IntegrationContextUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; -import org.w3c.dom.Element; /** + * Parser for the <publishing-interceptor> element. + * * @author Oleg Zhurakousky * @author Mark Fisher * @since 2.0 */ -public class PublisherParser extends AbstractBeanDefinitionParser { +public class PublishingInterceptorParser extends AbstractBeanDefinitionParser { protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { BeanDefinitionBuilder rootBuilder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".aop.MessagePublishingInterceptor"); BeanDefinitionBuilder spelSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(MethodNameMappingExpressionSource.class.getName()); Map> mappings = this.getMappings(element, element.getAttribute("default-channel"), parserContext); - spelSourceBuilder.addConstructorArgValue(mappings.get("payload")); if (mappings.get("headers") != null) { spelSourceBuilder.addPropertyValue("headerExpressionMap", mappings.get("headers")); @@ -60,24 +62,21 @@ public class PublisherParser extends AbstractBeanDefinitionParser { BeanDefinitionReaderUtils.registerWithGeneratedName(chResolverBuilder.getBeanDefinition(), parserContext.getRegistry()); String defaultChannel = StringUtils.hasText(element.getAttribute("default-channel")) ? element.getAttribute("default-channel") : IntegrationContextUtils.NULL_CHANNEL_BEAN_NAME; - rootBuilder.addConstructorArgValue(spelSourceBuilder.getBeanDefinition()); rootBuilder.addPropertyReference("channelResolver", chResolverName); rootBuilder.addPropertyReference("defaultChannel", defaultChannel); return rootBuilder.getBeanDefinition(); } - @SuppressWarnings("unchecked") private Map> getMappings(Element element, String defaultChannel, ParserContext parserContext) { List mappings = DomUtils.getChildElementsByTagName(element, "method"); Map> interceptorMappings = new HashMap>(); Map payloadExpressionMap = new HashMap(); Map> headersExpressionMap = new HashMap>(); Map channelMap = new HashMap(); - ManagedMap resolvableChannelMap = new ManagedMap(); + ManagedMap resolvableChannelMap = new ManagedMap(); if (mappings != null && mappings.size() > 0) { for (Element mapping : mappings) { - // set payloadMap String methodPattern = StringUtils.hasText(mapping.getAttribute("pattern")) ? mapping.getAttribute("pattern") : "*"; diff --git a/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd b/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd index 6381eae091..7865b66c12 100644 --- a/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd +++ b/spring-integration-core/src/main/resources/org/springframework/integration/config/xml/spring-integration-2.0.xsd @@ -2246,13 +2246,11 @@ Name of the header whose value to use. - + - Defines a MessagePublishingInterceptor which allows you to generate - messages - as a by-product of - method invocations on Spring configured components. + Defines a MessagePublishingInterceptor which allows you to generate messages + as a by-product of method invocations on Spring configured components. diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests-context.xml index ef94332d55..495dad88c0 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests-context.xml @@ -1,36 +1,35 @@ - - - + http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd"> + + + + - + - - + +
- - + + - - + + diff --git a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests.java index f3a300ec75..0fa7110623 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/config/xml/MessagePublishingInterceptorParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2010 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.config.xml; import static junit.framework.Assert.assertEquals; @@ -26,8 +27,8 @@ import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; + import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.integration.channel.SubscribableChannel; import org.springframework.integration.core.Message; import org.springframework.integration.message.MessageHandler; @@ -44,70 +45,78 @@ public class MessagePublishingInterceptorParserTests { @Autowired private TestBean testBean; + @Autowired private DefaultTestBean defaultTestBean; + @Autowired - @Qualifier("defaultChannel") private SubscribableChannel defaultChannel; + @Autowired - @Qualifier("echoChannel") private SubscribableChannel echoChannel; - - @SuppressWarnings("unchecked") + + @Test - public void validateDefaultChannelPublishing(){ + public void validateDefaultChannelPublishing() { MessageHandler handler = Mockito.mock(MessageHandler.class); defaultChannel.subscribe(handler); - doAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) { - Message message = (Message) invocation.getArguments()[0]; - assertEquals("hello",message.getPayload()); - return null; - }}) - .when(handler).handleMessage((Message) anyObject()); - + doAnswer(new Answer() { + public Object answer(InvocationOnMock invocation) { + Message message = (Message) invocation.getArguments()[0]; + assertEquals("hello", message.getPayload()); + return null; + } + }).when(handler).handleMessage((Message) anyObject()); testBean.echoDefaultChannel("hello"); verify(handler, times(1)).handleMessage((Message) anyObject()); } - @SuppressWarnings("unchecked") + @Test - public void validateEchoChannelPublishing(){ + public void validateEchoChannelPublishing() { MessageHandler handler = Mockito.mock(MessageHandler.class); echoChannel.subscribe(handler); - doAnswer(new Answer() { - public Object answer(InvocationOnMock invocation) { - Message message = (Message) invocation.getArguments()[0]; - assertEquals("bar", message.getHeaders().get("foo")); - assertEquals("Echoing: hello", message.getPayload()); - return null; - }}) - .when(handler).handleMessage((Message) anyObject()); - + doAnswer(new Answer() { + public Object answer(InvocationOnMock invocation) { + Message message = (Message) invocation.getArguments()[0]; + assertEquals("bar", message.getHeaders().get("foo")); + assertEquals("Echoing: hello", message.getPayload()); + return null; + } + }).when(handler).handleMessage((Message) anyObject()); testBean.echo("hello"); verify(handler, times(1)).handleMessage((Message) anyObject()); } + /** * Need to set 'debug' level */ @Test - public void validateNullChannelPublishing(){ + public void validateNullChannelPublishing() { defaultTestBean.echo("hello"); } - public static class TestBean{ - public String echo(String str){ + + public static class TestBean { + + public String echo(String str) { return str; } - public String echoUpperCase(String str){ + + public String echoUpperCase(String str) { return str.toUpperCase(); } - public String echoDefaultChannel(String str){ + + public String echoDefaultChannel(String str) { return str; } } - public static class DefaultTestBean{ - public String echo(String str){ + + + public static class DefaultTestBean { + + public String echo(String str) { return str; } } + }