@Override protected void handleMessageInternal(Message<?> message) throws Exception { Object result = this.processor.processMessage(message); if (result != null) { throw new MessagingException(message, "the MethodInvokingMessageHandler method must " + "have a void return, but '" + this + "' received a value: [" + result + "]"); } }
@Test(expected = MessageHandlingException.class) public void requiredHeaderNotProvided() throws Exception { Method method = TestService.class.getMethod("requiredHeader", Integer.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); processor.processMessage(new GenericMessage<>("foo")); }
@Test public void optionalHeader() throws Exception { Method method = TestService.class.getMethod("optionalHeader", Integer.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(new GenericMessage<>("foo")); assertNull(result); }
@Test public void messageOnlyWithAnnotatedMethod() throws Exception { AnnotatedTestService service = new AnnotatedTestService(); Method method = service.getClass().getMethod("messageOnly", Message.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(service, method); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(new GenericMessage<>("foo")); assertEquals("foo", result); }
@Test public void convertedPayloadWithAnnotatedMethod() throws Exception { AnnotatedTestService service = new AnnotatedTestService(); Method method = service.getClass().getMethod("integerMethod", Integer.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(service, method); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(new GenericMessage<>("456")); assertEquals(456, result); }
@Test public void irrelevantAnnotation() throws Exception { Message<?> message = MessageBuilder.withPayload("foo").build(); Method method = TestService.class.getMethod("irrelevantAnnotation", String.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(message); assertEquals("foo", result); }
@Test public void fromMessageWithMapMethodAndHeadersAnnotation() throws Exception { Method method = TestService.class.getMethod("mapHeaders", Map.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<String> message = MessageBuilder.withPayload("test") .setHeader("attrib1", 123) .setHeader("attrib2", 456).build(); Map<String, Object> result = (Map<String, Object>) processor.processMessage(message); assertEquals(123, result.get("attrib1")); assertEquals(456, result.get("attrib2")); }
@Test public void testProcessMessageRuntimeException() throws Exception { expected.expect(new ExceptionCauseMatcher(UnsupportedOperationException.class)); TestErrorService service = new TestErrorService(); Method method = service.getClass().getMethod("error", String.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(service, method); processor.setBeanFactory(mock(BeanFactory.class)); assertEquals("foo", processor.processMessage(new GenericMessage<>("foo"))); }
@Test public void fromMessageToPayload() throws Exception { Method method = TestService.class.getMethod("mapOnly", Map.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<Employee> message = MessageBuilder.withPayload(employee).setHeader("number", "jkl").build(); Object result = processor.processMessage(message); Assert.assertTrue(result instanceof Map); Assert.assertEquals("jkl", ((Map<?, ?>) result).get("number")); }
@Test public void fromMessageToHyphenatedHeaderName() throws Exception { Method method = TestService.class.getMethod("headerNameWithHyphen", String.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<?> message = MessageBuilder.withPayload("payload").setHeader("foo-bar", "abc").build(); Object result = processor.processMessage(message); assertEquals("ABC", result); }
@Test public void messageAsMethodParameterAndMessageAsReturnValue() { MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new TestBean(), "acceptMessageAndReturnMessage"); processor.setBeanFactory(mock(BeanFactory.class)); Message<?> result = (Message<?>) processor.processMessage(new GenericMessage<>("testing")); assertEquals("testing-4", result.getPayload()); }
@Test public void fromMessageWithRequiredHeaderProvided() throws Exception { Method method = TestService.class.getMethod("requiredHeader", Integer.class); Message<String> message = MessageBuilder.withPayload("foo") .setHeader("num", 123).build(); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(message); assertEquals(123, result); }
@Test public void fromMessageWithOptionalAndRequiredHeaderAndOnlyRequiredHeaderProvided() throws Exception { Method method = TestService.class.getMethod("optionalAndRequiredHeader", String.class, Integer.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<String> message = MessageBuilder.withPayload("foo") .setHeader("num", 123).build(); Object result = processor.processMessage(message); assertEquals("null123", result); }
@Test public void fromMessageToPayloadArgs() throws Exception { Method method = TestService.class.getMethod("payloadAnnotationFullName", String.class, String.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<Employee> message = MessageBuilder.withPayload(employee).setHeader("number", "jkl").build(); Object result = processor.processMessage(message); Assert.assertEquals("oleg zhurakousky", result); }
@Test public void fromMessageToPayloadArgsHeaderArgs() throws Exception { Method method = TestService.class.getMethod("payloadArgAndHeaderArg", String.class, String.class); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(testService, method); processor.setBeanFactory(mock(BeanFactory.class)); Message<Employee> message = MessageBuilder.withPayload(employee).setHeader("day", "monday").build(); Object result = processor.processMessage(message); Assert.assertEquals("olegmonday", result); }
@Test public void messageSubclassAsMethodParameterAndMessageAsReturnValue() { MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new TestBean(), "acceptMessageSubclassAndReturnMessage"); processor.setBeanFactory(mock(BeanFactory.class)); Message<?> result = (Message<?>) processor.processMessage(new GenericMessage<>("testing")); assertEquals("testing-5", result.getPayload()); }
@Test public void testVoidMethodsIncludedByDefault() { MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new TestBean(), "testVoidReturningMethods"); processor.setBeanFactory(mock(BeanFactory.class)); assertNull(processor.processMessage(MessageBuilder.withPayload("Something").build())); assertEquals(12, processor.processMessage(MessageBuilder.withPayload(12).build())); }
@Test public void payloadAsMethodParameterAndObjectAsReturnValue() { MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(new TestBean(), "acceptPayloadAndReturnObject"); processor.setBeanFactory(mock(BeanFactory.class)); Object result = processor.processMessage(new GenericMessage<String>("testing")); assertEquals("testing-1", result); }
@Test public void filterSelectsAnnotationMethodsOnly() { OverloadedMethodBean bean = new OverloadedMethodBean(); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(bean, ServiceActivator.class); processor.setBeanFactory(mock(BeanFactory.class)); processor.processMessage(MessageBuilder.withPayload(123).build()); assertNotNull(bean.lastArg); assertEquals(String.class, bean.lastArg.getClass()); assertEquals("123", bean.lastArg); }
@Test public void testIneligible() { IneligibleMethodBean bean = new IneligibleMethodBean(); MethodInvokingMessageProcessor processor = new MethodInvokingMessageProcessor(bean, "foo"); processor.setBeanFactory(mock(BeanFactory.class)); processor.processMessage(MessageBuilder.withPayload("true").build()); assertNotNull(bean.lastArg); assertEquals(String.class, bean.lastArg.getClass()); assertEquals("true", bean.lastArg); }