From a55ab3af059c9d0bb0107ed5b8000298c3add98f Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Thu, 2 Sep 2010 15:37:23 +0000 Subject: [PATCH] INT-1401 renamed ExpressionSource to PublisherMetadataSource --- .../aop/MessagePublishingInterceptor.java | 34 +++++++++---------- ...hodAnnotationPublisherMetadataSource.java} | 18 +++++----- ...odNameMappingPublisherMetadataSource.java} | 4 +-- .../aop/PublisherAnnotationAdvisor.java | 4 +-- ...urce.java => PublisherMetadataSource.java} | 2 +- ...ava => SimplePublisherMetadataSource.java} | 4 +-- .../xml/PublishingInterceptorParser.java | 4 +-- .../MessagePublishingInterceptorTests.java | 16 ++++----- ...ublishingInterceptorUsageTests-context.xml | 2 +- ...notationPublisherMetadataSourceTests.java} | 6 ++-- 10 files changed, 47 insertions(+), 47 deletions(-) rename spring-integration-core/src/main/java/org/springframework/integration/aop/{MethodAnnotationExpressionSource.java => MethodAnnotationPublisherMetadataSource.java} (89%) rename spring-integration-core/src/main/java/org/springframework/integration/aop/{MethodNameMappingExpressionSource.java => MethodNameMappingPublisherMetadataSource.java} (92%) rename spring-integration-core/src/main/java/org/springframework/integration/aop/{ExpressionSource.java => PublisherMetadataSource.java} (97%) rename spring-integration-core/src/main/java/org/springframework/integration/aop/{SimpleExpressionSource.java => SimplePublisherMetadataSource.java} (91%) rename spring-integration-core/src/test/java/org/springframework/integration/aop/{MethodAnnotationExpressionSourceTests.java => MethodAnnotationPublisherMetadataSourceTests.java} (94%) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java index f892b96110..c3f46675a7 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java @@ -46,7 +46,7 @@ import org.springframework.util.StringUtils; * A {@link MethodInterceptor} that publishes Messages to a channel. The * payload of the published Message can be derived from arguments or any return * value or exception resulting from the method invocation. That mapping is the - * responsibility of the EL expression provided by the ExpressionSource. + * responsibility of the EL expression provided by the {@link PublisherMetadataSource}. * * @author Mark Fisher * @since 2.0 @@ -55,7 +55,7 @@ public class MessagePublishingInterceptor implements MethodInterceptor { private final MessagingTemplate messagingTemplate = new MessagingTemplate(); - private volatile ExpressionSource expressionSource; + private volatile PublisherMetadataSource metadataSource; private final ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); @@ -64,15 +64,15 @@ public class MessagePublishingInterceptor implements MethodInterceptor { private final ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); - public MessagePublishingInterceptor(ExpressionSource expressionSource) { - Assert.notNull(expressionSource, "expressionSource must not be null"); - this.expressionSource = expressionSource; + public MessagePublishingInterceptor(PublisherMetadataSource metadataSource) { + Assert.notNull(metadataSource, "metadataSource must not be null"); + this.metadataSource = metadataSource; } - public void setExpressionSource(ExpressionSource expressionSource) { - Assert.notNull(expressionSource, "expressionSource must not be null"); - this.expressionSource = expressionSource; + public void setPublisherMetadataSource(PublisherMetadataSource metadataSource) { + Assert.notNull(metadataSource, "metadataSource must not be null"); + this.metadataSource = metadataSource; } public void setDefaultChannel(MessageChannel defaultChannel) { @@ -84,13 +84,13 @@ public class MessagePublishingInterceptor implements MethodInterceptor { } public final Object invoke(final MethodInvocation invocation) throws Throwable { - Assert.notNull(this.expressionSource, "ExpressionSource is required."); + Assert.notNull(this.metadataSource, "PublisherMetadataSource is required."); final StandardEvaluationContext context = new StandardEvaluationContext(); context.addPropertyAccessor(new MapAccessor()); Class targetClass = AopUtils.getTargetClass(invocation.getThis()); Method method = AopUtils.getMostSpecificMethod(invocation.getMethod(), targetClass); String[] argumentNames = this.resolveArgumentNames(method); - context.setVariable(ExpressionSource.METHOD_NAME_VARIABLE_NAME, method.getName()); + context.setVariable(PublisherMetadataSource.METHOD_NAME_VARIABLE_NAME, method.getName()); if (invocation.getArguments().length > 0 && argumentNames != null) { Map argumentMap = new HashMap(); for (int i = 0; i < argumentNames.length; i++) { @@ -101,15 +101,15 @@ public class MessagePublishingInterceptor implements MethodInterceptor { argumentMap.put("" + i, argValue); argumentMap.put(argumentNames[i], argValue); } - context.setVariable(ExpressionSource.ARGUMENT_MAP_VARIABLE_NAME, argumentMap); + context.setVariable(PublisherMetadataSource.ARGUMENT_MAP_VARIABLE_NAME, argumentMap); } try { Object returnValue = invocation.proceed(); - context.setVariable(ExpressionSource.RETURN_VALUE_VARIABLE_NAME, returnValue); + context.setVariable(PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME, returnValue); return returnValue; } catch (Throwable t) { - context.setVariable(ExpressionSource.EXCEPTION_VARIABLE_NAME, t); + context.setVariable(PublisherMetadataSource.EXCEPTION_VARIABLE_NAME, t); throw t; } finally { @@ -122,9 +122,9 @@ public class MessagePublishingInterceptor implements MethodInterceptor { } private void publishMessage(Method method, StandardEvaluationContext context) throws Exception { - String payloadExpressionString = this.expressionSource.getPayloadExpression(method); + String payloadExpressionString = this.metadataSource.getPayloadExpression(method); if (!StringUtils.hasText(payloadExpressionString)) { - payloadExpressionString = "#" + ExpressionSource.RETURN_VALUE_VARIABLE_NAME; + payloadExpressionString = "#" + PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME; } Expression expression = this.parser.parseExpression(payloadExpressionString); Object result = expression.getValue(context); @@ -137,7 +137,7 @@ public class MessagePublishingInterceptor implements MethodInterceptor { builder.copyHeaders(headers); } Message message = builder.build(); - String channelName = this.expressionSource.getChannelName(method); + String channelName = this.metadataSource.getChannelName(method); MessageChannel channel = null; if (channelName != null) { Assert.state(this.channelResolver != null, "ChannelResolver is required to resolve channel names."); @@ -155,7 +155,7 @@ public class MessagePublishingInterceptor implements MethodInterceptor { private Map evaluateHeaders(Method method, StandardEvaluationContext context) throws ParseException, EvaluationException { - Map headerExpressionMap = this.expressionSource.getHeaderExpressions(method); + Map headerExpressionMap = this.metadataSource.getHeaderExpressions(method); if (headerExpressionMap != null) { Map headers = new HashMap(); for (Map.Entry headerExpressionEntry : headerExpressionMap.entrySet()) { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationExpressionSource.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java similarity index 89% rename from spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationExpressionSource.java rename to spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java index 1c83052bd7..caecb983cd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationExpressionSource.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java @@ -32,13 +32,13 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * An {@link ExpressionSource} implementation that retrieves the expression - * string and evaluation context variable names from an annotation. + * An {@link PublisherMetadataSource} implementation that retrieves the channel + * name and expression strings from an annotation. * * @author Mark Fisher * @since 2.0 */ -public class MethodAnnotationExpressionSource implements ExpressionSource { +public class MethodAnnotationPublisherMetadataSource implements PublisherMetadataSource { private final Set> annotationTypes; @@ -47,11 +47,11 @@ public class MethodAnnotationExpressionSource implements ExpressionSource { private final ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); - public MethodAnnotationExpressionSource() { + public MethodAnnotationPublisherMetadataSource() { this(Collections.>singleton(Publisher.class)); } - public MethodAnnotationExpressionSource(Set> annotationTypes) { + public MethodAnnotationPublisherMetadataSource(Set> annotationTypes) { Assert.notEmpty(annotationTypes, "annotationTypes must not be empty"); this.annotationTypes = annotationTypes; } @@ -77,9 +77,9 @@ public class MethodAnnotationExpressionSource implements ExpressionSource { if (methodPayloadAnnotation != null) { payloadExpression = StringUtils.hasText(methodPayloadAnnotation.value()) ? methodPayloadAnnotation.value() - : "#" + ExpressionSource.RETURN_VALUE_VARIABLE_NAME; + : "#" + PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME; } - if (payloadExpression == null || payloadExpression.contains("#" + ExpressionSource.RETURN_VALUE_VARIABLE_NAME)) { + if (payloadExpression == null || payloadExpression.contains("#" + PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME)) { Assert.isTrue(!void.class.equals(method.getReturnType()), "When defining @Publisher on a void-returning method, an explicit payload " + "expression that does not rely upon a #return value is required."); @@ -93,7 +93,7 @@ public class MethodAnnotationExpressionSource implements ExpressionSource { "@Payload can be used at most once on a @Publisher method, either at method-level or on a single parameter"); Assert.state("".equals(((Payload) currentAnnotation).value()), "@Payload on a parameter for a @Publisher method may not contain an expression"); - payloadExpression = "#" + ExpressionSource.ARGUMENT_MAP_VARIABLE_NAME + "[" + i + "]"; + payloadExpression = "#" + PublisherMetadataSource.ARGUMENT_MAP_VARIABLE_NAME + "[" + i + "]"; } } } @@ -113,7 +113,7 @@ public class MethodAnnotationExpressionSource implements ExpressionSource { if (!StringUtils.hasText(name)) { name = parameterNames[i]; } - headerExpressions.put(name, "#" + ExpressionSource.ARGUMENT_MAP_VARIABLE_NAME + "['" + i + "']"); + headerExpressions.put(name, "#" + PublisherMetadataSource.ARGUMENT_MAP_VARIABLE_NAME + "['" + i + "']"); } } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingExpressionSource.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingPublisherMetadataSource.java similarity index 92% rename from spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingExpressionSource.java rename to spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingPublisherMetadataSource.java index 5097d5a8c1..38e3424274 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingExpressionSource.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodNameMappingPublisherMetadataSource.java @@ -27,7 +27,7 @@ import org.springframework.util.PatternMatchUtils; * @author Mark Fisher * @since 2.0 */ -public class MethodNameMappingExpressionSource implements ExpressionSource { +public class MethodNameMappingPublisherMetadataSource implements PublisherMetadataSource { private final Map payloadExpressionMap; @@ -36,7 +36,7 @@ public class MethodNameMappingExpressionSource implements ExpressionSource { private volatile Map channelMap = Collections.emptyMap(); - public MethodNameMappingExpressionSource(Map payloadExpressionMap) { + public MethodNameMappingPublisherMetadataSource(Map payloadExpressionMap) { Assert.notEmpty(payloadExpressionMap, "payloadExpressionMap must not be empty"); this.payloadExpressionMap = payloadExpressionMap; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherAnnotationAdvisor.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherAnnotationAdvisor.java index d22cef7b65..f60532fb27 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherAnnotationAdvisor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherAnnotationAdvisor.java @@ -57,8 +57,8 @@ public class PublisherAnnotationAdvisor extends AbstractPointcutAdvisor implemen public PublisherAnnotationAdvisor(Class ... publisherAnnotationTypes) { this.publisherAnnotationTypes = new HashSet>(Arrays.asList(publisherAnnotationTypes)); - ExpressionSource source = new MethodAnnotationExpressionSource(this.publisherAnnotationTypes); - this.interceptor = new MessagePublishingInterceptor(source); + PublisherMetadataSource metadataSource = new MethodAnnotationPublisherMetadataSource(this.publisherAnnotationTypes); + this.interceptor = new MessagePublishingInterceptor(metadataSource); } @SuppressWarnings("unchecked") diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/ExpressionSource.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherMetadataSource.java similarity index 97% rename from spring-integration-core/src/main/java/org/springframework/integration/aop/ExpressionSource.java rename to spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherMetadataSource.java index c8fa2e9066..0ea7933cc2 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/ExpressionSource.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/PublisherMetadataSource.java @@ -26,7 +26,7 @@ import java.util.Map; * @author Mark Fisher * @since 2.0 */ -interface ExpressionSource { +interface PublisherMetadataSource { static final String METHOD_NAME_VARIABLE_NAME = "method"; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/SimpleExpressionSource.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/SimplePublisherMetadataSource.java similarity index 91% rename from spring-integration-core/src/main/java/org/springframework/integration/aop/SimpleExpressionSource.java rename to spring-integration-core/src/main/java/org/springframework/integration/aop/SimplePublisherMetadataSource.java index 748b1e1876..efdc14d7cb 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/SimpleExpressionSource.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/SimplePublisherMetadataSource.java @@ -20,14 +20,14 @@ import java.lang.reflect.Method; import java.util.Map; /** - * Simple implementation of {@link ExpressionSource} that allows for + * Simple implementation of {@link PublisherMetadataSource} that allows for * configuration of a single channel name, payload expression, and * array of header key=value expressions. * * @author Mark Fisher * @since 2.0 */ -public class SimpleExpressionSource implements ExpressionSource { +public class SimplePublisherMetadataSource implements PublisherMetadataSource { private volatile String channelName; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java index a2f3003975..e62677c4df 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/PublishingInterceptorParser.java @@ -29,7 +29,7 @@ import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.ManagedMap; import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.aop.MethodNameMappingExpressionSource; +import org.springframework.integration.aop.MethodNameMappingPublisherMetadataSource; import org.springframework.integration.channel.MapBasedChannelResolver; import org.springframework.integration.context.IntegrationContextUtils; import org.springframework.util.StringUtils; @@ -47,7 +47,7 @@ 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()); + BeanDefinitionBuilder spelSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(MethodNameMappingPublisherMetadataSource.class.getName()); Map> mappings = this.getMappings(element, element.getAttribute("default-channel"), parserContext); spelSourceBuilder.addConstructorArgValue(mappings.get("payload")); if (mappings.get("headers") != null) { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorTests.java index 078819f346..4c2ef0de8d 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorTests.java @@ -39,8 +39,6 @@ import org.springframework.integration.channel.QueueChannel; */ public class MessagePublishingInterceptorTests { - private final ExpressionSource source = new TestExpressionSource(); - private final MapBasedChannelResolver channelResolver = new MapBasedChannelResolver(); private final QueueChannel testChannel = new QueueChannel(); @@ -53,7 +51,8 @@ public class MessagePublishingInterceptorTests { @Test public void returnValue() { - MessagePublishingInterceptor interceptor = new MessagePublishingInterceptor(source); + PublisherMetadataSource metadataSource = new TestPublisherMetadataSource(); + MessagePublishingInterceptor interceptor = new MessagePublishingInterceptor(metadataSource); interceptor.setChannelResolver(channelResolver); ProxyFactory pf = new ProxyFactory(new TestBeanImpl()); pf.addAdvice(interceptor); @@ -63,23 +62,24 @@ public class MessagePublishingInterceptorTests { assertNotNull(message); assertEquals("test-foo", message.getPayload()); } + @Test public void demoMethodNameMappingExpressionSource() { Map expressionMap = new HashMap(); expressionMap.put("test", "#return"); - MethodNameMappingExpressionSource source = new MethodNameMappingExpressionSource(expressionMap); + MethodNameMappingPublisherMetadataSource metadataSource = new MethodNameMappingPublisherMetadataSource(expressionMap); Map channelMap = new HashMap(); channelMap.put("test", "c"); - source.setChannelMap(channelMap); + metadataSource.setChannelMap(channelMap); Map> headerExpressionMap = new HashMap>(); Map headerExpressions = new HashMap(); headerExpressions.put("bar", "#return"); headerExpressions.put("name", "'oleg'"); headerExpressionMap.put("test", headerExpressions); - source.setHeaderExpressionMap(headerExpressionMap); + metadataSource.setHeaderExpressionMap(headerExpressionMap); - MessagePublishingInterceptor interceptor = new MessagePublishingInterceptor(source); + MessagePublishingInterceptor interceptor = new MessagePublishingInterceptor(metadataSource); interceptor.setChannelResolver(channelResolver); ProxyFactory pf = new ProxyFactory(new TestBeanImpl()); pf.addAdvice(interceptor); @@ -109,7 +109,7 @@ public class MessagePublishingInterceptorTests { } - private static class TestExpressionSource implements ExpressionSource { + private static class TestPublisherMetadataSource implements PublisherMetadataSource { public String getPayloadExpression(Method method) { return "'test-' + #return"; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorUsageTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorUsageTests-context.xml index 5baad3c559..aeda6a916d 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorUsageTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingInterceptorUsageTests-context.xml @@ -22,7 +22,7 @@ class="org.springframework.integration.aop.MessagePublishingInterceptor"> + class="org.springframework.integration.aop.MethodNameMappingPublisherMetadataSource"> diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationExpressionSourceTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java similarity index 94% rename from spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationExpressionSourceTests.java rename to spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java index 7ad000ef1a..2b5efc8c0a 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationExpressionSourceTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java @@ -31,9 +31,9 @@ import org.springframework.integration.annotation.Payload; * @author Mark Fisher * @since 2.0 */ -public class MethodAnnotationExpressionSourceTests { +public class MethodAnnotationPublisherMetadataSourceTests { - private final MethodAnnotationExpressionSource source = new MethodAnnotationExpressionSource(); + private final MethodAnnotationPublisherMetadataSource source = new MethodAnnotationPublisherMetadataSource(); @Test @@ -94,7 +94,7 @@ public class MethodAnnotationExpressionSourceTests { private static Method getMethod(String name, Class ... params) { try { - return MethodAnnotationExpressionSourceTests.class.getMethod(name, params); + return MethodAnnotationPublisherMetadataSourceTests.class.getMethod(name, params); } catch (Exception e) { throw new RuntimeException("failed to resolve method", e);