From faab220946d3cd8c72dffa3e0047c1f1d3eba110 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 29 Jul 2015 01:06:38 +0200 Subject: [PATCH] Initial test for Jackson-based JMS reply Issue: SPR-13237 --- .../MessagingMessageListenerAdapterTests.java | 97 ++++++++++++++++--- 1 file changed, 86 insertions(+), 11 deletions(-) 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 d5620748c3..d4b9875385 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 @@ -33,7 +33,9 @@ import org.junit.Test; import org.springframework.beans.factory.support.StaticListableBeanFactory; import org.springframework.jms.StubTextMessage; import org.springframework.jms.support.JmsHeaders; +import org.springframework.jms.support.converter.MappingJackson2MessageConverter; import org.springframework.jms.support.converter.MessageConverter; +import org.springframework.jms.support.converter.MessageType; import org.springframework.messaging.Message; import org.springframework.messaging.converter.MessageConversionException; import org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory; @@ -137,9 +139,7 @@ public class MessagingMessageListenerAdapterTests { MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.toMessage("Response", session)).willReturn(new StubTextMessage("Response")); - Message result = MessageBuilder.withPayload("Response") - .build(); - + Message result = MessageBuilder.withPayload("Response").build(); MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class); listener.setMessageConverter(messageConverter); javax.jms.Message replyMessage = listener.buildMessage(session, result); @@ -152,12 +152,10 @@ public class MessagingMessageListenerAdapterTests { @Test public void replyPayloadToQueue() throws JMSException { Message request = MessageBuilder.withPayload("Response").build(); - Session session = mock(Session.class); Queue replyDestination = mock(Queue.class); given(session.createQueue("queueOut")).willReturn(replyDestination); - MessageProducer messageProducer = mock(MessageProducer.class); TextMessage responseMessage = mock(TextMessage.class); given(session.createTextMessage("Response")).willReturn(responseMessage); @@ -166,7 +164,6 @@ public class MessagingMessageListenerAdapterTests { MessagingMessageListenerAdapter listener = getPayloadInstance(request, "replyPayloadToQueue", Message.class); listener.onMessage(mock(javax.jms.Message.class), session); - verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); @@ -176,12 +173,10 @@ public class MessagingMessageListenerAdapterTests { @Test public void replyPayloadToTopic() throws JMSException { Message request = MessageBuilder.withPayload("Response").build(); - Session session = mock(Session.class); Topic replyDestination = mock(Topic.class); given(session.createTopic("topicOut")).willReturn(replyDestination); - MessageProducer messageProducer = mock(MessageProducer.class); TextMessage responseMessage = mock(TextMessage.class); given(session.createTextMessage("Response")).willReturn(responseMessage); @@ -190,7 +185,6 @@ public class MessagingMessageListenerAdapterTests { MessagingMessageListenerAdapter listener = getPayloadInstance(request, "replyPayloadToTopic", Message.class); listener.onMessage(mock(javax.jms.Message.class), session); - verify(session).createTopic("topicOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); @@ -240,6 +234,38 @@ public class MessagingMessageListenerAdapterTests { verify(messageProducer).close(); } + @Test + public void replyJackson() throws JMSException { + TextMessage reply = testReplyWithJackson("replyJackson", + "{\"counter\":42,\"name\":\"Response\",\"description\":\"lengthy description\"}"); + verify(reply).setObjectProperty("foo", "bar"); + } + + private TextMessage testReplyWithJackson(String methodName, String replyContent) throws JMSException { + Queue replyDestination = mock(Queue.class); + Message request = MessageBuilder.withPayload("Response").build(); + + Session session = mock(Session.class); + MessageProducer messageProducer = mock(MessageProducer.class); + TextMessage responseMessage = mock(TextMessage.class); + given(session.createTextMessage(replyContent)).willReturn(responseMessage); + given(session.createProducer(replyDestination)).willReturn(messageProducer); + + MessagingMessageListenerAdapter listener = getPayloadInstance(request, methodName, Message.class); + MappingJackson2MessageConverter messageConverter = new MappingJackson2MessageConverter(); + messageConverter.setTargetType(MessageType.TEXT); + listener.setMessageConverter(messageConverter); + listener.setDefaultResponseDestination(replyDestination); + listener.onMessage(mock(javax.jms.Message.class), session); + + verify(session, times(0)).createQueue(anyString()); + verify(session).createTextMessage(replyContent); + verify(messageProducer).send(responseMessage); + verify(messageProducer).close(); + return responseMessage; + } + + protected MessagingMessageListenerAdapter getSimpleInstance(String methodName, Class... parameterTypes) { Method m = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes); return createInstance(m); @@ -253,14 +279,15 @@ public class MessagingMessageListenerAdapterTests { protected MessagingMessageListenerAdapter getPayloadInstance(final Object payload, String methodName, Class... parameterTypes) { - Method m = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes); + + Method method = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes); MessagingMessageListenerAdapter adapter = new MessagingMessageListenerAdapter() { @Override protected Object extractMessage(javax.jms.Message message) { return payload; } }; - adapter.setHandlerMethod(factory.createInvocableHandlerMethod(sample, m)); + adapter.setHandlerMethod(factory.createInvocableHandlerMethod(sample, method)); return adapter; } @@ -302,6 +329,15 @@ public class MessagingMessageListenerAdapterTests { return new JmsResponse<>(input.getPayload(), null); } + public Message replyJackson(Message input) { + return MessageBuilder.withPayload(createSampleResponse(input.getPayload())) + .setHeader("foo", "bar").build(); + } + + private SampleResponse createSampleResponse(String name) { + return new SampleResponse(name, "lengthy description"); + } + public void fail(String input) { throw new IllegalArgumentException("Expected test exception"); } @@ -311,4 +347,43 @@ public class MessagingMessageListenerAdapterTests { } } + + private static class SampleResponse { + + private int counter = 42; + + private String name; + + private String description; + + public SampleResponse(String name, String description) { + this.name = name; + this.description = description; + } + + public int getCounter() { + return counter; + } + + public void setCounter(int counter) { + this.counter = counter; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + } + }