diff --git a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/ManualAckTests.java b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/ManualAckTests.java index aad24c430a..32f4af910f 100644 --- a/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/ManualAckTests.java +++ b/spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/ManualAckTests.java @@ -39,9 +39,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.integration.amqp.AmqpHeaders; import org.springframework.integration.amqp.inbound.ManualAckTests.ManualAckConfig; import org.springframework.integration.amqp.rule.BrokerRunning; -import org.springframework.integration.annotation.Header; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.integration.annotation.MessageEndpoint; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.config.EnableIntegration; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Filter.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Filter.java index 524c66015c..bb0add30ac 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Filter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Filter.java @@ -30,7 +30,8 @@ import java.lang.annotation.Target; * Message payload's type. Any type conversion supported by default or any * Converters registered with the "integrationConversionService" bean will be * applied to the Message payload if necessary. Header values can also be passed - * as Message parameters by using the {@link Header @Header} parameter annotation. + * as Message parameters by using the + * {@link org.springframework.messaging.handler.annotation.Header @Header} parameter annotation. *

* The return type of the annotated method must be a boolean (or Boolean). * diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Gateway.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Gateway.java index e9f6a6dfee..874531ded8 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Gateway.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Gateway.java @@ -32,9 +32,11 @@ import java.lang.annotation.Target; *

A method annotated with @Gateway may accept a single non-annotated * parameter of type {@link org.springframework.messaging.Message} * or of the intended Message payload type. Method parameters may be mapped - * to individual Message header values by using the {@link Header @Header} + * to individual Message header values by using the + * {@link org.springframework.messaging.handler.annotation.Header @Header} * parameter annotation. Alternatively, to pass the entire Message headers - * map, a Map-typed parameter may be annotated with {@link Headers}. + * map, a Map-typed parameter may be annotated with + * {@link org.springframework.messaging.handler.annotation.Headers}. * *

Return values from the annotated method may be of any type. If the * declared return value is not a Message, the reply Message's payload will be diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Header.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Header.java index 5c54bb2209..ce8bb48e20 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Header.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Header.java @@ -25,18 +25,22 @@ import java.lang.annotation.Target; /** * Annotation indicating that a method parameter's value should be * retrieved from the message headers. The value of the annotation - * can either be a header name (e.g., 'foo') or SpEL expression + * can either be a header name (e.g., 'foo') or SpEL expression * (e.g., 'payload.getCustomerId()') which is quite useful when - * the name of the header has to be dynamically computed. It also + * the name of the header has to be dynamically computed. It also * provides an optional 'required' property which * specifies whether the attribute value must be available within * the header. The default value for 'required' is true. - * + * * @author Mark Fisher + * + * @deprecated since 4.1 in favor of {@link org.springframework.messaging.handler.annotation.Header}. + * Will be removed in a future release. */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented +@Deprecated public @interface Header { String value() default ""; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Headers.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Headers.java index 7b64494b7c..8a67f7f13f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Headers.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Headers.java @@ -26,12 +26,16 @@ import java.lang.annotation.Target; * Annotation indicating that a method parameter's value should be mapped to or * from the message headers. The annotated parameter must be assignable to * {@link java.util.Map}, and all of the Map's keys must be Strings. - * + * * @author Mark Fisher + * + * @deprecated since 4.1 in favor of {@link org.springframework.messaging.handler.annotation.Headers}. + * Will be removed in a future release. */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented +@Deprecated public @interface Headers { } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Payload.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Payload.java index f49247e3d7..79a947aec1 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Payload.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Payload.java @@ -33,10 +33,14 @@ import java.lang.annotation.Target; * * @author Oleg Zhurakousky * @since 2.0 + * + * @deprecated since 4.1 in favor of {@link org.springframework.messaging.handler.annotation.Payload}. + * Will be removed in a future release. */ @Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented +@Deprecated public @interface Payload { /** diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Router.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Router.java index abcea0cc8b..c688382ff2 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Router.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Router.java @@ -32,7 +32,8 @@ import java.lang.annotation.Target; * Message payload's type. Any type conversion supported by * {@link org.springframework.beans.SimpleTypeConverter} will be applied to * the Message payload if necessary. Header values can also be passed as - * Message parameters by using the {@link Header @Header} parameter annotation. + * Message parameters by using the + * {@link org.springframework.messaging.handler.annotation.Header @Header} parameter annotation. *

* Return values from the annotated method may be either a Collection or Array * whose elements are either diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/ServiceActivator.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/ServiceActivator.java index f67cbb92d6..4a612832ac 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/ServiceActivator.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/ServiceActivator.java @@ -31,7 +31,8 @@ import java.lang.annotation.Target; * Message payload's type. Any type conversion supported by * {@link org.springframework.beans.SimpleTypeConverter} will be applied to * the Message payload if necessary. Header values can also be passed as - * Message parameters by using the {@link Header @Header} parameter annotation. + * Message parameters by using the + * {@link org.springframework.messaging.handler.annotation.Header @Header} parameter annotation. *

* Return values from the annotated method may be of any type. If the return * value is not a Message, a reply Message will be created with that object diff --git a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Splitter.java b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Splitter.java index af773dff28..3c5e4080f3 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/annotation/Splitter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/annotation/Splitter.java @@ -31,7 +31,8 @@ import java.lang.annotation.Target; * Message payload's type. Any type conversion supported by * {@link org.springframework.beans.SimpleTypeConverter} will be applied to * the Message payload if necessary. Header values can also be passed as - * Message parameters by using the {@link Header @Header} parameter annotation. + * Message parameters by using the + * {@link org.springframework.messaging.handler.annotation.Header @Header} parameter annotation. *

* Return values from the annotated method may be either a Collection or Array * with elements of any type. If the type is not a Message, each will be used diff --git a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java index ef6ed8c4dc..b466441afc 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSource.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,17 +26,18 @@ import java.util.Set; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Payload; import org.springframework.integration.annotation.Publisher; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** * An {@link PublisherMetadataSource} implementation that retrieves the channel * name and expression strings from an annotation. - * + * * @author Mark Fisher + * @author Artem Bilan * @since 2.0 */ public class MethodAnnotationPublisherMetadataSource implements PublisherMetadataSource { @@ -71,28 +72,39 @@ public class MethodAnnotationPublisherMetadataSource implements PublisherMetadat return (StringUtils.hasText(channelName) ? channelName : null); } + @SuppressWarnings("deprecation") public String getPayloadExpression(Method method) { String payloadExpression = null; - Payload methodPayloadAnnotation = AnnotationUtils.findAnnotation(method, Payload.class); - if (methodPayloadAnnotation != null) { - payloadExpression = StringUtils.hasText(methodPayloadAnnotation.value()) - ? methodPayloadAnnotation.value() - : "#" + PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME; + Annotation methodPayloadAnnotation = + AnnotationUtils.findAnnotation(method, org.springframework.integration.annotation.Payload.class); + if (methodPayloadAnnotation == null) { + methodPayloadAnnotation = AnnotationUtils.findAnnotation(method, Payload.class); } + + if (methodPayloadAnnotation != null) { + payloadExpression = getAnnotationValue(methodPayloadAnnotation, null, String.class); + if (!StringUtils.hasText(payloadExpression)) { + payloadExpression = "#" + PublisherMetadataSource.RETURN_VALUE_VARIABLE_NAME; + } + } + Annotation[][] annotationArray = method.getParameterAnnotations(); for (int i = 0; i < annotationArray.length; i++) { Annotation[] parameterAnnotations = annotationArray[i]; for (Annotation currentAnnotation : parameterAnnotations) { - if (Payload.class.equals(currentAnnotation.annotationType())) { + if (org.springframework.integration.annotation.Payload.class.equals(currentAnnotation.annotationType()) + || Payload.class.equals(currentAnnotation.annotationType())) { Assert.state(payloadExpression == null, - "@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 can be used at most once on a @Publisher method, " + + "either at method-level or on a single parameter"); + Assert.state("".equals(AnnotationUtils.getValue(currentAnnotation)), "@Payload on a parameter for a @Publisher method may not contain an expression"); payloadExpression = "#" + PublisherMetadataSource.ARGUMENT_MAP_VARIABLE_NAME + "[" + i + "]"; } } } - if (payloadExpression == null || payloadExpression.contains("#" + PublisherMetadataSource.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."); @@ -100,6 +112,7 @@ public class MethodAnnotationPublisherMetadataSource implements PublisherMetadat return payloadExpression; } + @SuppressWarnings("deprecation") public Map getHeaderExpressions(Method method) { Map headerExpressions = new HashMap(); String[] parameterNames = this.parameterNameDiscoverer.getParameterNames(method); @@ -107,13 +120,14 @@ public class MethodAnnotationPublisherMetadataSource implements PublisherMetadat for (int i = 0; i < annotationArray.length; i++) { Annotation[] parameterAnnotations = annotationArray[i]; for (Annotation currentAnnotation : parameterAnnotations) { - if (Header.class.equals(currentAnnotation.annotationType())) { - Header headerAnnotation = (Header) currentAnnotation; - String name = headerAnnotation.value(); + if (org.springframework.integration.annotation.Header.class.equals(currentAnnotation.annotationType()) + || Header.class.equals(currentAnnotation.annotationType())) { + String name = getAnnotationValue(currentAnnotation, null, String.class); if (!StringUtils.hasText(name)) { name = parameterNames[i]; } - headerExpressions.put(name, "#" + PublisherMetadataSource.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/config/CorrelationStrategyFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/CorrelationStrategyFactoryBean.java index 75d1aef62c..9fdf18cd97 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/CorrelationStrategyFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/CorrelationStrategyFactoryBean.java @@ -22,7 +22,7 @@ import org.springframework.integration.IntegrationMessageHeaderAccessor; import org.springframework.integration.aggregator.CorrelationStrategy; import org.springframework.integration.aggregator.HeaderAttributeCorrelationStrategy; import org.springframework.integration.aggregator.MethodInvokingCorrelationStrategy; -import org.springframework.integration.config.annotation.MessagingAnnotationUtils; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.util.StringUtils; /** diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java index 0e645efa20..b920a1e5cd 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/MessagingGatewayRegistrar.java @@ -38,7 +38,7 @@ import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; import org.springframework.expression.common.LiteralExpression; import org.springframework.integration.annotation.MessagingGateway; -import org.springframework.integration.config.annotation.MessagingAnnotationUtils; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.integration.gateway.GatewayMethodMetadata; import org.springframework.integration.gateway.GatewayProxyFactoryBean; import org.springframework.util.Assert; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/ReleaseStrategyFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/ReleaseStrategyFactoryBean.java index 88b493f5df..06d88d0a04 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/ReleaseStrategyFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/ReleaseStrategyFactoryBean.java @@ -24,7 +24,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.integration.aggregator.MethodInvokingReleaseStrategy; import org.springframework.integration.aggregator.ReleaseStrategy; import org.springframework.integration.aggregator.SequenceSizeReleaseStrategy; -import org.springframework.integration.config.annotation.MessagingAnnotationUtils; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.util.StringUtils; /** diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java index 67d4716231..c848ac8593 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AbstractMethodAnnotationPostProcessor.java @@ -49,6 +49,7 @@ import org.springframework.integration.endpoint.PollingConsumer; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; import org.springframework.integration.scheduling.PollerMetadata; import org.springframework.integration.support.channel.BeanFactoryChannelResolver; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; import org.springframework.messaging.PollableChannel; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AggregatorAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AggregatorAnnotationPostProcessor.java index f157c4d62f..fa2bfd4dbb 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AggregatorAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/AggregatorAnnotationPostProcessor.java @@ -30,6 +30,7 @@ import org.springframework.integration.annotation.Aggregator; import org.springframework.integration.annotation.CorrelationStrategy; import org.springframework.integration.annotation.ReleaseStrategy; import org.springframework.integration.store.SimpleMessageStore; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageHandler; import org.springframework.util.StringUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeFromAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeFromAnnotationPostProcessor.java index ba980769c6..693991889a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeFromAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeFromAnnotationPostProcessor.java @@ -28,6 +28,7 @@ import org.springframework.core.env.Environment; import org.springframework.integration.annotation.BridgeFrom; import org.springframework.integration.annotation.BridgeTo; import org.springframework.integration.handler.BridgeHandler; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeToAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeToAnnotationPostProcessor.java index af4e71a50e..36027856b4 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeToAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/BridgeToAnnotationPostProcessor.java @@ -28,6 +28,7 @@ import org.springframework.integration.annotation.BridgeFrom; import org.springframework.integration.annotation.BridgeTo; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.handler.BridgeHandler; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessor.java index 8c6fded2c4..cd7566b710 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/FilterAnnotationPostProcessor.java @@ -28,6 +28,7 @@ import org.springframework.integration.annotation.Filter; import org.springframework.integration.core.MessageSelector; import org.springframework.integration.filter.MessageFilter; import org.springframework.integration.filter.MethodInvokingSelector; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/InboundChannelAdapterAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/InboundChannelAdapterAnnotationPostProcessor.java index 84e0f374fc..0675b6d234 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/InboundChannelAdapterAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/InboundChannelAdapterAnnotationPostProcessor.java @@ -30,6 +30,7 @@ import org.springframework.integration.config.IntegrationConfigUtils; import org.springframework.integration.core.MessageSource; import org.springframework.integration.endpoint.MethodInvokingMessageSource; import org.springframework.integration.endpoint.SourcePollingChannelAdapter; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessor.java index 5f1fabd6db..31f11f84f8 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationPostProcessor.java @@ -54,6 +54,7 @@ import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.annotation.Splitter; import org.springframework.integration.annotation.Transformer; import org.springframework.integration.endpoint.AbstractEndpoint; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.stereotype.Component; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessor.java index 4cdfc3eec8..bb20537b33 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/RouterAnnotationPostProcessor.java @@ -29,6 +29,7 @@ import org.springframework.core.env.Environment; import org.springframework.integration.annotation.Router; import org.springframework.integration.router.AbstractMessageRouter; import org.springframework.integration.router.MethodInvokingRouter; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/ServiceActivatorAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/ServiceActivatorAnnotationPostProcessor.java index fcc7a20a78..2c4fd7f799 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/ServiceActivatorAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/ServiceActivatorAnnotationPostProcessor.java @@ -27,6 +27,7 @@ import org.springframework.core.env.Environment; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.handler.AbstractReplyProducingMessageHandler; import org.springframework.integration.handler.ServiceActivatingHandler; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; import org.springframework.util.StringUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessor.java index 3872dbb44d..67e8965da6 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/SplitterAnnotationPostProcessor.java @@ -27,6 +27,7 @@ import org.springframework.core.env.Environment; import org.springframework.integration.annotation.Splitter; import org.springframework.integration.splitter.AbstractMessageSplitter; import org.springframework.integration.splitter.MethodInvokingSplitter; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.MessageHandler; import org.springframework.util.Assert; import org.springframework.util.StringUtils; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapper.java b/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapper.java index 9f53ebb64e..244503d79f 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapper.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. @@ -31,21 +31,23 @@ import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; import org.springframework.integration.expression.ExpressionUtils; import org.springframework.integration.mapping.InboundMessageMapper; import org.springframework.integration.mapping.MessageMappingException; import org.springframework.integration.support.AbstractIntegrationMessageBuilder; import org.springframework.integration.support.DefaultMessageBuilderFactory; import org.springframework.integration.support.MessageBuilderFactory; +import org.springframework.integration.util.MessagingAnnotationUtils; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -72,6 +74,7 @@ import org.springframework.util.StringUtils; * @author Iwein Fuld * @author Oleg Zhurakousky * @author Gary Russell + * @author Artem Bilan * @since 2.0 */ class GatewayMethodInboundMessageMapper implements InboundMessageMapper, BeanFactoryAware { @@ -167,7 +170,8 @@ class GatewayMethodInboundMessageMapper implements InboundMessageMapper evaluateHeaders(EvaluationContext methodInvocationEvaluationContext, Map headerExpressions) { + private Map evaluateHeaders(EvaluationContext methodInvocationEvaluationContext, + Map headerExpressions) { Map evaluatedHeaders = new HashMap(); for (Map.Entry entry : headerExpressions.entrySet()) { Object value = entry.getValue().getValue(methodInvocationEvaluationContext); @@ -182,9 +186,6 @@ class GatewayMethodInboundMessageMapper implements InboundMessageMapper type = annotation.annotationType(); - if (type.equals(Payload.class) || type.equals(Header.class) || type.equals(Headers.class)) { - if (match != null) { - throw new MessagingException("At most one parameter annotation can be provided for message mapping, " + - "but found two: [" + match.annotationType().getName() + "] and [" + annotation.annotationType().getName() + "]"); - } - match = annotation; - } - } - return match; - } private void copyHeaders(Map argumentValue, Map headers) { for (Object key : argumentValue.keySet()) { @@ -237,8 +221,8 @@ class GatewayMethodInboundMessageMapper implements InboundMessageMapper toMessage(MethodArgsHolder holder) throws Exception { Object messageOrPayload = null; boolean foundPayloadAnnotation = false; @@ -279,35 +268,42 @@ class GatewayMethodInboundMessageMapper implements InboundMessageMapper headers = new HashMap(); if (GatewayMethodInboundMessageMapper.this.payloadExpression != null) { - messageOrPayload = GatewayMethodInboundMessageMapper.this.payloadExpression.getValue(methodInvocationEvaluationContext); + messageOrPayload = + GatewayMethodInboundMessageMapper.this.payloadExpression.getValue(methodInvocationEvaluationContext); } for (int i = 0; i < GatewayMethodInboundMessageMapper.this.parameterList.size(); i++) { Object argumentValue = arguments[i]; MethodParameter methodParameter = GatewayMethodInboundMessageMapper.this.parameterList.get(i); - Annotation annotation = GatewayMethodInboundMessageMapper.this.findMappingAnnotation(methodParameter.getParameterAnnotations()); + Annotation annotation = + MessagingAnnotationUtils.findMessagePartAnnotation(methodParameter.getParameterAnnotations()); if (annotation != null) { - if (annotation.annotationType().equals(Payload.class)) { + if (annotation.annotationType().equals(org.springframework.integration.annotation.Payload.class) + || annotation.annotationType().equals(Payload.class)) { if (messageOrPayload != null) { GatewayMethodInboundMessageMapper.this.throwExceptionForMultipleMessageOrPayloadParameters(methodParameter); } - String expression = ((Payload) annotation).value(); + String expression = (String) AnnotationUtils.getValue(annotation); if (!StringUtils.hasText(expression)) { messageOrPayload = argumentValue; } else { - messageOrPayload = GatewayMethodInboundMessageMapper.this.evaluatePayloadExpression(expression, argumentValue); + messageOrPayload = + GatewayMethodInboundMessageMapper.this.evaluatePayloadExpression(expression, argumentValue); } foundPayloadAnnotation = true; } - else if (annotation.annotationType().equals(Header.class)) { - Header headerAnnotation = (Header) annotation; - String headerName = GatewayMethodInboundMessageMapper.this.determineHeaderName(headerAnnotation, methodParameter); - if (headerAnnotation.required() && argumentValue == null) { - throw new IllegalArgumentException("Received null argument value for required header: '" + headerName + "'"); + else if (annotation.annotationType().equals(org.springframework.integration.annotation.Header.class) + || annotation.annotationType().equals(Header.class)) { + String headerName = + GatewayMethodInboundMessageMapper.this.determineHeaderName(annotation, methodParameter); + if ((Boolean) AnnotationUtils.getValue(annotation, "required") && argumentValue == null) { + throw new IllegalArgumentException("Received null argument value for required header: '" + + headerName + "'"); } headers.put(headerName, argumentValue); } - else if (annotation.annotationType().equals(Headers.class)) { + else if (annotation.annotationType().equals(org.springframework.integration.annotation.Headers.class) + || annotation.annotationType().equals(Headers.class)) { if (argumentValue != null) { if (!(argumentValue instanceof Map)) { throw new IllegalArgumentException("@Headers annotation is only valid for Map-typed parameters"); @@ -337,7 +333,8 @@ class GatewayMethodInboundMessageMapper implements InboundMessageMapper builder = (messageOrPayload instanceof Message) ? GatewayMethodInboundMessageMapper.this.messageBuilderFactory.fromMessage((Message) messageOrPayload) : GatewayMethodInboundMessageMapper.this.messageBuilderFactory.withPayload(messageOrPayload); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayProxyFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayProxyFactoryBean.java index 9414c2426b..ce15063c78 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayProxyFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/gateway/GatewayProxyFactoryBean.java @@ -46,7 +46,6 @@ import org.springframework.expression.common.LiteralExpression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.integration.annotation.Gateway; import org.springframework.integration.annotation.GatewayHeader; -import org.springframework.integration.annotation.Payload; import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.history.TrackableComponent; import org.springframework.integration.support.channel.BeanFactoryChannelResolver; @@ -55,6 +54,7 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessagingException; import org.springframework.messaging.core.DestinationResolver; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; @@ -349,7 +349,10 @@ public class GatewayProxyFactoryBean extends AbstractEndpoint boolean shouldReply = returnType != void.class; int paramCount = method.getParameterTypes().length; Object response = null; - boolean hasPayloadExpression = method.isAnnotationPresent(Payload.class); + @SuppressWarnings("deprecation") + boolean hasPayloadExpression = + method.isAnnotationPresent(org.springframework.integration.annotation.Payload.class) + || method.isAnnotationPresent(Payload.class); if (!hasPayloadExpression && this.methodMetadataMap != null) { // check for the method metadata next GatewayMethodMetadata metadata = this.methodMetadataMap.get(method.getName()); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/mapping/HeaderMapper.java b/spring-integration-core/src/main/java/org/springframework/integration/mapping/HeaderMapper.java index 0f7d3852cf..b83f8b2e46 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/mapping/HeaderMapper.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/mapping/HeaderMapper.java @@ -24,7 +24,7 @@ import org.springframework.messaging.MessageHeaders; * Generic strategy interface for mapping {@link MessageHeaders} to and from other * types of objects. This would typically be used by adapters where the "other type" * has a concept of headers or properties (HTTP, JMS, AMQP, etc). - * + * * @author Mark Fisher * * @param type of the instance to and from which headers will be mapped. diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationUtils.java b/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingAnnotationUtils.java similarity index 69% rename from spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationUtils.java rename to spring-integration-core/src/main/java/org/springframework/integration/util/MessagingAnnotationUtils.java index 500cf9b3a7..c5ef3e94db 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/annotation/MessagingAnnotationUtils.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/util/MessagingAnnotationUtils.java @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.integration.config.annotation; + +package org.springframework.integration.util; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -23,6 +24,10 @@ import java.util.concurrent.atomic.AtomicReference; import org.springframework.aop.support.AopUtils; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.messaging.MessagingException; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; @@ -90,6 +95,39 @@ public final class MessagingAnnotationUtils { return reference.get(); } + /** + * Find the one of {@link Payload}, {@link Header} or {@link Headers} annotation from + * the provided {@code annotations} array. + * @param annotations the annotations to scan. + * @return the matched annotation or {@code null}. + * @throws MessagingException if more than one of {@link Payload}, {@link Header} + * or {@link Headers} annotations are presented. + */ + @SuppressWarnings("deprecation") + public static Annotation findMessagePartAnnotation(Annotation[] annotations) { + if (annotations == null || annotations.length == 0) { + return null; + } + Annotation match = null; + for (Annotation annotation : annotations) { + Class type = annotation.annotationType(); + if (type.equals(org.springframework.integration.annotation.Payload.class) + || type.equals(Payload.class) + || type.equals(org.springframework.integration.annotation.Header.class) + || type.equals(Header.class) + || type.equals(org.springframework.integration.annotation.Headers.class) + || type.equals(Headers.class)) { + if (match != null) { + throw new MessagingException("At most one parameter annotation can be provided " + + "for message mapping, but found two: [" + match.annotationType().getName() + "] and [" + + annotation.annotationType().getName() + "]"); + } + match = annotation; + } + } + return match; + } + private static Class getTargetClass(Object targetObject) { Class targetClass = targetObject.getClass(); if (AopUtils.isAopProxy(targetObject)) { 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 c4fb6c560b..54e1b68010 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 @@ -43,6 +43,7 @@ import org.springframework.aop.support.AopUtils; import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; +import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.convert.TypeDescriptor; import org.springframework.expression.EvaluationException; @@ -50,14 +51,13 @@ import org.springframework.expression.Expression; import org.springframework.expression.TypeConverter; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; import org.springframework.integration.annotation.Payloads; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandlingException; -import org.springframework.messaging.MessagingException; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.ReflectionUtils; @@ -235,7 +235,8 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator if (method instanceof Method) { context.registerMethodFilter(targetType, new FixedMethodFilter((Method) method)); if (expectedType != null) { - Assert.state(context.getTypeConverter().canConvert(TypeDescriptor.valueOf(((Method) method).getReturnType()), + Assert.state(context.getTypeConverter() + .canConvert(TypeDescriptor.valueOf(((Method) method).getReturnType()), TypeDescriptor.valueOf(expectedType)), "Cannot convert to expected type (" + expectedType + ") from " + method); } @@ -250,13 +251,15 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator context.setVariable("target", targetObject); } - private boolean canReturnExpectedType(AnnotatedMethodFilter filter, Class targetType, TypeConverter typeConverter) { + private boolean canReturnExpectedType(AnnotatedMethodFilter filter, Class targetType, + TypeConverter typeConverter) { if (expectedType == null) { return true; } List methods = filter.filter(Arrays.asList(ReflectionUtils.getAllDeclaredMethods(targetType))); for (Method method : methods) { - if (typeConverter.canConvert(TypeDescriptor.valueOf(method.getReturnType()), TypeDescriptor.valueOf(expectedType))) { + if (typeConverter.canConvert(TypeDescriptor.valueOf(method.getReturnType()), + TypeDescriptor.valueOf(expectedType))) { return true; } } @@ -413,7 +416,8 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator if ("org.springframework.integration.gateway.RequestReplyExchanger".equals(iface.getName())) { frameworkMethods.add(targetClass.getMethod("exchange", Message.class)); if (logger.isDebugEnabled()) { - logger.debug(targetObject.getClass() + ": Ambiguous fallback methods; using RequestReplyExchanger.exchange()"); + logger.debug(targetObject.getClass() + + ": Ambiguous fallback methods; using RequestReplyExchanger.exchange()"); } } } @@ -431,7 +435,8 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator try { Assert.state(!fallbackMethods.isEmpty() || !fallbackMessageMethods.isEmpty(), - "Target object of type [" + this.targetObject.getClass() + "] has no eligible methods for handling Messages."); + "Target object of type [" + this.targetObject.getClass() + + "] has no eligible methods for handling Messages."); } catch (Exception e) { //TODO backward compatibility @@ -536,7 +541,8 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator private static final SpelExpressionParser EXPRESSION_PARSER = new SpelExpressionParser(); - private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = new LocalVariableTableParameterNameDiscoverer(); + private static final ParameterNameDiscoverer PARAMETER_NAME_DISCOVERER = + new LocalVariableTableParameterNameDiscoverer(); private static final TypeDescriptor messageTypeDescriptor = TypeDescriptor.valueOf(Message.class); @@ -585,6 +591,7 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator return this.method.toString(); } + @SuppressWarnings("deprecation") private Expression generateExpression(Method method) { StringBuilder sb = new StringBuilder("#target." + method.getName() + "("); Class[] parameterTypes = method.getParameterTypes(); @@ -597,12 +604,14 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator MethodParameter methodParameter = new MethodParameter(method, i); TypeDescriptor parameterTypeDescriptor = new TypeDescriptor(methodParameter); Class parameterType = parameterTypeDescriptor.getObjectType(); - Annotation mappingAnnotation = findMappingAnnotation(parameterAnnotations[i]); + Annotation mappingAnnotation = + MessagingAnnotationUtils.findMessagePartAnnotation(parameterAnnotations[i]); if (mappingAnnotation != null) { Class annotationType = mappingAnnotation.annotationType(); - if (annotationType.equals(Payload.class)) { + if (annotationType.equals(org.springframework.integration.annotation.Payload.class) + || annotationType.equals(Payload.class)) { sb.append("payload"); - String qualifierExpression = ((Payload) mappingAnnotation).value(); + String qualifierExpression = (String) AnnotationUtils.getValue(mappingAnnotation); if (StringUtils.hasText(qualifierExpression)) { sb.append("." + qualifierExpression); } @@ -621,14 +630,15 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator this.setExclusiveTargetParameterType(parameterTypeDescriptor, methodParameter); } } - else if (annotationType.equals(Headers.class)) { + else if (annotationType.equals(org.springframework.integration.annotation.Headers.class) + || annotationType.equals(Headers.class)) { Assert.isTrue(Map.class.isAssignableFrom(parameterType), "The @Headers annotation can only be applied to a Map-typed parameter."); sb.append("headers"); } - else if (annotationType.equals(Header.class)) { - Header headerAnnotation = (Header) mappingAnnotation; - sb.append(this.determineHeaderExpression(headerAnnotation, methodParameter)); + else if (annotationType.equals(org.springframework.integration.annotation.Header.class) + || annotationType.equals(Header.class)) { + sb.append(this.determineHeaderExpression(mappingAnnotation, methodParameter)); } } else if (parameterTypeDescriptor.isAssignableTo(messageTypeDescriptor)) { @@ -636,8 +646,8 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator sb.append("message"); this.setExclusiveTargetParameterType(parameterTypeDescriptor, methodParameter); } - else if ((parameterTypeDescriptor.isAssignableTo(messageListTypeDescriptor) || parameterTypeDescriptor - .isAssignableTo(messageArrayTypeDescriptor))) { + else if ((parameterTypeDescriptor.isAssignableTo(messageListTypeDescriptor) + || parameterTypeDescriptor.isAssignableTo(messageArrayTypeDescriptor))) { sb.append("messages"); this.setExclusiveTargetParameterType(parameterTypeDescriptor, methodParameter); } @@ -704,31 +714,13 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator return EXPRESSION_PARSER.parseExpression(sb.toString()); } - private Annotation findMappingAnnotation(Annotation[] annotations) { - if (annotations == null || annotations.length == 0) { - return null; - } - Annotation match = null; - for (Annotation annotation : annotations) { - Class type = annotation.annotationType(); - if (type.equals(Payload.class) || type.equals(Payloads.class) || type.equals(Header.class) || type.equals(Headers.class)) { - if (match != null) { - throw new MessagingException( - "At most one parameter annotation can be provided for message mapping, " - + "but found two: [" + match.annotationType().getName() + "] and [" - + annotation.annotationType().getName() + "]"); - } - match = annotation; - } - } - return match; - } - - private String determineHeaderExpression(Header headerAnnotation, MethodParameter methodParameter) { + private String determineHeaderExpression(Annotation headerAnnotation, MethodParameter methodParameter) { methodParameter.initParameterNameDiscovery(PARAMETER_NAME_DISCOVERER); String headerName = null; String relativeExpression = ""; - String valueAttribute = headerAnnotation.value(); + AnnotationAttributes annotationAttributes = + (AnnotationAttributes) AnnotationUtils.getAnnotationAttributes(headerAnnotation); + String valueAttribute = annotationAttributes.getString(AnnotationUtils.VALUE); if (!StringUtils.hasText(valueAttribute)) { headerName = methodParameter.getParameterName(); } @@ -746,13 +738,15 @@ public class MessagingMethodInvokerHelper extends AbstractExpressionEvaluator + "disabled or header name is not explicitly provided via @Header annotation."); String headerRetrievalExpression = "headers['" + headerName + "']"; String fullHeaderExpression = headerRetrievalExpression + relativeExpression; - String fallbackExpression = (headerAnnotation.required()) - ? "T(org.springframework.util.Assert).isTrue(false, 'required header not available: " + headerName + "')" + String fallbackExpression = (annotationAttributes.getBoolean("required")) + ? "T(org.springframework.util.Assert).isTrue(false, 'required header not available: " + + headerName + "')" : "null"; return headerRetrievalExpression + " != null ? " + fullHeaderExpression + " : " + fallbackExpression; } - private synchronized void setExclusiveTargetParameterType(TypeDescriptor targetParameterType, MethodParameter methodParameter) { + private synchronized void setExclusiveTargetParameterType(TypeDescriptor targetParameterType, + MethodParameter methodParameter) { if (this.targetParameterTypeDescriptor != null) { throw new IneligibleMethodException("Found more than one parameter type candidate: [" + this.targetParameterTypeDescriptor + "] and [" + targetParameterType + "]"); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/CorrelationStrategyAdapterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/CorrelationStrategyAdapterTests.java index ef855d10fa..89ed76e7d2 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/CorrelationStrategyAdapterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/CorrelationStrategyAdapterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -13,20 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.integration.aggregator; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; -import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Header; + import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.util.ReflectionUtils; /** * @author Dave Syer - * + * */ public class CorrelationStrategyAdapterTests { @@ -39,7 +41,8 @@ public class CorrelationStrategyAdapterTests { @Test public void testMethodName() { - MethodInvokingCorrelationStrategy adapter = new MethodInvokingCorrelationStrategy(new SimpleMessageCorrelator(), "getKey"); + MethodInvokingCorrelationStrategy adapter = + new MethodInvokingCorrelationStrategy(new SimpleMessageCorrelator(), "getKey"); assertEquals("b", adapter.getCorrelationKey(message)); } @@ -52,13 +55,15 @@ public class CorrelationStrategyAdapterTests { @Test public void testCorrelationStrategyAdapterPojoMethod() { - MethodInvokingCorrelationStrategy adapter = new MethodInvokingCorrelationStrategy(new SimplePojoCorrelator(), "getKey"); + MethodInvokingCorrelationStrategy adapter = + new MethodInvokingCorrelationStrategy(new SimplePojoCorrelator(), "getKey"); assertEquals("foo", adapter.getCorrelationKey(message)); } @Test public void testHeaderPojoMethod() { - MethodInvokingCorrelationStrategy adapter = new MethodInvokingCorrelationStrategy(new SimpleHeaderCorrelator(), "getKey"); + MethodInvokingCorrelationStrategy adapter = + new MethodInvokingCorrelationStrategy(new SimpleHeaderCorrelator(), "getKey"); assertEquals("b", adapter.getCorrelationKey(message)); } @@ -74,6 +79,7 @@ public class CorrelationStrategyAdapterTests { public String getKey(@Header("a") String header, @Header("c") String other) { return header + other; } + } private static class SimpleHeaderCorrelator { @@ -81,6 +87,7 @@ public class CorrelationStrategyAdapterTests { public String getKey(@Header("a") String header) { return header; } + } private static class SimplePojoCorrelator { @@ -88,6 +95,7 @@ public class CorrelationStrategyAdapterTests { public String getKey(String message) { return message; } + } private static class SimpleMessageCorrelator { @@ -95,6 +103,7 @@ public class CorrelationStrategyAdapterTests { public String getKey(Message message) { return (String) message.getHeaders().get("a"); } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessorTests.java index 53b0235b01..ab7a731d10 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aggregator/MethodInvokingMessageGroupProcessorTests.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. @@ -16,6 +16,13 @@ package org.springframework.integration.aggregator; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.when; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -28,31 +35,23 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; + import org.springframework.aop.framework.ProxyFactory; import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; -import org.springframework.messaging.Message; import org.springframework.integration.annotation.Aggregator; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; import org.springframework.integration.annotation.Payloads; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.endpoint.EventDrivenConsumer; -import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.store.MessageGroup; import org.springframework.integration.store.SimpleMessageGroup; import org.springframework.integration.support.MessageBuilder; - -import static org.junit.Assert.assertTrue; -import static org.hamcrest.CoreMatchers.is; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.fail; - -import static org.mockito.Mockito.when; +import org.springframework.messaging.Message; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.support.GenericMessage; @RunWith(MockitoJUnitRunner.class) public class MethodInvokingMessageGroupProcessorTests { diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/AnnotationConfigRegistrationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/AnnotationConfigRegistrationTests.java index 8666f0f41d..883fe0f55d 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/AnnotationConfigRegistrationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/AnnotationConfigRegistrationTests.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. @@ -23,8 +23,8 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Publisher; import org.springframework.integration.channel.QueueChannel; import org.springframework.test.context.ContextConfiguration; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingAnnotationUsageTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingAnnotationUsageTests.java index adbcfb2313..a38e12827e 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingAnnotationUsageTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/MessagePublishingAnnotationUsageTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -24,8 +24,8 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Publisher; import org.springframework.integration.channel.QueueChannel; import org.springframework.test.context.ContextConfiguration; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java index 57562568fc..a7d31139e7 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/MethodAnnotationPublisherMetadataSourceTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -24,8 +24,8 @@ import java.util.Map; import org.junit.Test; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Publisher; /** diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherAnnotationAdvisorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherAnnotationAdvisorTests.java index ea75a1edb4..bf8349ab70 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherAnnotationAdvisorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherAnnotationAdvisorTests.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. @@ -30,7 +30,7 @@ import org.junit.Test; import org.springframework.aop.framework.ProxyFactory; import org.springframework.context.support.StaticApplicationContext; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Publisher; import org.springframework.integration.channel.QueueChannel; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherExpressionTests.java b/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherExpressionTests.java index e1212e8df5..12fc706b30 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherExpressionTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/aop/PublisherExpressionTests.java @@ -25,8 +25,8 @@ import org.junit.Test; import org.springframework.aop.framework.ProxyFactory; import org.springframework.context.support.StaticApplicationContext; import org.springframework.expression.EvaluationContext; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Publisher; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.config.IntegrationEvaluationContextFactoryBean; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java index 701abb9351..0e8c054acb 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/configuration/EnableIntegrationTests.java @@ -72,7 +72,7 @@ import org.springframework.integration.annotation.InboundChannelAdapter; import org.springframework.integration.annotation.IntegrationComponentScan; import org.springframework.integration.annotation.MessageEndpoint; import org.springframework.integration.annotation.MessagingGateway; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Poller; import org.springframework.integration.annotation.Publisher; import org.springframework.integration.annotation.ServiceActivator; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayInterfaceTests.java b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayInterfaceTests.java index c8e0440aa4..935e19714e 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayInterfaceTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayInterfaceTests.java @@ -46,10 +46,10 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.annotation.BridgeTo; import org.springframework.integration.annotation.Gateway; -import org.springframework.integration.annotation.Header; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.integration.annotation.IntegrationComponentScan; import org.springframework.integration.annotation.MessagingGateway; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.config.EnableIntegration; import org.springframework.integration.support.MessageBuilder; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapperToMessageTests.java b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapperToMessageTests.java index 46dc28b812..755e91f30f 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapperToMessageTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayMethodInboundMessageMapperToMessageTests.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. @@ -31,9 +31,9 @@ import org.springframework.expression.Expression; import org.springframework.expression.common.LiteralExpression; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.mapping.MessageMappingException; import org.springframework.integration.support.MessageBuilder; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayProxyMessageMappingTests.java b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayProxyMessageMappingTests.java index 896886c4a6..0c978e4676 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayProxyMessageMappingTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayProxyMessageMappingTests.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. @@ -28,18 +28,19 @@ import org.junit.Test; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.support.GenericApplicationContext; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessagingException; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.config.IntegrationEvaluationContextFactoryBean; import org.springframework.integration.context.IntegrationContextUtils; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessagingException; /** * @author Mark Fisher * @author Gary Russell + * @author Artem Bilan * @since 2.0 */ public class GatewayProxyMessageMappingTests { @@ -214,6 +215,10 @@ public class GatewayProxyMessageMappingTests { void payloadAndHeaderMapWithoutAnnotations(String s, Map map); + @SuppressWarnings("deprecation") + void payloadAndHeaderMapWithAnnotationsDeprecated(@org.springframework.integration.annotation.Payload String s, + @org.springframework.integration.annotation.Headers Map map); + void payloadAndHeaderMapWithAnnotations(@Payload String s, @Headers Map map); void headerValuesAndPayloadWithAnnotations(@Header("k1") String x, @Payload String s, @Header("k2") String y); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithHeaderAnnotations.java b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithHeaderAnnotations.java index 276fa313b5..bf9bc2d8b3 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithHeaderAnnotations.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithHeaderAnnotations.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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,10 +20,11 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.integration.IntegrationMessageHeaderAccessor; -import org.springframework.integration.annotation.Header; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -49,7 +50,9 @@ public class GatewayWithHeaderAnnotations { public static interface TestService { // wrt INT-1205, priority no longer has a $ prefix, so here we are testing the $custom header as well - public String test(String str, @Header(IntegrationMessageHeaderAccessor.PRIORITY) int priority, @Header("$custom") String custom); + public String test(String str, @Header(IntegrationMessageHeaderAccessor.PRIORITY) int priority, + @Header("$custom") String custom); + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithPayloadExpressionTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithPayloadExpressionTests-context.xml index 873794ec20..8c0ce40287 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithPayloadExpressionTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/gateway/GatewayWithPayloadExpressionTests-context.xml @@ -10,7 +10,7 @@ - + requestReplyWithMessageReturnValue(String input); - @Payload("#method + #args.length") + @Payload("#gatewayMethod.name + #args.length") String requestReplyWithPayloadAnnotation(); Future> async(String s); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/HeaderAnnotationTransformerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/HeaderAnnotationTransformerTests.java index 4a013c3832..294dd81ce4 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/HeaderAnnotationTransformerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/HeaderAnnotationTransformerTests.java @@ -24,12 +24,12 @@ import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.integration.IntegrationMessageHeaderAccessor; -import org.springframework.integration.annotation.Header; import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.transformer.MessageTransformingHandler; import org.springframework.integration.transformer.MethodInvokingTransformer; import org.springframework.messaging.Message; +import org.springframework.messaging.handler.annotation.Header; /** * @author Mark Fisher @@ -110,17 +110,18 @@ public class HeaderAnnotationTransformerTests { return payload.toString() + correlationId.toString(); } - public String appendFoo(Object payload, @Header(value = "foo") Object header) { + public String appendFoo(Object payload, @Header("foo") Object header) { return payload.toString() + header.toString(); } - public String evalCorrelationId(@Header(value = IntegrationMessageHeaderAccessor.CORRELATION_ID + ".toUpperCase()") String result) { - return result.toString(); + public String evalCorrelationId(@Header(IntegrationMessageHeaderAccessor.CORRELATION_ID + ".toUpperCase()") String result) { + return result; } public String evalFoo(@Header(value = "foo.toUpperCase()", required = true) String result) { - return result.toString(); + return result; } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingHeaderEnricherTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingHeaderEnricherTests.java index f5f3b3897e..f38d84a188 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingHeaderEnricherTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingHeaderEnricherTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -24,7 +24,7 @@ import java.util.Map; import org.junit.Test; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.transformer.HeaderEnricher; @@ -98,6 +98,7 @@ public class MethodInvokingHeaderEnricherTests { map.put("bar", "ABC"); return map; } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorAnnotationTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorAnnotationTests.java index 87639c6aa0..4fcdc3ec1b 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorAnnotationTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorAnnotationTests.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. @@ -40,9 +40,9 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandlingException; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.MessagingException; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.support.MessageBuilder; @@ -114,7 +114,7 @@ public class MethodInvokingMessageProcessorAnnotationTests { .setHeader("num", new Integer(123)).build(); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); Object result = processor.processMessage(message); - assertEquals(new Integer(123), result); + assertEquals(123, result); } @Test(expected = MessageHandlingException.class) @@ -211,8 +211,8 @@ public class MethodInvokingMessageProcessorAnnotationTests { .setHeader("attrib1", new Integer(123)) .setHeader("attrib2", new Integer(456)).build(); Map result = (Map) processor.processMessage(message); - assertEquals(new Integer(123), result.get("attrib1")); - assertEquals(new Integer(456), result.get("attrib2")); + assertEquals(123, result.get("attrib1")); + assertEquals(456, result.get("attrib2")); } @Test @@ -220,8 +220,8 @@ public class MethodInvokingMessageProcessorAnnotationTests { Method method = TestService.class.getMethod("mapPayload", Map.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); Map payload = new HashMap(); - payload.put("attrib1", new Integer(88)); - payload.put("attrib2", new Integer(99)); + payload.put("attrib1", 88); + payload.put("attrib2", 99); Message> message = MessageBuilder.withPayload(payload) .setHeader("attrib1", new Integer(123)) .setHeader("attrib2", new Integer(456)).build(); @@ -447,8 +447,7 @@ public class MethodInvokingMessageProcessorAnnotationTests { MessageBuilder builder = MessageBuilder.withPayload(employee); builder.setHeader("day", "monday"); builder.setHeader("month", "September"); - Message message = builder.build(); - return message; + return builder.build(); } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorTests.java b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorTests.java index 246dd20c8a..c72a672e21 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/handler/MethodInvokingMessageProcessorTests.java @@ -15,6 +15,7 @@ */ package org.springframework.integration.handler; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -39,7 +40,7 @@ import org.junit.rules.ExpectedException; import org.springframework.beans.factory.BeanFactory; import org.springframework.expression.spel.SpelEvaluationException; -import org.springframework.integration.annotation.Header; +import org.springframework.messaging.handler.annotation.Header; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.gateway.GatewayProxyFactoryBean; import org.springframework.integration.gateway.RequestReplyExchanger; @@ -58,7 +59,7 @@ import org.springframework.messaging.support.GenericMessage; * @author Gary Russell * @author Gunnar Hillert */ -@SuppressWarnings({ "rawtypes", "unchecked" }) +@SuppressWarnings({"rawtypes", "unchecked"}) public class MethodInvokingMessageProcessorTests { private static final Log logger = LogFactory.getLog(MethodInvokingMessageProcessorTests.class); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java b/spring-integration-core/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java index 792ecb43c9..501e547117 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 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. @@ -31,9 +31,9 @@ import org.junit.Before; import org.junit.Test; import org.springframework.messaging.Message; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.MessageHandler; import org.springframework.integration.handler.ServiceActivatingHandler; import org.springframework.integration.support.MessageBuilder; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/MethodInvokingRouterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/router/MethodInvokingRouterTests.java index 9a1e6fe995..71311b1f80 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/MethodInvokingRouterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/MethodInvokingRouterTests.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,16 +26,17 @@ import java.util.ArrayList; import java.util.List; import org.junit.Test; -import org.springframework.integration.annotation.Header; + import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.channel.TestChannelResolver; -import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageDeliveryException; import org.springframework.messaging.MessagingException; import org.springframework.messaging.core.DestinationResolver; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.support.GenericMessage; /** * @author Mark Fisher @@ -137,13 +138,13 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } - } @Test @@ -163,7 +164,8 @@ public class MethodInvokingRouterTests { this.doTestChannelInstanceResolutionByPayload(router, channelResolver); } - private void doTestChannelInstanceResolutionByPayload(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestChannelInstanceResolutionByPayload(MethodInvokingRouter router, + TestChannelResolver channelResolver) { Message fooMessage = new GenericMessage("foo"); Message barMessage = new GenericMessage("bar"); Message badMessage = new GenericMessage("bad"); @@ -182,9 +184,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } @@ -207,7 +210,8 @@ public class MethodInvokingRouterTests { this.doTestChannelInstanceResolutionByMessage(router, channelResolver); } - private void doTestChannelInstanceResolutionByMessage(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestChannelInstanceResolutionByMessage(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -226,9 +230,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } @@ -251,7 +256,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelNameResolutionByPayload(router, channelResolver); } - private void doTestMultiChannelNameResolutionByPayload(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelNameResolutionByPayload(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -276,9 +282,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } } @@ -300,7 +307,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelNameResolutionByMessage(router, channelResolver); } - private void doTestMultiChannelNameResolutionByMessage(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelNameResolutionByMessage(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -325,9 +333,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } } @@ -349,7 +358,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelNameArrayResolutionByMessage(router, channelResolver); } - private void doTestMultiChannelNameArrayResolutionByMessage(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelNameArrayResolutionByMessage(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -374,9 +384,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } } @@ -398,7 +409,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelListResolutionByPayload(router, channelResolver); } - private void doTestMultiChannelListResolutionByPayload(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelListResolutionByPayload(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -423,9 +435,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } @@ -448,7 +461,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelListResolutionByMessage(router, channelResolver); } - private void doTestMultiChannelListResolutionByMessage(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelListResolutionByMessage(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -473,9 +487,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } @@ -498,7 +513,8 @@ public class MethodInvokingRouterTests { this.doTestMultiChannelArrayResolutionByMessage(router, channelResolver); } - private void doTestMultiChannelArrayResolutionByMessage(MethodInvokingRouter router, TestChannelResolver channelResolver) { + private void doTestMultiChannelArrayResolutionByMessage(MethodInvokingRouter router, + TestChannelResolver channelResolver) { QueueChannel fooChannel = new QueueChannel(); QueueChannel barChannel = new QueueChannel(); channelResolver.addChannel("foo-channel", fooChannel); @@ -523,9 +539,10 @@ public class MethodInvokingRouterTests { assertEquals("bar", result2b.getPayload()); try { - router.handleMessage(badMessage); - fail(); - } catch (MessageDeliveryException e) { + router.handleMessage(badMessage); + fail(); + } + catch (MessageDeliveryException e) { /* Success */ } @@ -551,6 +568,7 @@ public class MethodInvokingRouterTests { } return null; } + } @@ -583,6 +601,7 @@ public class MethodInvokingRouterTests { } return results; } + } @@ -607,6 +626,7 @@ public class MethodInvokingRouterTests { } return null; } + } @@ -645,6 +665,7 @@ public class MethodInvokingRouterTests { } return results; } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/splitter/MethodInvokingSplitterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/splitter/MethodInvokingSplitterTests.java index 3ccf681fd6..4333b18142 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/splitter/MethodInvokingSplitterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/splitter/MethodInvokingSplitterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -22,17 +22,18 @@ import static org.junit.Assert.assertNotNull; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.Test; -import org.springframework.messaging.Message; import org.springframework.integration.IntegrationMessageHeaderAccessor; -import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.Splitter; import org.springframework.integration.channel.QueueChannel; -import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.support.GenericMessage; /** * @author Mark Fisher @@ -305,7 +306,6 @@ public class MethodInvokingSplitterTests { return list; } } - ; GenericMessage> message = new GenericMessage>(Arrays.asList("foo", "bar")); MethodInvokingSplitter splitter = new MethodInvokingSplitter(new ListSplitter(), "split"); QueueChannel replyChannel = new QueueChannel(); @@ -511,14 +511,11 @@ public class MethodInvokingSplitterTests { public List splitPayloadAndHeader(String payload, @Header("testHeader") String header) { String regex = "\\."; List results = new ArrayList(); - for (String s : payload.split(regex)) { - results.add(s); - } - for (String s : header.split(regex)) { - results.add(s); - } + Collections.addAll(results, payload.split(regex)); + Collections.addAll(results, header.split(regex)); return results; } + } public static class SingleAnnotationTestBean { @@ -531,6 +528,7 @@ public class MethodInvokingSplitterTests { public String[] anotherMethod(String input) { throw new UnsupportedOperationException("incorrect test invocation"); } + } public static class AmbiguousTypeMatchTestBean { @@ -544,6 +542,7 @@ public class MethodInvokingSplitterTests { public String[] method2(String input) { throw new UnsupportedOperationException("incorrect test invocation"); } + } public static class SinglePublicMethodTestBean { @@ -555,6 +554,7 @@ public class MethodInvokingSplitterTests { String[] anotherMethod(String input) { throw new UnsupportedOperationException("incorrect test invocation"); } + } public static class MultiplePublicMethodTestBean { @@ -566,6 +566,7 @@ public class MethodInvokingSplitterTests { public String[] method2(String input) { throw new UnsupportedOperationException("incorrect test invocation"); } + } @@ -575,5 +576,6 @@ public class MethodInvokingSplitterTests { private TestStringMessage(String payload) { super(payload); } + } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/transformer/MessageHistoryParameterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/transformer/MessageHistoryParameterTests.java index b8c2f7e04f..1d30d327ed 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/transformer/MessageHistoryParameterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/transformer/MessageHistoryParameterTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 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. @@ -22,9 +22,9 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHeaders; -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Headers; -import org.springframework.integration.annotation.Payload; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.handler.annotation.Headers; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.integration.annotation.Transformer; import org.springframework.messaging.PollableChannel; import org.springframework.integration.history.MessageHistory; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java b/spring-integration-core/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java index 31519d4408..aa56a4dfa5 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2010 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. @@ -24,13 +24,13 @@ import java.util.Properties; import org.junit.Test; -import org.springframework.messaging.Message; -import org.springframework.messaging.MessageHandlingException; -import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.Transformer; import org.springframework.integration.handler.MethodInvokingMessageProcessor; -import org.springframework.messaging.support.GenericMessage; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageHandlingException; +import org.springframework.messaging.handler.annotation.Header; +import org.springframework.messaging.support.GenericMessage; /** * @author Mark Fisher @@ -212,7 +212,7 @@ public class MethodInvokingTransformerTests { assertNull(result); } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"rawtypes", "unchecked"}) @Test // this changed in 2.0 see INT-785 and INT-1130 public void headerEnricherConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); @@ -231,7 +231,7 @@ public class MethodInvokingTransformerTests { assertEquals("baz", result.getHeaders().get("prop3")); } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"rawtypes", "unchecked"}) @Test // this changed in 2.0 see INT-785 and INT-1130 public void headerEnricherConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); @@ -264,7 +264,7 @@ public class MethodInvokingTransformerTests { } @Transformer - public String optionalHeaderTest(String s, @Header(value="number", required=false) Integer num) { + public String optionalHeaderTest(String s, @Header(value = "number", required = false) Integer num) { return s + num; } @@ -290,6 +290,7 @@ public class MethodInvokingTransformerTests { public Object nullReturnValueTest(Message message) { return null; } + } } diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests-context.xml b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests-context.xml index abf2ac8641..7184d17310 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests-context.xml +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests-context.xml @@ -25,6 +25,7 @@ + diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests.java index d374222134..0b7d48cb4d 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/JpaOutboundGatewayTests.java @@ -115,11 +115,13 @@ public class JpaOutboundGatewayTests { @Test public void getAllStudents() { - - final List students = studentService.getAllStudents(); + List students = studentService.getAllStudentsDeprecated(); Assert.assertNotNull(students); Assert.assertTrue(students.size() == 3); + students = studentService.getAllStudents(); + Assert.assertNotNull(students); + Assert.assertTrue(students.size() == 3); } @Test diff --git a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/StudentService.java b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/StudentService.java index d5e3843ab0..44f7245752 100644 --- a/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/StudentService.java +++ b/spring-integration-jpa/src/test/java/org/springframework/integration/jpa/outbound/StudentService.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. You may obtain a copy of the License at @@ -10,13 +10,19 @@ * 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.jpa.outbound; import java.util.List; -import org.springframework.integration.annotation.Payload; import org.springframework.integration.jpa.test.entity.StudentDomain; +import org.springframework.messaging.handler.annotation.Payload; +/** + * @author Amol Nayak + * @author Artem Bilan + * @since 2.2 + */ public interface StudentService { StudentDomain getStudent(StudentDomain student); @@ -26,6 +32,10 @@ public interface StudentService { StudentDomain getStudent(Long id); StudentDomain deleteStudent(StudentDomain student); + @SuppressWarnings("deprecation") + @org.springframework.integration.annotation.Payload("new java.util.Date()") + List getAllStudentsDeprecated(); + @Payload("new java.util.Date()") List getAllStudents(); diff --git a/spring-integration-test/src/test/java/org/springframework/integration/test/mockito/ServiceActivatorOnMockitoMockTests.java b/spring-integration-test/src/test/java/org/springframework/integration/test/mockito/ServiceActivatorOnMockitoMockTests.java index ebcc076469..0786cc1b37 100644 --- a/spring-integration-test/src/test/java/org/springframework/integration/test/mockito/ServiceActivatorOnMockitoMockTests.java +++ b/spring-integration-test/src/test/java/org/springframework/integration/test/mockito/ServiceActivatorOnMockitoMockTests.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,13 +20,13 @@ import static org.mockito.Mockito.verify; import org.junit.Test; import org.junit.runner.RunWith; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.messaging.MessageChannel; -import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.ServiceActivator; -import org.springframework.messaging.PollableChannel; import org.springframework.integration.support.MessageBuilder; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.PollableChannel; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -47,10 +47,12 @@ public class ServiceActivatorOnMockitoMockTests { PollableChannel out; public static class SingleAnnotatedMethodOnClass { + @ServiceActivator public String move(String s) { return s; } + } @Autowired @@ -77,10 +79,13 @@ public class ServiceActivatorOnMockitoMockTests { verify(singleMethodOnClass).move("SingleMethodOnClass"); } + @SuppressWarnings("deprecation") public static class SingleMethodAcceptingHeaderOnClass { - public String move(@Header("s") String s) { + + public String move(@org.springframework.integration.annotation.Header("s") String s) { return s; } + } @Autowired @@ -88,7 +93,9 @@ public class ServiceActivatorOnMockitoMockTests { @Test public void shouldInvokeMockedSingleMethodAcceptingHeaderOnClass() { - in.send(MessageBuilder.withPayload("SingleMethodAcceptingHeaderOnClass").setHeader("s", "SingleMethodAcceptingHeaderOnClass").build()); + in.send(MessageBuilder.withPayload("SingleMethodAcceptingHeaderOnClass") + .setHeader("s", "SingleMethodAcceptingHeaderOnClass") + .build()); verify(singleMethodAcceptingHeaderOnClass).move("SingleMethodAcceptingHeaderOnClass"); }