diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java index 3efe96c08c..a896e5f49b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/EnableJms.java @@ -112,10 +112,10 @@ import org.springframework.context.annotation.Import; * // process incoming message * } * - * These features are abstracted by the {@link org.springframework.jms.config.JmsHandlerMethodFactory - * JmsHandlerMethodFactory} that is responsible to build the necessary invoker to process - * the annotated method. By default, {@link org.springframework.jms.config.DefaultJmsHandlerMethodFactory - * DefaultJmsHandlerMethodFactory} is used. + * These features are abstracted by the {@link org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory + * MessageHandlerMethodFactory} that is responsible to build the necessary invoker to process + * the annotated method. By default, {@link org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory + * DefaultMessageHandlerMethodFactory} is used. * *

When more control is desired, a {@code @Configuration} class may implement * {@link JmsListenerConfigurer}. This allows access to the underlying @@ -172,7 +172,7 @@ import org.springframework.context.annotation.Import; * @Override * public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) { * registrar.setEndpointRegistry(myJmsListenerEndpointRegistry()); - * registrar.setJmsHandlerMethodFactory(myJmsHandlerMethodFactory); + * registrar.setMessageHandlerMethodFactory(myJmsHandlerMethodFactory); * } * * @Bean @@ -206,7 +206,7 @@ import org.springframework.context.annotation.Import; * * * + * class="org.springframework.messaging.handler.support.DefaultJmsHandlerMethodFactory"> * * * diff --git a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java index d944a35e60..da37641be7 100644 --- a/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java +++ b/spring-jms/src/main/java/org/springframework/jms/annotation/JmsListenerAnnotationBeanPostProcessor.java @@ -31,13 +31,13 @@ import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.core.Ordered; import org.springframework.core.annotation.AnnotationUtils; -import org.springframework.jms.config.DefaultJmsHandlerMethodFactory; -import org.springframework.jms.config.JmsHandlerMethodFactory; import org.springframework.jms.config.JmsListenerConfigUtils; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerEndpointRegistrar; import org.springframework.jms.config.JmsListenerEndpointRegistry; import org.springframework.jms.config.MethodJmsListenerEndpoint; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; +import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; @@ -86,7 +86,7 @@ public class JmsListenerAnnotationBeanPostProcessor private BeanFactory beanFactory; - private final JmsHandlerMethodFactoryAdapter jmsHandlerMethodFactory = new JmsHandlerMethodFactoryAdapter(); + private final MessageHandlerMethodFactoryAdapter messageHandlerMethodFactory = new MessageHandlerMethodFactoryAdapter(); private final JmsListenerEndpointRegistrar registrar = new JmsListenerEndpointRegistrar(); @@ -115,15 +115,15 @@ public class JmsListenerAnnotationBeanPostProcessor } /** - * Set the {@link JmsHandlerMethodFactory} to use to configure the message + * Set the {@link MessageHandlerMethodFactory} to use to configure the message * listener responsible to serve an endpoint detected by this processor. - *

By default, {@link DefaultJmsHandlerMethodFactory} is used and it + *

By default, {@link DefaultMessageHandlerMethodFactory} is used and it * can be configured further to support additional method arguments * or to customize conversion and validation support. See - * {@link DefaultJmsHandlerMethodFactory} Javadoc for more details. + * {@link DefaultMessageHandlerMethodFactory} Javadoc for more details. */ - public void setJmsHandlerMethodFactory(JmsHandlerMethodFactory jmsHandlerMethodFactory) { - this.jmsHandlerMethodFactory.setJmsHandlerMethodFactory(jmsHandlerMethodFactory); + public void setMessageHandlerMethodFactory(MessageHandlerMethodFactory messageHandlerMethodFactory) { + this.messageHandlerMethodFactory.setMessageHandlerMethodFactory(messageHandlerMethodFactory); } /** @@ -163,9 +163,9 @@ public class JmsListenerAnnotationBeanPostProcessor } // Set the custom handler method factory once resolved by the configurer - JmsHandlerMethodFactory handlerMethodFactory = this.registrar.getJmsHandlerMethodFactory(); + MessageHandlerMethodFactory handlerMethodFactory = this.registrar.getMessageHandlerMethodFactory(); if (handlerMethodFactory != null) { - this.jmsHandlerMethodFactory.setJmsHandlerMethodFactory(handlerMethodFactory); + this.messageHandlerMethodFactory.setMessageHandlerMethodFactory(handlerMethodFactory); } // Actually register all listeners @@ -216,7 +216,7 @@ public class JmsListenerAnnotationBeanPostProcessor MethodJmsListenerEndpoint endpoint = new MethodJmsListenerEndpoint(); endpoint.setBean(bean); endpoint.setMethod(method); - endpoint.setJmsHandlerMethodFactory(this.jmsHandlerMethodFactory); + endpoint.setMessageHandlerMethodFactory(this.messageHandlerMethodFactory); endpoint.setId(getEndpointId(jmsListener)); endpoint.setDestination(jmsListener.destination()); if (StringUtils.hasText(jmsListener.selector())) { @@ -257,33 +257,33 @@ public class JmsListenerAnnotationBeanPostProcessor /** - * An {@link JmsHandlerMethodFactory} adapter that offers a configurable underlying + * A {@link MessageHandlerMethodFactory} adapter that offers a configurable underlying * instance to use. Useful if the factory to use is determined once the endpoints * have been registered but not created yet. - * @see JmsListenerEndpointRegistrar#setJmsHandlerMethodFactory(JmsHandlerMethodFactory) + * @see JmsListenerEndpointRegistrar#setMessageHandlerMethodFactory */ - private class JmsHandlerMethodFactoryAdapter implements JmsHandlerMethodFactory { + private class MessageHandlerMethodFactoryAdapter implements MessageHandlerMethodFactory { - private JmsHandlerMethodFactory jmsHandlerMethodFactory; + private MessageHandlerMethodFactory messageHandlerMethodFactory; - public void setJmsHandlerMethodFactory(JmsHandlerMethodFactory jmsHandlerMethodFactory) { - this.jmsHandlerMethodFactory = jmsHandlerMethodFactory; + public void setMessageHandlerMethodFactory(MessageHandlerMethodFactory messageHandlerMethodFactory) { + this.messageHandlerMethodFactory = messageHandlerMethodFactory; } @Override public InvocableHandlerMethod createInvocableHandlerMethod(Object bean, Method method) { - return getJmsHandlerMethodFactory().createInvocableHandlerMethod(bean, method); + return getMessageHandlerMethodFactory().createInvocableHandlerMethod(bean, method); } - private JmsHandlerMethodFactory getJmsHandlerMethodFactory() { - if (this.jmsHandlerMethodFactory == null) { - this.jmsHandlerMethodFactory = createDefaultJmsHandlerMethodFactory(); + private MessageHandlerMethodFactory getMessageHandlerMethodFactory() { + if (this.messageHandlerMethodFactory == null) { + this.messageHandlerMethodFactory = createDefaultJmsHandlerMethodFactory(); } - return this.jmsHandlerMethodFactory; + return this.messageHandlerMethodFactory; } - private JmsHandlerMethodFactory createDefaultJmsHandlerMethodFactory() { - DefaultJmsHandlerMethodFactory defaultFactory = new DefaultJmsHandlerMethodFactory(); + private MessageHandlerMethodFactory createDefaultJmsHandlerMethodFactory() { + DefaultMessageHandlerMethodFactory defaultFactory = new DefaultMessageHandlerMethodFactory(); defaultFactory.setBeanFactory(beanFactory); defaultFactory.afterPropertiesSet(); return defaultFactory; diff --git a/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java b/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java index 1a2c798b7d..ae648764a4 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/AnnotationDrivenJmsBeanDefinitionParser.java @@ -70,7 +70,7 @@ class AnnotationDrivenJmsBeanDefinitionParser implements BeanDefinitionParser { String handlerMethodFactory = element.getAttribute("handler-method-factory"); if (StringUtils.hasText(handlerMethodFactory)) { - builder.addPropertyReference("jmsHandlerMethodFactory", handlerMethodFactory); + builder.addPropertyReference("messageHandlerMethodFactory", handlerMethodFactory); } registerInfrastructureBean(parserContext, builder, diff --git a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java index df1d027913..9ef2fd3d38 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/JmsListenerEndpointRegistrar.java @@ -22,6 +22,8 @@ import java.util.List; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; +import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory; import org.springframework.util.Assert; /** @@ -37,7 +39,7 @@ public class JmsListenerEndpointRegistrar implements BeanFactoryAware, Initializ private JmsListenerEndpointRegistry endpointRegistry; - private JmsHandlerMethodFactory jmsHandlerMethodFactory; + private MessageHandlerMethodFactory messageHandlerMethodFactory; private JmsListenerContainerFactory containerFactory; @@ -65,22 +67,22 @@ public class JmsListenerEndpointRegistrar implements BeanFactoryAware, Initializ } /** - * Set the {@link JmsHandlerMethodFactory} to use to configure the message + * Set the {@link MessageHandlerMethodFactory} to use to configure the message * listener responsible to serve an endpoint detected by this processor. - *

By default, {@link DefaultJmsHandlerMethodFactory} is used and it + *

By default, {@link DefaultMessageHandlerMethodFactory} is used and it * can be configured further to support additional method arguments * or to customize conversion and validation support. See - * {@link DefaultJmsHandlerMethodFactory} javadoc for more details. + * {@link DefaultMessageHandlerMethodFactory} javadoc for more details. */ - public void setJmsHandlerMethodFactory(JmsHandlerMethodFactory jmsHandlerMethodFactory) { - this.jmsHandlerMethodFactory = jmsHandlerMethodFactory; + public void setMessageHandlerMethodFactory(MessageHandlerMethodFactory messageHandlerMethodFactory) { + this.messageHandlerMethodFactory = messageHandlerMethodFactory; } /** - * Return the custom {@link JmsHandlerMethodFactory} to use, if any. + * Return the custom {@link MessageHandlerMethodFactory} to use, if any. */ - public JmsHandlerMethodFactory getJmsHandlerMethodFactory() { - return this.jmsHandlerMethodFactory; + public MessageHandlerMethodFactory getMessageHandlerMethodFactory() { + return this.messageHandlerMethodFactory; } /** diff --git a/spring-jms/src/main/java/org/springframework/jms/config/MethodJmsListenerEndpoint.java b/spring-jms/src/main/java/org/springframework/jms/config/MethodJmsListenerEndpoint.java index a9f55a510a..f22e53d6e2 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/MethodJmsListenerEndpoint.java +++ b/spring-jms/src/main/java/org/springframework/jms/config/MethodJmsListenerEndpoint.java @@ -25,6 +25,7 @@ import org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; +import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -41,7 +42,7 @@ public class MethodJmsListenerEndpoint extends AbstractJmsListenerEndpoint { private Method method; - private JmsHandlerMethodFactory jmsHandlerMethodFactory; + private MessageHandlerMethodFactory messageHandlerMethodFactory; /** @@ -67,22 +68,22 @@ public class MethodJmsListenerEndpoint extends AbstractJmsListenerEndpoint { } /** - * Set the {@link JmsHandlerMethodFactory} to use to build the + * Set the {@link MessageHandlerMethodFactory} to use to build the * {@link InvocableHandlerMethod} responsible to manage the invocation * of this endpoint. */ - public void setJmsHandlerMethodFactory(JmsHandlerMethodFactory jmsHandlerMethodFactory) { - this.jmsHandlerMethodFactory = jmsHandlerMethodFactory; + public void setMessageHandlerMethodFactory(MessageHandlerMethodFactory messageHandlerMethodFactory) { + this.messageHandlerMethodFactory = messageHandlerMethodFactory; } @Override protected MessagingMessageListenerAdapter createMessageListener(MessageListenerContainer container) { - Assert.state(this.jmsHandlerMethodFactory != null, - "Could not create message listener - message listener factory not set"); + Assert.state(this.messageHandlerMethodFactory != null, + "Could not create message listener - MessageHandlerMethodFactory not set"); MessagingMessageListenerAdapter messageListener = createMessageListenerInstance(); InvocableHandlerMethod invocableHandlerMethod = - this.jmsHandlerMethodFactory.createInvocableHandlerMethod(getBean(), getMethod()); + this.messageHandlerMethodFactory.createInvocableHandlerMethod(getBean(), getMethod()); messageListener.setHandlerMethod(invocableHandlerMethod); String responseDestination = getDefaultResponseDestination(); if (StringUtils.hasText(responseDestination)) { diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd index e61f479305..cfe76200eb 100644 --- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd +++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd @@ -63,16 +63,16 @@ - + diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java index 7c57b3f76e..adafb27b94 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java @@ -184,7 +184,7 @@ public abstract class AbstractJmsAnnotationDrivenTests { /** * Test for {@link ValidationBean} with a validator ({@link TestValidator}) specified - * in a custom {@link org.springframework.jms.config.DefaultJmsHandlerMethodFactory}. + * in a custom {@link org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory}. * * The test should throw a {@link org.springframework.jms.listener.adapter.ListenerExecutionFailedException} */ diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java index b0150e95b4..9394e21eac 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/EnableJmsTests.java @@ -25,14 +25,12 @@ import org.junit.Test; import org.junit.rules.ExpectedException; import org.springframework.beans.factory.BeanCreationException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.jms.config.DefaultJmsHandlerMethodFactory; -import org.springframework.jms.config.JmsHandlerMethodFactory; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; +import org.springframework.messaging.handler.annotation.support.MessageHandlerMethodFactory; import org.springframework.jms.config.JmsListenerContainerTestFactory; import org.springframework.jms.config.JmsListenerEndpointRegistrar; import org.springframework.jms.config.JmsListenerEndpointRegistry; @@ -42,7 +40,6 @@ import org.springframework.jms.listener.adapter.MessageListenerAdapter; import org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException; /** - * * @author Stephane Nicoll */ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests { @@ -202,12 +199,12 @@ public class EnableJmsTests extends AbstractJmsAnnotationDrivenTests { @Override public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) { - registrar.setJmsHandlerMethodFactory(jmsHandlerMethodFactory()); + registrar.setMessageHandlerMethodFactory(customMessageHandlerMethodFactory()); } @Bean - public JmsHandlerMethodFactory jmsHandlerMethodFactory() { - DefaultJmsHandlerMethodFactory factory = new DefaultJmsHandlerMethodFactory(); + public MessageHandlerMethodFactory customMessageHandlerMethodFactory() { + DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); factory.setValidator(new TestValidator()); return factory; } diff --git a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java index 198b37af15..c4b8d99723 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/JmsListenerContainerFactoryIntegrationTests.java @@ -36,6 +36,7 @@ import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.jms.support.converter.MessageConversionException; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; import org.springframework.util.ReflectionUtils; import static org.junit.Assert.*; @@ -48,7 +49,7 @@ public class JmsListenerContainerFactoryIntegrationTests { private final DefaultJmsListenerContainerFactory containerFactory = new DefaultJmsListenerContainerFactory(); - private final DefaultJmsHandlerMethodFactory factory = new DefaultJmsHandlerMethodFactory(); + private final DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); private final JmsEndpointSampleBean sample = new JmsEndpointSampleBean(); @@ -88,11 +89,11 @@ public class JmsListenerContainerFactoryIntegrationTests { private MethodJmsListenerEndpoint createMethodJmsEndpoint( - DefaultJmsHandlerMethodFactory factory, Method method) { + DefaultMessageHandlerMethodFactory factory, Method method) { MethodJmsListenerEndpoint endpoint = new MethodJmsListenerEndpoint(); endpoint.setBean(sample); endpoint.setMethod(method); - endpoint.setJmsHandlerMethodFactory(factory); + endpoint.setMessageHandlerMethodFactory(factory); return endpoint; } @@ -107,7 +108,7 @@ public class JmsListenerContainerFactoryIntegrationTests { } - private void initializeFactory(DefaultJmsHandlerMethodFactory factory) { + private void initializeFactory(DefaultMessageHandlerMethodFactory factory) { factory.setBeanFactory(new StaticListableBeanFactory()); factory.afterPropertiesSet(); } diff --git a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java index cc73655f76..2d561ae829 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java @@ -55,6 +55,7 @@ import org.springframework.messaging.handler.annotation.Headers; import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.messaging.handler.annotation.support.MethodArgumentTypeMismatchException; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; import org.springframework.util.ReflectionUtils; import org.springframework.validation.Errors; import org.springframework.validation.Validator; @@ -76,7 +77,7 @@ public class MethodJmsListenerEndpointTests { @Rule public final ExpectedException thrown = ExpectedException.none(); - private final DefaultJmsHandlerMethodFactory factory = new DefaultJmsHandlerMethodFactory(); + private final DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); private final DefaultMessageListenerContainer container = new DefaultMessageListenerContainer(); @@ -103,7 +104,7 @@ public class MethodJmsListenerEndpointTests { MethodJmsListenerEndpoint endpoint = new MethodJmsListenerEndpoint(); endpoint.setBean(this); endpoint.setMethod(getTestMethod()); - endpoint.setJmsHandlerMethodFactory(factory); + endpoint.setMessageHandlerMethodFactory(factory); assertNotNull(endpoint.createMessageListener(container)); } @@ -304,7 +305,7 @@ public class MethodJmsListenerEndpointTests { public void validatePayloadValid() throws JMSException { String methodName = "validatePayload"; - DefaultJmsHandlerMethodFactory customFactory = new DefaultJmsHandlerMethodFactory(); + DefaultMessageHandlerMethodFactory customFactory = new DefaultMessageHandlerMethodFactory(); customFactory.setValidator(testValidator("invalid value")); initializeFactory(customFactory); @@ -317,7 +318,7 @@ public class MethodJmsListenerEndpointTests { @Test public void validatePayloadInvalid() throws JMSException { - DefaultJmsHandlerMethodFactory customFactory = new DefaultJmsHandlerMethodFactory(); + DefaultMessageHandlerMethodFactory customFactory = new DefaultMessageHandlerMethodFactory(); customFactory.setValidator(testValidator("invalid value")); Method method = getListenerMethod("validatePayload", String.class); @@ -353,16 +354,16 @@ public class MethodJmsListenerEndpointTests { } private MessagingMessageListenerAdapter createInstance( - DefaultJmsHandlerMethodFactory factory, Method method, MessageListenerContainer container) { + DefaultMessageHandlerMethodFactory factory, Method method, MessageListenerContainer container) { MethodJmsListenerEndpoint endpoint = new MethodJmsListenerEndpoint(); endpoint.setBean(sample); endpoint.setMethod(method); - endpoint.setJmsHandlerMethodFactory(factory); + endpoint.setMessageHandlerMethodFactory(factory); return endpoint.createMessageListener(container); } private MessagingMessageListenerAdapter createInstance( - DefaultJmsHandlerMethodFactory factory, Method method) { + DefaultMessageHandlerMethodFactory factory, Method method) { return createInstance(factory, method, new SimpleMessageListenerContainer()); } @@ -392,7 +393,7 @@ public class MethodJmsListenerEndpointTests { assertTrue("Method " + methodName + " should have been invoked", bean.invocations.get(methodName)); } - private void initializeFactory(DefaultJmsHandlerMethodFactory factory) { + private void initializeFactory(DefaultMessageHandlerMethodFactory factory) { factory.setBeanFactory(new StaticListableBeanFactory()); factory.afterPropertiesSet(); } diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java index 1841455901..a4950aada5 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapterTests.java @@ -27,7 +27,7 @@ import org.junit.Test; import org.springframework.beans.factory.support.StaticListableBeanFactory; import org.springframework.jms.StubTextMessage; -import org.springframework.jms.config.DefaultJmsHandlerMethodFactory; +import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; import org.springframework.jms.support.JmsHeaders; import org.springframework.messaging.Message; import org.springframework.messaging.converter.MessageConversionException; @@ -42,7 +42,7 @@ import static org.mockito.BDDMockito.*; */ public class MessagingMessageListenerAdapterTests { - private final DefaultJmsHandlerMethodFactory factory = new DefaultJmsHandlerMethodFactory(); + private final DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); private final SampleBean sample = new SampleBean(); @@ -122,7 +122,7 @@ public class MessagingMessageListenerAdapterTests { return adapter; } - private void initializeFactory(DefaultJmsHandlerMethodFactory factory) { + private void initializeFactory(DefaultMessageHandlerMethodFactory factory) { factory.setBeanFactory(new StaticListableBeanFactory()); factory.afterPropertiesSet(); } diff --git a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-handler-method-factory.xml b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-handler-method-factory.xml index a70ff5eaf5..2e70fb1b1d 100644 --- a/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-handler-method-factory.xml +++ b/spring-jms/src/test/resources/org/springframework/jms/annotation/annotation-driven-custom-handler-method-factory.xml @@ -7,9 +7,9 @@ http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.1.xsd"> - + - + diff --git a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactory.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactory.java similarity index 89% rename from spring-jms/src/main/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactory.java rename to spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactory.java index 4f0f9d0f20..4ec50a6263 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactory.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.jms.config; +package org.springframework.messaging.handler.annotation.support; import java.lang.reflect.Method; import java.util.ArrayList; @@ -28,10 +28,6 @@ import org.springframework.core.convert.ConversionService; import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.messaging.converter.GenericMessageConverter; import org.springframework.messaging.converter.MessageConverter; -import org.springframework.messaging.handler.annotation.support.HeaderMethodArgumentResolver; -import org.springframework.messaging.handler.annotation.support.HeadersMethodArgumentResolver; -import org.springframework.messaging.handler.annotation.support.MessageMethodArgumentResolver; -import org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; @@ -39,11 +35,11 @@ import org.springframework.validation.Errors; import org.springframework.validation.Validator; /** - * The default {@link JmsHandlerMethodFactory} implementation creating an + * The default {@link MessageHandlerMethodFactory} implementation creating an * {@link InvocableHandlerMethod} with the necessary * {@link HandlerMethodArgumentResolver} instances to detect and process - * all the use cases defined by {@link org.springframework.jms.annotation.JmsListener - * JmsListener}. + * most of the use cases defined by + * {@link org.springframework.messaging.handler.annotation.MessageMapping MessageMapping} * *

Extra method argument resolvers can be added to customize the method * signature that can be handled. @@ -60,7 +56,7 @@ import org.springframework.validation.Validator; * @see #setValidator * @see #setCustomArgumentResolvers */ -public class DefaultJmsHandlerMethodFactory implements JmsHandlerMethodFactory, BeanFactoryAware, InitializingBean { +public class DefaultMessageHandlerMethodFactory implements MessageHandlerMethodFactory, BeanFactoryAware, InitializingBean { private ConversionService conversionService = new DefaultFormattingConversionService(); diff --git a/spring-jms/src/main/java/org/springframework/jms/config/JmsHandlerMethodFactory.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageHandlerMethodFactory.java similarity index 75% rename from spring-jms/src/main/java/org/springframework/jms/config/JmsHandlerMethodFactory.java rename to spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageHandlerMethodFactory.java index 3f2c12cfaf..fb997def71 100644 --- a/spring-jms/src/main/java/org/springframework/jms/config/JmsHandlerMethodFactory.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageHandlerMethodFactory.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.jms.config; +package org.springframework.messaging.handler.annotation.support; import java.lang.reflect.Method; @@ -22,19 +22,22 @@ import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; /** * A factory for {@link InvocableHandlerMethod} that is suitable to process - * an incoming JMS message. + * an incoming {@link org.springframework.messaging.Message} + * + *

Typically used by listener endpoints that require a flexible method + * signature. * * @author Stephane Nicoll * @since 4.1 */ -public interface JmsHandlerMethodFactory { +public interface MessageHandlerMethodFactory { /** * Create the {@link InvocableHandlerMethod} that is able to process the specified - * JMS method endpoint. + * method endpoint. * @param bean the bean instance * @param method the method to invoke - * @return a JMS-specific {@link InvocableHandlerMethod} suitable for that method + * @return an {@link InvocableHandlerMethod} suitable for that method */ InvocableHandlerMethod createInvocableHandlerMethod(Object bean, Method method); diff --git a/spring-jms/src/test/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactoryTests.java b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactoryTests.java similarity index 75% rename from spring-jms/src/test/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactoryTests.java rename to spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactoryTests.java index 5ea4d98bd7..7b87d00257 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/DefaultJmsHandlerMethodFactoryTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/DefaultMessageHandlerMethodFactoryTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.jms.config; +package org.springframework.messaging.handler.annotation.support; import java.lang.reflect.Method; import java.util.ArrayList; @@ -24,6 +24,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import javax.validation.Valid; + import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -37,17 +39,20 @@ import org.springframework.messaging.Message; import org.springframework.messaging.converter.ByteArrayMessageConverter; import org.springframework.messaging.converter.MessageConversionException; import org.springframework.messaging.converter.MessageConverter; +import org.springframework.messaging.handler.annotation.Payload; import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver; import org.springframework.messaging.handler.invocation.InvocableHandlerMethod; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.ReflectionUtils; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; import static org.junit.Assert.*; /** * @author Stephane Nicoll */ -public class DefaultJmsHandlerMethodFactoryTests { +public class DefaultMessageHandlerMethodFactoryTests { @Rule public final TestName name = new TestName(); @@ -59,7 +64,7 @@ public class DefaultJmsHandlerMethodFactoryTests { @Test public void customConversion() throws Exception { - DefaultJmsHandlerMethodFactory instance = createInstance(); + DefaultMessageHandlerMethodFactory instance = createInstance(); GenericConversionService conversionService = new GenericConversionService(); conversionService.addConverter(SampleBean.class, String.class, new Converter() { @Override @@ -79,7 +84,7 @@ public class DefaultJmsHandlerMethodFactoryTests { @Test public void customConversionServiceFailure() throws Exception { - DefaultJmsHandlerMethodFactory instance = createInstance(); + DefaultMessageHandlerMethodFactory instance = createInstance(); GenericConversionService conversionService = new GenericConversionService(); assertFalse("conversion service should fail to convert payload", conversionService.canConvert(Integer.class, String.class)); @@ -95,7 +100,7 @@ public class DefaultJmsHandlerMethodFactoryTests { @Test public void customMessageConverterFailure() throws Exception { - DefaultJmsHandlerMethodFactory instance = createInstance(); + DefaultMessageHandlerMethodFactory instance = createInstance(); MessageConverter messageConverter = new ByteArrayMessageConverter(); instance.setMessageConverter(messageConverter); instance.afterPropertiesSet(); @@ -109,7 +114,7 @@ public class DefaultJmsHandlerMethodFactoryTests { @Test public void customArgumentResolver() throws Exception { - DefaultJmsHandlerMethodFactory instance = createInstance(); + DefaultMessageHandlerMethodFactory instance = createInstance(); List customResolvers = new ArrayList(); customResolvers.add(new CustomHandlerMethodArgumentResolver()); instance.setCustomArgumentResolvers(customResolvers); @@ -124,7 +129,7 @@ public class DefaultJmsHandlerMethodFactoryTests { @Test public void overrideArgumentResolvers() throws Exception { - DefaultJmsHandlerMethodFactory instance = createInstance(); + DefaultMessageHandlerMethodFactory instance = createInstance(); List customResolvers = new ArrayList(); customResolvers.add(new CustomHandlerMethodArgumentResolver()); instance.setArgumentResolvers(customResolvers); @@ -147,18 +152,53 @@ public class DefaultJmsHandlerMethodFactoryTests { invocableHandlerMethod2.invoke(message); } + @Test + public void noValidationByDefault() throws Exception { + DefaultMessageHandlerMethodFactory instance = createInstance(); + instance.afterPropertiesSet(); + + InvocableHandlerMethod invocableHandlerMethod = + createInvocableHandlerMethod(instance, "payloadValidation", String.class); + invocableHandlerMethod.invoke(MessageBuilder.withPayload("failure").build()); + assertMethodInvocation(sample, "payloadValidation"); + } + + @Test + public void customValidation() throws Exception { + DefaultMessageHandlerMethodFactory instance = createInstance(); + instance.setValidator(new Validator() { + @Override + public boolean supports(Class clazz) { + return String.class.isAssignableFrom(clazz); + } + @Override + public void validate(Object target, Errors errors) { + String value = (String) target; + if ("failure".equals(value)) { + errors.reject("not a valid value"); + } + } + }); + instance.afterPropertiesSet(); + + InvocableHandlerMethod invocableHandlerMethod = + createInvocableHandlerMethod(instance, "payloadValidation", String.class); + thrown.expect(MethodArgumentNotValidException.class); + invocableHandlerMethod.invoke(MessageBuilder.withPayload("failure").build()); + } + private void assertMethodInvocation(SampleBean bean, String methodName) { assertTrue("Method " + methodName + " should have been invoked", bean.invocations.get(methodName)); } private InvocableHandlerMethod createInvocableHandlerMethod( - DefaultJmsHandlerMethodFactory factory, String methodName, Class... parameterTypes) { + DefaultMessageHandlerMethodFactory factory, String methodName, Class... parameterTypes) { return factory.createInvocableHandlerMethod(sample, getListenerMethod(methodName, parameterTypes)); } - private DefaultJmsHandlerMethodFactory createInstance() { - DefaultJmsHandlerMethodFactory factory = new DefaultJmsHandlerMethodFactory(); + private DefaultMessageHandlerMethodFactory createInstance() { + DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory(); factory.setBeanFactory(new StaticListableBeanFactory()); return factory; } @@ -178,6 +218,10 @@ public class DefaultJmsHandlerMethodFactoryTests { invocations.put("simpleString", true); } + public void payloadValidation(@Payload @Valid String value) { + invocations.put("payloadValidation", true); + } + public void customArgumentResolver(Locale locale) { invocations.put("customArgumentResolver", true); assertEquals("Wrong value for locale", Locale.getDefault(), locale); @@ -197,5 +241,4 @@ public class DefaultJmsHandlerMethodFactoryTests { return Locale.getDefault(); } } - }