protected MessagingMessageListenerAdapter getSimpleInstance(String methodName, Class... parameterTypes) { Method m = ReflectionUtils.findMethod(SampleBean.class, methodName, parameterTypes); return createInstance(m); }
@Test public void headerConversionLazilyInvoked() throws JMSException { javax.jms.Message jmsMessage = mock(javax.jms.Message.class); when(jmsMessage.getPropertyNames()).thenThrow(new IllegalArgumentException("Header failure")); MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class); Message<?> message = listener.toMessagingMessage(jmsMessage); this.thrown.expect(IllegalArgumentException.class); this.thrown.expectMessage("Header failure"); message.getHeaders(); // Triggers headers resolution }
@Before public void setup() { initializeFactory(factory); }
@Test public void replyPayloadToDestination() throws JMSException { Session session = mock(Session.class); MessageProducer messageProducer = mock(MessageProducer.class); TextMessage responseMessage = mock(TextMessage.class); given(session.createTextMessage("Response")).willReturn(responseMessage); given(session.createProducer(sharedReplyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToDestination", Message.class); listener.onMessage(mock(javax.jms.Message.class), session); verify(session, times(0)).createQueue(anyString()); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); verify(messageProducer).close(); }
@Test public void replyJacksonMessageAndJsonView() throws JMSException { TextMessage reply = testReplyWithJackson("replyJacksonMessageAndJsonView", "{\"name\":\"Response\"}"); verify(reply).setObjectProperty("foo", "bar"); }
@Test public void replyPayloadToQueue() throws JMSException { 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); given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class); listener.onMessage(mock(javax.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); 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"); }
@Test public void incomingMessageUsesMessageConverter() throws JMSException { javax.jms.Message jmsMessage = mock(javax.jms.Message.class); Session session = mock(Session.class); MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar"); MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class); listener.setMessageConverter(messageConverter); listener.onMessage(jmsMessage, session); verify(messageConverter, times(1)).fromMessage(jmsMessage); assertEquals(1, sample.simples.size()); assertEquals("FooBar", sample.simples.get(0).getPayload()); }
@Test public void replyWithFullQoS() throws JMSException { 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); given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class); QosSettings settings = new QosSettings(DeliveryMode.NON_PERSISTENT, 6, 6000); listener.setResponseQosSettings(settings); listener.onMessage(mock(javax.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage, DeliveryMode.NON_PERSISTENT, 6, 6000); verify(messageProducer).close(); }
@Test public void replyJacksonPojoAndJsonView() throws JMSException { TextMessage reply = testReplyWithJackson("replyJacksonPojoAndJsonView", "{\"name\":\"Response\"}"); verify(reply, never()).setObjectProperty("foo", "bar"); }
@Test public void exceptionInListener() { javax.jms.Message message = new StubTextMessage("foo"); Session session = mock(Session.class); MessagingMessageListenerAdapter listener = getSimpleInstance("fail", String.class); try { listener.onMessage(message, session); fail("Should have thrown an exception"); } catch (JMSException ex) { fail("Should not have thrown a JMS exception"); } catch (ListenerExecutionFailedException ex) { assertEquals(IllegalArgumentException.class, ex.getCause().getClass()); assertEquals("Expected test exception", ex.getCause().getMessage()); } }
@Test public void replyPayloadNoDestination() throws JMSException { Queue replyDestination = mock(Queue.class); Session session = mock(Session.class); MessageProducer messageProducer = mock(MessageProducer.class); TextMessage responseMessage = mock(TextMessage.class); given(session.createTextMessage("Response")).willReturn(responseMessage); given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadNoDestination", Message.class); listener.setDefaultResponseDestination(replyDestination); listener.onMessage(mock(javax.jms.Message.class), session); verify(session, times(0)).createQueue(anyString()); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); verify(messageProducer).close(); }
@Test public void exceptionInInvocation() { javax.jms.Message message = new StubTextMessage("foo"); Session session = mock(Session.class); MessagingMessageListenerAdapter listener = getSimpleInstance("wrongParam", Integer.class); try { listener.onMessage(message, session); fail("Should have thrown an exception"); } catch (JMSException ex) { fail("Should not have thrown a JMS exception"); } catch (ListenerExecutionFailedException ex) { assertEquals(MessageConversionException.class, ex.getCause().getClass()); } }
@Test public void replyWithCustomTimeToLive() throws JMSException { 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); given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToQueue", Message.class); QosSettings settings = new QosSettings(); settings.setTimeToLive(6000); listener.setResponseQosSettings(settings); listener.onMessage(mock(javax.jms.Message.class), session); verify(session).createQueue("queueOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage, javax.jms.Message.DEFAULT_DELIVERY_MODE, javax.jms.Message.DEFAULT_PRIORITY, 6000); verify(messageProducer).close(); }
@Test public void payloadConversionLazilyInvoked() throws JMSException { javax.jms.Message jmsMessage = mock(javax.jms.Message.class); MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.fromMessage(jmsMessage)).willReturn("FooBar"); MessagingMessageListenerAdapter listener = getSimpleInstance("simple", Message.class); listener.setMessageConverter(messageConverter); Message<?> message = listener.toMessagingMessage(jmsMessage); verify(messageConverter, never()).fromMessage(jmsMessage); assertEquals("FooBar", message.getPayload()); verify(messageConverter, times(1)).fromMessage(jmsMessage); }
@Test public void replyPayloadToTopic() throws JMSException { 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); given(session.createProducer(replyDestination)).willReturn(messageProducer); MessagingMessageListenerAdapter listener = getPayloadInstance("Response", "replyPayloadToTopic", Message.class); listener.onMessage(mock(javax.jms.Message.class), session); verify(session).createTopic("topicOut"); verify(session).createTextMessage("Response"); verify(messageProducer).send(responseMessage); verify(messageProducer).close(); }
@Test public void buildMessageWithStandardMessage() throws JMSException { Destination replyTo = new Destination() {}; Message<String> result = MessageBuilder.withPayload("Response") .setHeader("foo", "bar") .setHeader(JmsHeaders.TYPE, "msg_type") .setHeader(JmsHeaders.REPLY_TO, replyTo) .build(); Session session = mock(Session.class); given(session.createTextMessage("Response")).willReturn(new StubTextMessage("Response")); MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class); javax.jms.Message replyMessage = listener.buildMessage(session, result); verify(session).createTextMessage("Response"); assertNotNull("reply should never be null", replyMessage); assertEquals("Response", ((TextMessage) replyMessage).getText()); assertEquals("custom header not copied", "bar", replyMessage.getStringProperty("foo")); assertEquals("type header not copied", "msg_type", replyMessage.getJMSType()); assertEquals("replyTo header not copied", replyTo, replyMessage.getJMSReplyTo()); }
public TextMessage testReplyWithJackson(String methodName, String replyContent) throws JMSException { Queue replyDestination = mock(Queue.class); 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("Response", 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; }
@Test public void replyUsesMessageConverterForPayload() throws JMSException { Session session = mock(Session.class); MessageConverter messageConverter = mock(MessageConverter.class); given(messageConverter.toMessage("Response", session)).willReturn(new StubTextMessage("Response")); Message<String> result = MessageBuilder.withPayload("Response").build(); MessagingMessageListenerAdapter listener = getSimpleInstance("echo", Message.class); listener.setMessageConverter(messageConverter); javax.jms.Message replyMessage = listener.buildMessage(session, result); verify(messageConverter, times(1)).toMessage("Response", session); assertNotNull("reply should never be null", replyMessage); assertEquals("Response", ((TextMessage) replyMessage).getText()); }