From a5490139e60e4d602917ea547c8ee25ca718a4ab Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Mon, 30 Aug 2010 22:56:57 +0000 Subject: [PATCH] INT-1227 parameterized MessageProcessor --- ...pressionEvaluatingCorrelationStrategy.java | 6 +-- .../MethodInvokingCorrelationStrategy.java | 8 ++-- .../MethodInvokingMessageGroupProcessor.java | 11 +++-- .../MethodInvokingMessageListProcessor.java | 20 ++++----- .../MethodInvokingReleaseStrategy.java | 22 +++++----- .../AbstractMessageHandlerFactoryBean.java | 4 +- .../config/ServiceActivatorFactoryBean.java | 4 +- .../xml/HeaderEnricherParserSupport.java | 4 -- .../config/xml/IntegrationNamespaceUtils.java | 1 - .../AbstractMessageProcessingSelector.java | 6 +-- .../filter/ExpressionEvaluatingSelector.java | 4 +- .../filter/MethodInvokingSelector.java | 6 +-- .../handler/AbstractMessageProcessor.java | 4 +- ...stractScriptExecutingMessageProcessor.java | 6 +-- .../ExpressionEvaluatingMessageProcessor.java | 19 +++++--- .../integration/handler/MessageProcessor.java | 6 +-- .../handler/MethodInvokingMessageHandler.java | 4 +- .../MethodInvokingMessageProcessor.java | 17 +++---- .../handler/ServiceActivatingHandler.java | 10 ++--- .../AbstractMessageProcessingRouter.java | 6 +-- .../router/ExpressionEvaluatingRouter.java | 4 +- .../router/MethodInvokingRouter.java | 8 ++-- .../AbstractMessageProcessingSplitter.java | 12 ++--- .../ExpressionEvaluatingSplitter.java | 7 ++- .../splitter/MethodInvokingSplitter.java | 9 ++-- .../AbstractMessageProcessingTransformer.java | 6 +-- .../ExpressionEvaluatingTransformer.java | 4 +- .../transformer/HeaderEnricher.java | 44 +++++++++---------- .../MethodInvokingTransformer.java | 8 ++-- .../util/AbstractExpressionEvaluator.java | 7 ++- .../util/MessagingMethodInvokerHelper.java | 13 +++--- ...GroovyScriptExecutingMessageProcessor.java | 2 +- .../xml/transformer/XPathHeaderEnricher.java | 2 +- 33 files changed, 150 insertions(+), 144 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ExpressionEvaluatingCorrelationStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ExpressionEvaluatingCorrelationStrategy.java index 69fcb2cd40..3b7f708117 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ExpressionEvaluatingCorrelationStrategy.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/ExpressionEvaluatingCorrelationStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -26,10 +26,10 @@ import org.springframework.integration.handler.ExpressionEvaluatingMessageProces */ public class ExpressionEvaluatingCorrelationStrategy implements CorrelationStrategy { - private final ExpressionEvaluatingMessageProcessor processor; + private final ExpressionEvaluatingMessageProcessor processor; public ExpressionEvaluatingCorrelationStrategy(String expression) { - this.processor = new ExpressionEvaluatingMessageProcessor(expression); + this.processor = new ExpressionEvaluatingMessageProcessor(expression, Object.class); } public Object getCorrelationKey(Message message) { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingCorrelationStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingCorrelationStrategy.java index e3e86ca52b..2e4f970e1a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingCorrelationStrategy.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingCorrelationStrategy.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -30,17 +30,17 @@ import org.springframework.util.Assert; */ public class MethodInvokingCorrelationStrategy implements CorrelationStrategy { - private final MethodInvokingMessageProcessor processor; + private final MethodInvokingMessageProcessor processor; public MethodInvokingCorrelationStrategy(Object object, String methodName) { - this.processor = new MethodInvokingMessageProcessor(object, methodName, true); + this.processor = new MethodInvokingMessageProcessor(object, methodName, true); } public MethodInvokingCorrelationStrategy(Object object, Method method) { Assert.notNull(object, "'object' must not be null"); Assert.notNull(method, "'method' must not be null"); Assert.isTrue(!Void.TYPE.equals(method.getReturnType()), "Method return type must not be void"); - this.processor = new MethodInvokingMessageProcessor(object, method); + this.processor = new MethodInvokingMessageProcessor(object, method); } public Object getCorrelationKey(Message message) { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessor.java index 77133b319d..e1a697f2fa 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessor.java @@ -36,7 +36,7 @@ import org.springframework.integration.store.MessageGroup; */ public class MethodInvokingMessageGroupProcessor extends AbstractAggregatingMessageGroupProcessor { - private final MethodInvokingMessageListProcessor processor; + private final MethodInvokingMessageListProcessor processor; /** * Creates a wrapper around the object passed in. This constructor will look for a method that can process @@ -45,7 +45,7 @@ public class MethodInvokingMessageGroupProcessor extends AbstractAggregatingMess * @param target the object to wrap */ public MethodInvokingMessageGroupProcessor(Object target) { - this.processor = new MethodInvokingMessageListProcessor(target, Aggregator.class); + this.processor = new MethodInvokingMessageListProcessor(target, Aggregator.class); } /** @@ -56,7 +56,7 @@ public class MethodInvokingMessageGroupProcessor extends AbstractAggregatingMess * @param methodName the name of the method to invoke */ public MethodInvokingMessageGroupProcessor(Object target, String methodName) { - this.processor = new MethodInvokingMessageListProcessor(target, methodName); + this.processor = new MethodInvokingMessageListProcessor(target, methodName); } /** @@ -66,7 +66,7 @@ public class MethodInvokingMessageGroupProcessor extends AbstractAggregatingMess * @param method the method to invoke */ public MethodInvokingMessageGroupProcessor(Object target, Method method) { - this.processor = new MethodInvokingMessageListProcessor(target, method); + this.processor = new MethodInvokingMessageListProcessor(target, method); } public void setConversionService(ConversionService conversionService) { @@ -80,8 +80,7 @@ public class MethodInvokingMessageGroupProcessor extends AbstractAggregatingMess @Override protected final Object aggregatePayloads(MessageGroup group, Map headers) { final Collection> messagesUpForProcessing = group.getUnmarked(); - Object result = this.processor.process(messagesUpForProcessing, headers); - return result; + return this.processor.process(messagesUpForProcessing, headers); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageListProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageListProcessor.java index eb241706f7..2c0d0aa786 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageListProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingMessageListProcessor.java @@ -32,36 +32,36 @@ import org.springframework.integration.util.MessagingMethodInvokerHelper; * @author Dave Syer * @since 2.0 */ -public class MethodInvokingMessageListProcessor extends AbstractExpressionEvaluator { +public class MethodInvokingMessageListProcessor extends AbstractExpressionEvaluator { - private final MessagingMethodInvokerHelper delegate; + private final MessagingMethodInvokerHelper delegate; - public MethodInvokingMessageListProcessor(Object targetObject, Method method, Class expectedType) { - delegate = new MessagingMethodInvokerHelper(targetObject, method, expectedType, true); + public MethodInvokingMessageListProcessor(Object targetObject, Method method, Class expectedType) { + delegate = new MessagingMethodInvokerHelper(targetObject, method, expectedType, true); } public MethodInvokingMessageListProcessor(Object targetObject, Method method) { - delegate = new MessagingMethodInvokerHelper(targetObject, method, true); + delegate = new MessagingMethodInvokerHelper(targetObject, method, true); } - public MethodInvokingMessageListProcessor(Object targetObject, String methodName, Class expectedType) { - delegate = new MessagingMethodInvokerHelper(targetObject, methodName, + public MethodInvokingMessageListProcessor(Object targetObject, String methodName, Class expectedType) { + delegate = new MessagingMethodInvokerHelper(targetObject, methodName, expectedType, true); } public MethodInvokingMessageListProcessor(Object targetObject, String methodName) { - delegate = new MessagingMethodInvokerHelper(targetObject, methodName, true); + delegate = new MessagingMethodInvokerHelper(targetObject, methodName, true); } public MethodInvokingMessageListProcessor(Object targetObject, Class annotationType) { - delegate = new MessagingMethodInvokerHelper(targetObject, annotationType, Object.class, true); + delegate = new MessagingMethodInvokerHelper(targetObject, annotationType, Object.class, true); } public String toString() { return delegate.toString(); } - public Object process(Collection> messages, Map aggregateHeaders) { + public T process(Collection> messages, Map aggregateHeaders) { try { return delegate.process(new ArrayList>(messages), aggregateHeaders); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingReleaseStrategy.java b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingReleaseStrategy.java index aeacf90272..38e2255d5e 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingReleaseStrategy.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aggregator/MethodInvokingReleaseStrategy.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. @@ -30,26 +30,28 @@ import org.springframework.integration.store.MessageGroup; */ public class MethodInvokingReleaseStrategy implements ReleaseStrategy { - private final MethodInvokingMessageListProcessor adapter; + private final MethodInvokingMessageListProcessor adapter; + public MethodInvokingReleaseStrategy(Object object, Method method) { - adapter = new MethodInvokingMessageListProcessor(object, method, Boolean.class); + this.adapter = new MethodInvokingMessageListProcessor(object, method, Boolean.class); } public MethodInvokingReleaseStrategy(Object object, String methodName) { - adapter = new MethodInvokingMessageListProcessor(object, methodName, Boolean.class); + this.adapter = new MethodInvokingMessageListProcessor(object, methodName, Boolean.class); + } + + + public void setConversionService(ConversionService conversionService) { + this.adapter.setConversionService(conversionService); } public void setBeanFactory(BeanFactory beanFactory) { - adapter.setBeanFactory(beanFactory); - } - - public void setConversionService(ConversionService conversionService) { - adapter.setConversionService(conversionService); + this.adapter.setBeanFactory(beanFactory); } public boolean canRelease(MessageGroup messages) { - return (Boolean) adapter.process(messages.getUnmarked(), null); + return this.adapter.process(messages.getUnmarked(), null); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractMessageHandlerFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractMessageHandlerFactoryBean.java index 7a384fce8e..5373b7ba50 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractMessageHandlerFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/AbstractMessageHandlerFactoryBean.java @@ -126,7 +126,7 @@ abstract class AbstractMessageHandlerFactoryBean implements FactoryBean) this.targetObject); } else { this.handler = this.createMethodInvokingHandler(this.targetObject, this.targetMethodName); @@ -162,7 +162,7 @@ abstract class AbstractMessageHandlerFactoryBean implements FactoryBean MessageHandler createMessageProcessingHandler(MessageProcessor processor) { return this.createMethodInvokingHandler(processor, "processMessage"); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/ServiceActivatorFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/ServiceActivatorFactoryBean.java index d334b64c12..8c593bfd26 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/ServiceActivatorFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/ServiceActivatorFactoryBean.java @@ -52,13 +52,13 @@ public class ServiceActivatorFactoryBean extends AbstractMessageHandlerFactoryBe @Override MessageHandler createExpressionEvaluatingHandler(String expression) { - ExpressionEvaluatingMessageProcessor processor = new ExpressionEvaluatingMessageProcessor(expression); + ExpressionEvaluatingMessageProcessor processor = new ExpressionEvaluatingMessageProcessor(expression); processor.setBeanFactory(this.getBeanFactory()); return this.configureHandler(new ServiceActivatingHandler(processor)); } @Override - MessageHandler createMessageProcessingHandler(MessageProcessor processor) { + MessageHandler createMessageProcessingHandler(MessageProcessor processor) { return this.configureHandler(new ServiceActivatingHandler(processor)); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java index 4e5f925cbb..db5c95bce3 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/HeaderEnricherParserSupport.java @@ -120,7 +120,6 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar parserContext.getReaderContext().error( "Exactly one of the 'ref', 'value', or 'expression' attributes is required.", element); } - Object headerSource = parserContext.extractSource(headerElement); BeanDefinitionBuilder valueProcessorBuilder = null; if (isValue) { if (hasMethod) { @@ -160,9 +159,6 @@ public abstract class HeaderEnricherParserSupport extends AbstractTransformerPar valueProcessorBuilder.addConstructorArgReference(ref); } } - if (valueProcessorBuilder == null) { - parserContext.getReaderContext().error("failed to parse header sub-element", headerSource); - } IntegrationNamespaceUtils.setValueIfAttributeDefined(valueProcessorBuilder, headerElement, "overwrite"); headers.put(headerName, valueProcessorBuilder.getBeanDefinition()); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java index 219befc379..e3b8c4b7d1 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/xml/IntegrationNamespaceUtils.java @@ -26,7 +26,6 @@ import org.springframework.beans.factory.xml.BeanDefinitionParserDelegate; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.core.Conventions; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/filter/AbstractMessageProcessingSelector.java b/spring-integration-core/src/main/java/org/springframework/integration/filter/AbstractMessageProcessingSelector.java index af729e3306..b4e8170aa4 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/filter/AbstractMessageProcessingSelector.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/filter/AbstractMessageProcessingSelector.java @@ -34,10 +34,10 @@ import org.springframework.util.Assert; */ abstract class AbstractMessageProcessingSelector implements MessageSelector, BeanFactoryAware { - private final MessageProcessor messageProcessor; + private final MessageProcessor messageProcessor; - public AbstractMessageProcessingSelector(MessageProcessor messageProcessor) { + public AbstractMessageProcessingSelector(MessageProcessor messageProcessor) { Assert.notNull(messageProcessor, "messageProcessor must not be null"); this.messageProcessor = messageProcessor; } @@ -45,7 +45,7 @@ abstract class AbstractMessageProcessingSelector implements MessageSelector, Bea protected void setConversionService(ConversionService conversionService) { if (this.messageProcessor instanceof AbstractMessageProcessor) { - ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); + ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/filter/ExpressionEvaluatingSelector.java b/spring-integration-core/src/main/java/org/springframework/integration/filter/ExpressionEvaluatingSelector.java index 6616ce4b39..5b13de83b7 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/filter/ExpressionEvaluatingSelector.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/filter/ExpressionEvaluatingSelector.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -29,7 +29,7 @@ import org.springframework.integration.handler.ExpressionEvaluatingMessageProces public class ExpressionEvaluatingSelector extends AbstractMessageProcessingSelector { public ExpressionEvaluatingSelector(String expression) { - super(new ExpressionEvaluatingMessageProcessor(expression)); + super(new ExpressionEvaluatingMessageProcessor(expression, Boolean.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/filter/MethodInvokingSelector.java b/spring-integration-core/src/main/java/org/springframework/integration/filter/MethodInvokingSelector.java index 160a339b54..132d9f787a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/filter/MethodInvokingSelector.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/filter/MethodInvokingSelector.java @@ -31,7 +31,7 @@ import org.springframework.util.Assert; public class MethodInvokingSelector extends AbstractMessageProcessingSelector { public MethodInvokingSelector(Object object, Method method) { - super(new MethodInvokingMessageProcessor(object, method)); + super(new MethodInvokingMessageProcessor(object, method)); Class returnType = method.getReturnType(); Assert.isTrue(boolean.class.isAssignableFrom(returnType) || Boolean.class.isAssignableFrom(returnType), @@ -39,11 +39,11 @@ public class MethodInvokingSelector extends AbstractMessageProcessingSelector { } public MethodInvokingSelector(Object object, String methodName) { - super(new MethodInvokingMessageProcessor(object, methodName)); + super(new MethodInvokingMessageProcessor(object, methodName)); } public MethodInvokingSelector(Object object) { - super(new MethodInvokingMessageProcessor(object, Filter.class)); + super(new MethodInvokingMessageProcessor(object, Filter.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java index 04ce36f98e..929bc5c0a3 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java @@ -24,8 +24,8 @@ import org.springframework.integration.util.AbstractExpressionEvaluator; * @author Dave Syer * @since 2.0 */ -public abstract class AbstractMessageProcessor extends AbstractExpressionEvaluator implements MessageProcessor { +public abstract class AbstractMessageProcessor extends AbstractExpressionEvaluator implements MessageProcessor { - abstract public Object processMessage(Message message); + abstract public T processMessage(Message message); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractScriptExecutingMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractScriptExecutingMessageProcessor.java index b5ffabce7f..428195296f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractScriptExecutingMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractScriptExecutingMessageProcessor.java @@ -27,7 +27,7 @@ import org.springframework.util.Assert; * @author Mark Fisher * @since 2.0 */ -public abstract class AbstractScriptExecutingMessageProcessor implements MessageProcessor { +public abstract class AbstractScriptExecutingMessageProcessor implements MessageProcessor { private final ScriptSource scriptSource; @@ -44,7 +44,7 @@ public abstract class AbstractScriptExecutingMessageProcessor implements Message /** * Executes the script and returns the result. */ - public final Object processMessage(Message message) { + public final T processMessage(Message message) { try { return this.executeScript(this.scriptSource, message); } @@ -57,6 +57,6 @@ public abstract class AbstractScriptExecutingMessageProcessor implements Message * Subclasses must implement this method. In doing so, the execution context for the * script should be populated with the Message's 'payload' and 'headers' as variables. */ - protected abstract Object executeScript(ScriptSource scriptSource, Message message) throws Exception; + protected abstract T executeScript(ScriptSource scriptSource, Message message) throws Exception; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java index 43928feda7..b201f31096 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java @@ -32,23 +32,28 @@ import org.springframework.util.Assert; * @author Mark Fisher * @since 2.0 */ -public class ExpressionEvaluatingMessageProcessor extends AbstractMessageProcessor { +public class ExpressionEvaluatingMessageProcessor extends AbstractMessageProcessor { private final ExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, true)); private final Expression expression; - private volatile Class expectedType = null; + private final Class expectedType; + public ExpressionEvaluatingMessageProcessor(String expression) { + this(expression, null); + } + /** * Create an {@link ExpressionEvaluatingMessageProcessor} for the given expression String. */ - public ExpressionEvaluatingMessageProcessor(String expression) { + public ExpressionEvaluatingMessageProcessor(String expression, Class expectedType) { Assert.hasLength(expression, "The expression must be non empty"); try { this.expression = parser.parseExpression(expression); this.getEvaluationContext().addPropertyAccessor(new MapAccessor()); + this.expectedType = expectedType; } catch (ParseException e) { throw new IllegalArgumentException("Failed to parse expression.", e); @@ -59,15 +64,15 @@ public class ExpressionEvaluatingMessageProcessor extends AbstractMessageProcess /** * Set the result type expected from evaluation of the expression. */ - public void setExpectedType(Class expectedType) { - this.expectedType = expectedType; - } +// public void setExpectedType(Class expectedType) { +// this.expectedType = expectedType; +// } /** * Processes the Message by evaluating the expression with that Message as the * root object. The expression evaluation result Object will be returned. */ - public Object processMessage(Message message) { + public T processMessage(Message message) { return this.evaluateExpression(this.expression, message, this.expectedType); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageProcessor.java index d48c2fc806..b9758eb943 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MessageProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -39,11 +39,11 @@ import org.springframework.integration.Message; * @author Mark Fisher * @since 2.0 */ -public interface MessageProcessor { +public interface MessageProcessor { /** * Process the Message and return a value (or null). */ - Object processMessage(Message message); + T processMessage(Message message); } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageHandler.java index 725c402394..029963d8d6 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageHandler.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -29,7 +29,7 @@ import org.springframework.util.Assert; * * @author Mark Fisher */ -public class MethodInvokingMessageHandler extends MethodInvokingMessageProcessor implements MessageHandler, Ordered { +public class MethodInvokingMessageHandler extends MethodInvokingMessageProcessor implements MessageHandler, Ordered { private volatile int order = Ordered.LOWEST_PRECEDENCE; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java index dcb2771f3b..2454a2dc3e 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java @@ -36,24 +36,24 @@ import org.springframework.integration.util.MessagingMethodInvokerHelper; * * @since 2.0 */ -public class MethodInvokingMessageProcessor extends AbstractMessageProcessor { +public class MethodInvokingMessageProcessor extends AbstractMessageProcessor { - private final MessagingMethodInvokerHelper delegate; + private final MessagingMethodInvokerHelper delegate; public MethodInvokingMessageProcessor(Object targetObject, Method method) { - delegate = new MessagingMethodInvokerHelper(targetObject, method, false); + delegate = new MessagingMethodInvokerHelper(targetObject, method, false); } public MethodInvokingMessageProcessor(Object targetObject, String methodName) { - delegate = new MessagingMethodInvokerHelper(targetObject, methodName, false); + delegate = new MessagingMethodInvokerHelper(targetObject, methodName, false); } public MethodInvokingMessageProcessor(Object targetObject, String methodName, boolean requiresReply) { - delegate = new MessagingMethodInvokerHelper(targetObject, methodName, Object.class, false); + delegate = new MessagingMethodInvokerHelper(targetObject, methodName, Object.class, false); } public MethodInvokingMessageProcessor(Object targetObject, Class annotationType) { - delegate = new MessagingMethodInvokerHelper(targetObject, annotationType, false); + delegate = new MessagingMethodInvokerHelper(targetObject, annotationType, false); } @Override @@ -68,10 +68,11 @@ public class MethodInvokingMessageProcessor extends AbstractMessageProcessor { delegate.setBeanFactory(beanFactory); } - public Object processMessage(Message message) { + public T processMessage(Message message) { try { return delegate.process(message); - } catch (Exception e) { + } + catch (Exception e) { throw new MessageHandlingException(message, e); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/ServiceActivatingHandler.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/ServiceActivatingHandler.java index 09082b91a6..e3afc4832b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/ServiceActivatingHandler.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/ServiceActivatingHandler.java @@ -27,22 +27,22 @@ import org.springframework.integration.annotation.ServiceActivator; */ public class ServiceActivatingHandler extends AbstractReplyProducingMessageHandler { - private final AbstractMessageProcessor processor; + private final AbstractMessageProcessor processor; public ServiceActivatingHandler(final Object object) { - this(new MethodInvokingMessageProcessor(object, ServiceActivator.class)); + this(new MethodInvokingMessageProcessor(object, ServiceActivator.class)); } public ServiceActivatingHandler(Object object, Method method) { - this(new MethodInvokingMessageProcessor(object, method)); + this(new MethodInvokingMessageProcessor(object, method)); } public ServiceActivatingHandler(Object object, String methodName) { - this(new MethodInvokingMessageProcessor(object, methodName)); + this(new MethodInvokingMessageProcessor(object, methodName)); } - public ServiceActivatingHandler(AbstractMessageProcessor processor) { + public ServiceActivatingHandler(AbstractMessageProcessor processor) { this.processor = processor; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/AbstractMessageProcessingRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/AbstractMessageProcessingRouter.java index cee94bf2b0..0e51c3d3b8 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/AbstractMessageProcessingRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/AbstractMessageProcessingRouter.java @@ -34,10 +34,10 @@ import org.springframework.util.Assert; */ class AbstractMessageProcessingRouter extends AbstractChannelNameResolvingMessageRouter { - private final MessageProcessor messageProcessor; + private final MessageProcessor messageProcessor; - AbstractMessageProcessingRouter(MessageProcessor messageProcessor) { + AbstractMessageProcessingRouter(MessageProcessor messageProcessor) { Assert.notNull(messageProcessor, "messageProcessor must not be null"); this.messageProcessor = messageProcessor; } @@ -46,7 +46,7 @@ class AbstractMessageProcessingRouter extends AbstractChannelNameResolvingMessag public final void onInit() { super.onInit(); if (this.messageProcessor instanceof AbstractMessageProcessor) { - ((AbstractMessageProcessor) this.messageProcessor).setConversionService(this.getConversionService()); + ((AbstractMessageProcessor) this.messageProcessor).setConversionService(this.getConversionService()); } if (this.messageProcessor instanceof BeanFactoryAware) { ((BeanFactoryAware) this.messageProcessor).setBeanFactory(this.getBeanFactory()); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/ExpressionEvaluatingRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/ExpressionEvaluatingRouter.java index d2021d6b9c..86827fed6a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/ExpressionEvaluatingRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/ExpressionEvaluatingRouter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -29,7 +29,7 @@ import org.springframework.integration.handler.ExpressionEvaluatingMessageProces public class ExpressionEvaluatingRouter extends AbstractMessageProcessingRouter { public ExpressionEvaluatingRouter(String expression) { - super(new ExpressionEvaluatingMessageProcessor(expression)); + super(new ExpressionEvaluatingMessageProcessor(expression)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/MethodInvokingRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/MethodInvokingRouter.java index 8959c75670..e50e02bdc6 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/MethodInvokingRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/MethodInvokingRouter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -34,15 +34,15 @@ import org.springframework.integration.handler.MethodInvokingMessageProcessor; public class MethodInvokingRouter extends AbstractMessageProcessingRouter { public MethodInvokingRouter(Object object, Method method) { - super(new MethodInvokingMessageProcessor(object, method)); + super(new MethodInvokingMessageProcessor(object, method)); } public MethodInvokingRouter(Object object, String methodName) { - super(new MethodInvokingMessageProcessor(object, methodName)); + super(new MethodInvokingMessageProcessor(object, methodName)); } public MethodInvokingRouter(Object object) { - super(new MethodInvokingMessageProcessor(object, Router.class)); + super(new MethodInvokingMessageProcessor(object, Router.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageProcessingSplitter.java b/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageProcessingSplitter.java index 1094417dd0..2966fc1773 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageProcessingSplitter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageProcessingSplitter.java @@ -16,6 +16,8 @@ package org.springframework.integration.splitter; +import java.util.Collection; + import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.core.convert.ConversionService; import org.springframework.integration.Message; @@ -32,12 +34,12 @@ import org.springframework.util.Assert; */ abstract class AbstractMessageProcessingSplitter extends AbstractMessageSplitter { - private final MessageProcessor messageProcessor; + private final MessageProcessor> messageProcessor; - protected AbstractMessageProcessingSplitter(MessageProcessor messageProcessor) { - Assert.notNull(messageProcessor, "messageProcessor must not be null"); - this.messageProcessor = messageProcessor; + protected AbstractMessageProcessingSplitter(MessageProcessor> expressionEvaluatingMessageProcessor) { + Assert.notNull(expressionEvaluatingMessageProcessor, "messageProcessor must not be null"); + this.messageProcessor = expressionEvaluatingMessageProcessor; } @Override @@ -45,7 +47,7 @@ abstract class AbstractMessageProcessingSplitter extends AbstractMessageSplitter super.onInit(); ConversionService conversionService = this.getConversionService(); if (conversionService != null && this.messageProcessor instanceof AbstractMessageProcessor) { - ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); + ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); } if (this.messageProcessor instanceof BeanFactoryAware) { ((BeanFactoryAware) this.messageProcessor).setBeanFactory(this.getBeanFactory()); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/splitter/ExpressionEvaluatingSplitter.java b/spring-integration-core/src/main/java/org/springframework/integration/splitter/ExpressionEvaluatingSplitter.java index 55955fb424..999fe697dd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/splitter/ExpressionEvaluatingSplitter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/splitter/ExpressionEvaluatingSplitter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -16,6 +16,8 @@ package org.springframework.integration.splitter; +import java.util.Collection; + import org.springframework.integration.handler.ExpressionEvaluatingMessageProcessor; /** @@ -29,8 +31,9 @@ import org.springframework.integration.handler.ExpressionEvaluatingMessageProces */ public class ExpressionEvaluatingSplitter extends AbstractMessageProcessingSplitter { + @SuppressWarnings({"unchecked", "rawtypes"}) public ExpressionEvaluatingSplitter(String expression) { - super(new ExpressionEvaluatingMessageProcessor(expression)); + super(new ExpressionEvaluatingMessageProcessor(expression, Collection.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/splitter/MethodInvokingSplitter.java b/spring-integration-core/src/main/java/org/springframework/integration/splitter/MethodInvokingSplitter.java index 2f9bb6635c..bee9586790 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/splitter/MethodInvokingSplitter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/splitter/MethodInvokingSplitter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -17,6 +17,7 @@ package org.springframework.integration.splitter; import java.lang.reflect.Method; +import java.util.Collection; import org.springframework.integration.annotation.Splitter; import org.springframework.integration.handler.MethodInvokingMessageProcessor; @@ -33,15 +34,15 @@ import org.springframework.integration.handler.MethodInvokingMessageProcessor; public class MethodInvokingSplitter extends AbstractMessageProcessingSplitter { public MethodInvokingSplitter(Object object, Method method) { - super(new MethodInvokingMessageProcessor(object, method)); + super(new MethodInvokingMessageProcessor>(object, method)); } public MethodInvokingSplitter(Object object, String methodName) { - super(new MethodInvokingMessageProcessor(object, methodName)); + super(new MethodInvokingMessageProcessor>(object, methodName)); } public MethodInvokingSplitter(Object object) { - super(new MethodInvokingMessageProcessor(object, Splitter.class)); + super(new MethodInvokingMessageProcessor>(object, Splitter.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java index e6945b93a9..c8024c7f47 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/AbstractMessageProcessingTransformer.java @@ -33,10 +33,10 @@ import org.springframework.util.Assert; */ public abstract class AbstractMessageProcessingTransformer implements Transformer, BeanFactoryAware { - private final MessageProcessor messageProcessor; + private final MessageProcessor messageProcessor; - protected AbstractMessageProcessingTransformer(MessageProcessor messageProcessor) { + protected AbstractMessageProcessingTransformer(MessageProcessor messageProcessor) { Assert.notNull(messageProcessor, "messageProcessor must not be null"); this.messageProcessor = messageProcessor; } @@ -48,7 +48,7 @@ public abstract class AbstractMessageProcessingTransformer implements Transforme } ConversionService conversionService = IntegrationContextUtils.getConversionService(beanFactory); if (conversionService != null && this.messageProcessor instanceof AbstractMessageProcessor) { - ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); + ((AbstractMessageProcessor) this.messageProcessor).setConversionService(conversionService); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/ExpressionEvaluatingTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/ExpressionEvaluatingTransformer.java index 0deffb2983..0b2de2a56a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/ExpressionEvaluatingTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/ExpressionEvaluatingTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -29,7 +29,7 @@ import org.springframework.integration.handler.ExpressionEvaluatingMessageProces public class ExpressionEvaluatingTransformer extends AbstractMessageProcessingTransformer { public ExpressionEvaluatingTransformer(String expression) { - super(new ExpressionEvaluatingMessageProcessor(expression)); + super(new ExpressionEvaluatingMessageProcessor(expression)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java index 3ce03860a0..119ab1e330 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/HeaderEnricher.java @@ -44,9 +44,9 @@ public class HeaderEnricher implements Transformer { private static final Log logger = LogFactory.getLog(HeaderEnricher.class); - private final Map headersToAdd; + private final Map> headersToAdd; - private volatile MessageProcessor messageProcessor; + private volatile MessageProcessor messageProcessor; private volatile boolean defaultOverwrite = false; @@ -60,12 +60,12 @@ public class HeaderEnricher implements Transformer { /** * Create a HeaderEnricher with the given map of headers. */ - public HeaderEnricher(Map headersToAdd) { - this.headersToAdd = (headersToAdd != null) ? headersToAdd : new HashMap(); + public HeaderEnricher(Map> headersToAdd) { + this.headersToAdd = (headersToAdd != null) ? headersToAdd : new HashMap>(); } - public void setMessageProcessor(MessageProcessor messageProcessor) { + public void setMessageProcessor(MessageProcessor messageProcessor) { this.messageProcessor = messageProcessor; } @@ -86,9 +86,9 @@ public class HeaderEnricher implements Transformer { try { Map headerMap = new HashMap(message.getHeaders()); this.addHeadersFromMessageProcessor(message, headerMap); - for (Map.Entry entry : this.headersToAdd.entrySet()) { + for (Map.Entry> entry : this.headersToAdd.entrySet()) { String key = entry.getKey(); - HeaderValueMessageProcessor valueProcessor = entry.getValue(); + HeaderValueMessageProcessor valueProcessor = entry.getValue(); Boolean shouldOverwrite = valueProcessor.isOverwrite(); if (shouldOverwrite == null) { shouldOverwrite = this.defaultOverwrite; @@ -129,14 +129,14 @@ public class HeaderEnricher implements Transformer { } - public static interface HeaderValueMessageProcessor extends MessageProcessor { + public static interface HeaderValueMessageProcessor extends MessageProcessor { Boolean isOverwrite(); } - static abstract class AbstractHeaderValueMessageProcessor implements HeaderValueMessageProcessor { + static abstract class AbstractHeaderValueMessageProcessor implements HeaderValueMessageProcessor { // null indicates no explicit setting; use header-enricher's 'default-overwrite' value private volatile Boolean overwrite = null; @@ -152,50 +152,50 @@ public class HeaderEnricher implements Transformer { } - static class StaticHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { + static class StaticHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { - private final Object value; + private final T value; - public StaticHeaderValueMessageProcessor(Object value) { + public StaticHeaderValueMessageProcessor(T value) { this.value = value; } - public Object processMessage(Message message) { + public T processMessage(Message message) { return this.value; } } - static class ExpressionEvaluatingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor implements BeanFactoryAware { + static class ExpressionEvaluatingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor implements BeanFactoryAware { - private final ExpressionEvaluatingMessageProcessor targetProcessor; + private final ExpressionEvaluatingMessageProcessor targetProcessor; /** * Create a header value processor for the given expression String and the expected type * of the expression evaluation result. The expectedType may be null if unknown. */ - public ExpressionEvaluatingHeaderValueMessageProcessor(String expressionString, Class expectedType) { - this.targetProcessor = new ExpressionEvaluatingMessageProcessor(expressionString); - this.targetProcessor.setExpectedType(expectedType); + public ExpressionEvaluatingHeaderValueMessageProcessor(String expressionString, Class expectedType) { + this.targetProcessor = new ExpressionEvaluatingMessageProcessor(expressionString, expectedType); + //this.targetProcessor.setExpectedType(expectedType); } public void setBeanFactory(BeanFactory beanFactory) { this.targetProcessor.setBeanFactory(beanFactory); } - public Object processMessage(Message message) { + public T processMessage(Message message) { return this.targetProcessor.processMessage(message); } } - static class MethodInvokingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { + static class MethodInvokingHeaderValueMessageProcessor extends AbstractHeaderValueMessageProcessor { - private final MethodInvokingMessageProcessor targetProcessor; + private final MethodInvokingMessageProcessor targetProcessor; public MethodInvokingHeaderValueMessageProcessor(Object targetObject, String method) { - this.targetProcessor = new MethodInvokingMessageProcessor(targetObject, method); + this.targetProcessor = new MethodInvokingMessageProcessor(targetObject, method); } public Object processMessage(Message message) { diff --git a/spring-integration-core/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java b/spring-integration-core/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java index 922171a3a3..1ebbf6d39a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -32,15 +32,15 @@ import org.springframework.integration.handler.MethodInvokingMessageProcessor; public class MethodInvokingTransformer extends AbstractMessageProcessingTransformer { public MethodInvokingTransformer(Object object, Method method) { - super(new MethodInvokingMessageProcessor(object, method)); + super(new MethodInvokingMessageProcessor(object, method)); } public MethodInvokingTransformer(Object object, String methodName) { - super(new MethodInvokingMessageProcessor(object, methodName)); + super(new MethodInvokingMessageProcessor(object, methodName)); } public MethodInvokingTransformer(Object object) { - super(new MethodInvokingMessageProcessor(object, Transformer.class)); + super(new MethodInvokingMessageProcessor(object, Transformer.class)); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/util/AbstractExpressionEvaluator.java b/spring-integration-core/src/main/java/org/springframework/integration/util/AbstractExpressionEvaluator.java index 0a4f1e0549..fc92b2a60b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/util/AbstractExpressionEvaluator.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/util/AbstractExpressionEvaluator.java @@ -61,7 +61,7 @@ public abstract class AbstractExpressionEvaluator implements BeanFactoryAware { return this.evaluationContext; } - protected Object evaluateExpression(Expression expression, Message message, Class expectedType) { + protected T evaluateExpression(Expression expression, Message message, Class expectedType) { try { return evaluateExpression(expression, (Object) message, expectedType); } @@ -76,9 +76,8 @@ public abstract class AbstractExpressionEvaluator implements BeanFactoryAware { } } - protected Object evaluateExpression(Expression expression, Object message, Class expectedType) { - return (expectedType != null) ? expression.getValue(this.evaluationContext, message, expectedType) : expression - .getValue(this.evaluationContext, message); + protected T evaluateExpression(Expression expression, Object message, Class expectedType) { + return expression.getValue(this.evaluationContext, message, expectedType); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingMethodInvokerHelper.java b/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingMethodInvokerHelper.java index ac8b21a5ef..6572587650 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingMethodInvokerHelper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingMethodInvokerHelper.java @@ -71,7 +71,7 @@ import org.springframework.util.ReflectionUtils.MethodFilter; * * @since 2.0 */ -public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator { +public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator { private final Log logger = LogFactory.getLog(this.getClass()); @@ -115,12 +115,12 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator { this(targetObject, annotationType, (String) null, expectedType, canProcessMessageList); } - public Object process(Message message) throws Exception { + public T process(Message message) throws Exception { ParametersWrapper parameters = new ParametersWrapper(message); return processInternal(parameters); } - public Object process(Collection> messages, Map headers) throws Exception { + public T process(Collection> messages, Map headers) throws Exception { ParametersWrapper parameters = new ParametersWrapper(messages, headers); return processInternal(parameters); } @@ -209,21 +209,20 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator { return false; } - private Object processInternal(ParametersWrapper parameters) throws Exception { + private T processInternal(ParametersWrapper parameters) throws Exception { Throwable evaluationException = null; List candidates = this.findHandlerMethodsForParameters(parameters); Assert.state(!candidates.isEmpty(), "No candidate methods found for messages."); for (HandlerMethod candidate : candidates) { try { Expression expression = candidate.getExpression(); - Class expectedType = this.expectedType != null ? this.expectedType : candidate.method - .getReturnType(); + Class expectedType = this.expectedType != null ? this.expectedType : candidate.method.getReturnType(); Object result = this.evaluateExpression(expression, parameters, expectedType); if (this.requiresReply) { Assert.notNull(result, "Expression evaluation result was null, but this processor requires a reply."); } - return result; + return (T) result; } // keep the first exception catch (EvaluationException e) { diff --git a/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/GroovyScriptExecutingMessageProcessor.java b/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/GroovyScriptExecutingMessageProcessor.java index d7ff899320..4d63f69270 100644 --- a/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/GroovyScriptExecutingMessageProcessor.java +++ b/spring-integration-groovy/src/main/java/org/springframework/integration/groovy/GroovyScriptExecutingMessageProcessor.java @@ -33,7 +33,7 @@ import org.springframework.util.Assert; * @author Mark Fisher * @since 2.0 */ -public class GroovyScriptExecutingMessageProcessor extends AbstractScriptExecutingMessageProcessor { +public class GroovyScriptExecutingMessageProcessor extends AbstractScriptExecutingMessageProcessor { private final GroovyScriptFactory scriptFactory; diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XPathHeaderEnricher.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XPathHeaderEnricher.java index 808f8e39bf..1fc3fb2328 100644 --- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XPathHeaderEnricher.java +++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XPathHeaderEnricher.java @@ -49,7 +49,7 @@ public class XPathHeaderEnricher extends HeaderEnricher { } - public static class XPathExpressionEvaluatingHeaderValueMessageProcessor implements HeaderValueMessageProcessor { + public static class XPathExpressionEvaluatingHeaderValueMessageProcessor implements HeaderValueMessageProcessor { private final XPathExpression expression;