Example usage for org.springframework.integration.handler AbstractReplyProducingMessageHandler handleMessage

List of usage examples for org.springframework.integration.handler AbstractReplyProducingMessageHandler handleMessage

Introduction

In this page you can find the example usage for org.springframework.integration.handler AbstractReplyProducingMessageHandler handleMessage.

Prototype

@Override
    public void handleMessage(Message<?> messageArg) 

Source Link

Usage

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void successFailureAdvice() {
    final AtomicBoolean doFail = new AtomicBoolean();
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {
        @Override/*from   w  w  w. j  a v  a2  s  .co  m*/
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (doFail.get()) {
                throw new RuntimeException("qux");
            }
            return "baz";
        }
    };
    QueueChannel replies = new QueueChannel();
    handler.setOutputChannel(replies);
    Message<String> message = new GenericMessage<String>("Hello, world!");

    // no advice
    handler.handleMessage(message);
    Message<?> reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("baz", reply.getPayload());

    PollableChannel successChannel = new QueueChannel();
    PollableChannel failureChannel = new QueueChannel();
    ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
    advice.setBeanFactory(mock(BeanFactory.class));
    advice.setSuccessChannel(successChannel);
    advice.setFailureChannel(failureChannel);
    advice.setOnSuccessExpression("'foo'");
    advice.setOnFailureExpression("'bar:' + #exception.message");

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    // advice with success
    handler.handleMessage(message);
    reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("baz", reply.getPayload());

    Message<?> success = successChannel.receive(1000);
    assertNotNull(success);
    assertEquals("Hello, world!", ((AdviceMessage) success).getInputMessage().getPayload());
    assertEquals("foo", success.getPayload());

    // advice with failure, not trapped
    doFail.set(true);
    try {
        handler.handleMessage(message);
        fail("Expected exception");
    } catch (Exception e) {
        assertEquals("qux", e.getCause().getMessage());
    }

    Message<?> failure = failureChannel.receive(1000);
    assertNotNull(failure);
    assertEquals("Hello, world!", ((MessagingException) failure.getPayload()).getFailedMessage().getPayload());
    assertEquals("bar:qux",
            ((MessageHandlingExpressionEvaluatingAdviceException) failure.getPayload()).getEvaluationResult());

    // advice with failure, trapped
    advice.setTrapException(true);
    handler.handleMessage(message);
    failure = failureChannel.receive(1000);
    assertNotNull(failure);
    assertEquals("Hello, world!", ((MessagingException) failure.getPayload()).getFailedMessage().getPayload());
    assertEquals("bar:qux",
            ((MessageHandlingExpressionEvaluatingAdviceException) failure.getPayload()).getEvaluationResult());
    assertNull(replies.receive(1));

    // advice with failure, eval is result
    advice.setReturnFailureExpressionResult(true);
    handler.handleMessage(message);
    failure = failureChannel.receive(1000);
    assertNotNull(failure);
    assertEquals("Hello, world!", ((MessagingException) failure.getPayload()).getFailedMessage().getPayload());
    assertEquals("bar:qux",
            ((MessageHandlingExpressionEvaluatingAdviceException) failure.getPayload()).getEvaluationResult());

    reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("bar:qux", reply.getPayload());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void propagateOnSuccessExpressionFailures() {
    final AtomicBoolean doFail = new AtomicBoolean();
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {
        @Override//from w w  w  .  j a v  a  2s . co m
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (doFail.get()) {
                throw new RuntimeException("qux");
            }
            return "baz";
        }
    };
    QueueChannel replies = new QueueChannel();
    handler.setOutputChannel(replies);
    Message<String> message = new GenericMessage<String>("Hello, world!");

    PollableChannel successChannel = new QueueChannel();
    PollableChannel failureChannel = new QueueChannel();
    ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
    advice.setBeanFactory(mock(BeanFactory.class));
    advice.setSuccessChannel(successChannel);
    advice.setFailureChannel(failureChannel);
    advice.setOnSuccessExpression("1/0");
    advice.setOnFailureExpression("1/0");

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    // failing advice with success
    handler.handleMessage(message);
    Message<?> reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("baz", reply.getPayload());

    Message<?> success = successChannel.receive(1000);
    assertNotNull(success);
    assertEquals("Hello, world!", ((AdviceMessage) success).getInputMessage().getPayload());
    assertEquals(ArithmeticException.class, success.getPayload().getClass());
    assertEquals("/ by zero", ((Exception) success.getPayload()).getMessage());

    // propagate failing advice with success
    advice.setPropagateEvaluationFailures(true);
    try {
        handler.handleMessage(message);
        fail("Expected Exception");
    } catch (MessageHandlingException e) {
        assertEquals("/ by zero", e.getCause().getMessage());
    }
    reply = replies.receive(1);
    assertNull(reply);

    success = successChannel.receive(1000);
    assertNotNull(success);
    assertEquals("Hello, world!", ((AdviceMessage) success).getInputMessage().getPayload());
    assertEquals(ArithmeticException.class, success.getPayload().getClass());
    assertEquals("/ by zero", ((Exception) success.getPayload()).getMessage());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void propagateOnFailureExpressionFailures() {
    final AtomicBoolean doFail = new AtomicBoolean(true);
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {
        @Override/*www .  ja  v a 2 s.  c  o m*/
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (doFail.get()) {
                throw new RuntimeException("qux");
            }
            return "baz";
        }
    };
    QueueChannel replies = new QueueChannel();
    handler.setOutputChannel(replies);
    Message<String> message = new GenericMessage<String>("Hello, world!");

    PollableChannel successChannel = new QueueChannel();
    PollableChannel failureChannel = new QueueChannel();
    ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
    advice.setSuccessChannel(successChannel);
    advice.setFailureChannel(failureChannel);
    advice.setOnSuccessExpression("1/0");
    advice.setOnFailureExpression("1/0");

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    // failing advice with failure
    try {
        handler.handleMessage(message);
        fail("Expected exception");
    } catch (Exception e) {
        assertEquals("qux", e.getCause().getMessage());
    }
    Message<?> reply = replies.receive(1);
    assertNull(reply);

    Message<?> failure = failureChannel.receive(1000);
    assertNotNull(failure);
    assertEquals("Hello, world!", ((MessagingException) failure.getPayload()).getFailedMessage().getPayload());
    assertEquals(MessageHandlingExpressionEvaluatingAdviceException.class, failure.getPayload().getClass());
    assertEquals("qux", ((Exception) failure.getPayload()).getCause().getMessage());

    // propagate failing advice with failure; expect original exception
    advice.setPropagateEvaluationFailures(true);
    try {
        handler.handleMessage(message);
        fail("Expected Exception");
    } catch (MessageHandlingException e) {
        assertEquals("qux", e.getCause().getMessage());
    }
    reply = replies.receive(1);
    assertNull(reply);

    failure = failureChannel.receive(1000);
    assertNotNull(failure);
    assertEquals("Hello, world!", ((MessagingException) failure.getPayload()).getFailedMessage().getPayload());
    assertEquals(MessageHandlingExpressionEvaluatingAdviceException.class, failure.getPayload().getClass());
    assertEquals("qux", ((Exception) failure.getPayload()).getCause().getMessage());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void circuitBreakerTests() throws Exception {
    final AtomicBoolean doFail = new AtomicBoolean();
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {

        @Override/*  ww w  .j  a va2s. c o m*/
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (doFail.get()) {
                throw new RuntimeException("foo");
            }
            return "bar";
        }

    };
    handler.setBeanName("baz");
    handler.setOutputChannel(new QueueChannel());
    RequestHandlerCircuitBreakerAdvice advice = new RequestHandlerCircuitBreakerAdvice();
    /*
     * Circuit breaker opens after 2 failures; allows a new attempt after 100ms and
     * immediately opens again if that attempt fails. After a successful attempt,
     * we reset the failure counter.
     */
    advice.setThreshold(2);
    advice.setHalfOpenAfter(100);

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    doFail.set(true);
    Message<String> message = new GenericMessage<String>("Hello, world!");
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("foo", e.getCause().getMessage());
    }
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("foo", e.getCause().getMessage());
    }
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage());
    }
    Thread.sleep(100);
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("foo", e.getCause().getMessage());
    }
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage());
    }
    Thread.sleep(100);
    doFail.set(false);
    handler.handleMessage(message);
    doFail.set(true);
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("foo", e.getCause().getMessage());
    }
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("foo", e.getCause().getMessage());
    }
    try {
        handler.handleMessage(message);
        fail("Expected failure");
    } catch (Exception e) {
        assertEquals("Circuit Breaker is Open for baz", e.getCause().getMessage());
    }
}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void defaultRetrySucceedOnThirdTry() {
    final AtomicInteger counter = new AtomicInteger(2);
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {

        @Override// www . ja  v a2 s  . co  m
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (counter.getAndDecrement() > 0) {
                throw new RuntimeException("foo");
            }
            return "bar";
        }
    };
    QueueChannel replies = new QueueChannel();
    handler.setOutputChannel(replies);
    RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice();

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    Message<String> message = new GenericMessage<String>("Hello, world!");
    handler.handleMessage(message);
    assertTrue(counter.get() == -1);
    Message<?> reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("bar", reply.getPayload());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void defaultStatefulRetrySucceedOnThirdTry() {
    final AtomicInteger counter = new AtomicInteger(2);
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {

        @Override/*from   www  .  j a va  2  s  . co  m*/
        protected Object handleRequestMessage(Message<?> requestMessage) {
            if (counter.getAndDecrement() > 0) {
                throw new RuntimeException("foo");
            }
            return "bar";
        }
    };
    QueueChannel replies = new QueueChannel();
    handler.setOutputChannel(replies);
    RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice();

    advice.setRetryStateGenerator(new RetryStateGenerator() {
        public RetryState determineRetryState(Message<?> message) {
            return new DefaultRetryState(message.getHeaders().getId());
        }
    });

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    Message<String> message = new GenericMessage<String>("Hello, world!");
    for (int i = 0; i < 3; i++) {
        try {
            handler.handleMessage(message);
        } catch (Exception e) {
            assertTrue(i < 2);
        }
    }
    assertTrue(counter.get() == -1);
    Message<?> reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("bar", reply.getPayload());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

private void defaultStatefulRetryRecoverAfterThirdTryGuts(final AtomicInteger counter,
        AbstractReplyProducingMessageHandler handler, QueueChannel replies, RequestHandlerRetryAdvice advice) {
    advice.setRecoveryCallback(new RecoveryCallback<Object>() {

        public Object recover(RetryContext context) throws Exception {
            return "baz";
        }/*ww w.jav  a  2s  . com*/
    });

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    Message<String> message = new GenericMessage<String>("Hello, world!");
    for (int i = 0; i < 4; i++) {
        try {
            handler.handleMessage(message);
        } catch (Exception e) {
        }
    }
    assertTrue(counter.get() == 0);
    Message<?> reply = replies.receive(1000);
    assertNotNull(reply);
    assertEquals("baz", reply.getPayload());
}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void errorMessageSendingRecovererTests() {
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {

        @Override//from w ww.  j  a v  a2  s  .co m
        protected Object handleRequestMessage(Message<?> requestMessage) {
            throw new RuntimeException("fooException");
        }
    };
    QueueChannel errors = new QueueChannel();
    RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice();
    ErrorMessageSendingRecoverer recoverer = new ErrorMessageSendingRecoverer(errors);
    advice.setRecoveryCallback(recoverer);

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    Message<String> message = new GenericMessage<String>("Hello, world!");
    handler.handleMessage(message);
    Message<?> error = errors.receive(1000);
    assertNotNull(error);
    assertEquals("fooException", ((Exception) error.getPayload()).getCause().getMessage());

}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void errorMessageSendingRecovererTestsNoThrowable() {
    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {

        @Override/* w  w  w.  j a v a 2s. c o m*/
        protected Object handleRequestMessage(Message<?> requestMessage) {
            throw new RuntimeException("fooException");
        }
    };
    QueueChannel errors = new QueueChannel();
    RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice();
    ErrorMessageSendingRecoverer recoverer = new ErrorMessageSendingRecoverer(errors);
    advice.setRecoveryCallback(recoverer);
    RetryTemplate retryTemplate = new RetryTemplate();
    retryTemplate.setRetryPolicy(new SimpleRetryPolicy() {

        @Override
        public boolean canRetry(RetryContext context) {
            return false;
        }
    });
    advice.setRetryTemplate(retryTemplate);
    advice.afterPropertiesSet();

    List<Advice> adviceChain = new ArrayList<Advice>();
    adviceChain.add(advice);
    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    Message<String> message = new GenericMessage<String>("Hello, world!");
    handler.handleMessage(message);
    Message<?> error = errors.receive(1000);
    assertNotNull(error);
    assertTrue(error.getPayload() instanceof ErrorMessageSendingRecoverer.RetryExceptionNotAvailableException);
    assertNotNull(((MessagingException) error.getPayload()).getFailedMessage());
    assertSame(message, ((MessagingException) error.getPayload()).getFailedMessage());
}

From source file:org.springframework.integration.handler.advice.AdvisedMessageHandlerTests.java

@Test
public void testINT2858RetryAdviceAsFirstInAdviceChain() {
    final AtomicInteger counter = new AtomicInteger(3);

    AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() {
        @Override// w w  w  . j a v  a2  s.c o  m
        protected Object handleRequestMessage(Message<?> requestMessage) {
            return "foo";
        }
    };

    List<Advice> adviceChain = new ArrayList<Advice>();

    adviceChain.add(new RequestHandlerRetryAdvice());
    adviceChain.add(new MethodInterceptor() {
        public Object invoke(MethodInvocation invocation) throws Throwable {
            counter.getAndDecrement();
            throw new RuntimeException("intentional");
        }
    });

    handler.setAdviceChain(adviceChain);
    handler.afterPropertiesSet();

    try {
        handler.handleMessage(new GenericMessage<String>("test"));
    } catch (Exception e) {
        Throwable cause = e.getCause();
        assertEquals(RuntimeException.class, cause.getClass());
        assertEquals("intentional", cause.getMessage());
    }

    assertTrue(counter.get() == 0);
}