Search in sources :

Example 1 with ExchangeFailureHandlingEvent

use of org.apache.camel.management.event.ExchangeFailureHandlingEvent in project camel by apache.

the class EventNotifierFailureHandledEventsTest method testExchangeDeadLetterChannel.

public void testExchangeDeadLetterChannel() throws Exception {
    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {
            errorHandler(deadLetterChannel("mock:dead"));
            from("direct:start").throwException(new IllegalArgumentException("Damn"));
        }
    });
    context.start();
    getMockEndpoint("mock:dead").expectedMessageCount(1);
    template.sendBody("direct:start", "Hello World");
    assertMockEndpointsSatisfied();
    assertEquals(12, events.size());
    assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
    assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
    assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
    assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
    assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
    ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
    assertEquals("should be DLC", true, e0.isDeadLetterChannel());
    assertEquals("mock://dead", e0.getDeadLetterUri());
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
    ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
    assertEquals("should be DLC", true, e.isDeadLetterChannel());
    assertTrue("should be marked as failure handled", e.isHandled());
    assertFalse("should not be continued", e.isContinued());
    SendProcessor send = assertIsInstanceOf(SendProcessor.class, e.getFailureHandler());
    assertEquals("mock://dead", send.getDestination().getEndpointUri());
    assertEquals("mock://dead", e.getDeadLetterUri());
    // dead letter channel will mark the exchange as completed
    assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
    // and the last event should be the direct:start
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
    ExchangeSentEvent sent = (ExchangeSentEvent) events.get(11);
    assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
}
Also used : ExchangeSentEvent(org.apache.camel.management.event.ExchangeSentEvent) RouteBuilder(org.apache.camel.builder.RouteBuilder) ExchangeFailureHandlingEvent(org.apache.camel.management.event.ExchangeFailureHandlingEvent) ExchangeFailureHandledEvent(org.apache.camel.management.event.ExchangeFailureHandledEvent) SendProcessor(org.apache.camel.processor.SendProcessor)

Example 2 with ExchangeFailureHandlingEvent

use of org.apache.camel.management.event.ExchangeFailureHandlingEvent in project camel by apache.

the class EventNotifierFailureHandledEventsTest method testExchangeOnException.

public void testExchangeOnException() throws Exception {
    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {
            onException(IllegalArgumentException.class).handled(true).to("mock:dead");
            from("direct:start").throwException(new IllegalArgumentException("Damn"));
        }
    });
    context.start();
    getMockEndpoint("mock:dead").expectedMessageCount(1);
    template.sendBody("direct:start", "Hello World");
    assertMockEndpointsSatisfied();
    assertEquals(12, events.size());
    assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
    assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
    assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
    assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
    assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
    ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
    assertEquals("should NOT be DLC", false, e0.isDeadLetterChannel());
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
    ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
    assertEquals("should NOT be DLC", false, e.isDeadLetterChannel());
    assertTrue("should be marked as failure handled", e.isHandled());
    assertFalse("should not be continued", e.isContinued());
    // onException will handle the exception
    assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
    // and the last event should be the direct:start
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
    ExchangeSentEvent sent = (ExchangeSentEvent) events.get(11);
    assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
}
Also used : ExchangeSentEvent(org.apache.camel.management.event.ExchangeSentEvent) RouteBuilder(org.apache.camel.builder.RouteBuilder) ExchangeFailureHandlingEvent(org.apache.camel.management.event.ExchangeFailureHandlingEvent) ExchangeFailureHandledEvent(org.apache.camel.management.event.ExchangeFailureHandledEvent)

Example 3 with ExchangeFailureHandlingEvent

use of org.apache.camel.management.event.ExchangeFailureHandlingEvent in project camel by apache.

the class EventNotifierFailureHandledEventsTest method testExchangeDoTryDoCatch.

public void testExchangeDoTryDoCatch() throws Exception {
    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception {
            from("direct:start").doTry().throwException(new IllegalArgumentException("Damn")).doCatch(IllegalArgumentException.class).to("mock:dead").end();
        }
    });
    context.start();
    getMockEndpoint("mock:dead").expectedMessageCount(1);
    template.sendBody("direct:start", "Hello World");
    assertMockEndpointsSatisfied();
    assertEquals(12, events.size());
    assertIsInstanceOf(CamelContextStartingEvent.class, events.get(0));
    assertIsInstanceOf(RouteAddedEvent.class, events.get(1));
    assertIsInstanceOf(RouteStartedEvent.class, events.get(2));
    assertIsInstanceOf(CamelContextStartedEvent.class, events.get(3));
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(4));
    assertIsInstanceOf(ExchangeCreatedEvent.class, events.get(5));
    ExchangeFailureHandlingEvent e0 = assertIsInstanceOf(ExchangeFailureHandlingEvent.class, events.get(6));
    assertEquals("should NOT be DLC", false, e0.isDeadLetterChannel());
    assertIsInstanceOf(ExchangeSendingEvent.class, events.get(7));
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(8));
    ExchangeFailureHandledEvent e = assertIsInstanceOf(ExchangeFailureHandledEvent.class, events.get(9));
    assertEquals("should NOT be DLC", false, e.isDeadLetterChannel());
    assertFalse("should not be marked as failure handled as it was continued instead", e.isHandled());
    assertTrue("should be continued", e.isContinued());
    // onException will handle the exception
    assertIsInstanceOf(ExchangeCompletedEvent.class, events.get(10));
    // and the last event should be the direct:start
    assertIsInstanceOf(ExchangeSentEvent.class, events.get(11));
    ExchangeSentEvent sent = (ExchangeSentEvent) events.get(11);
    assertEquals("direct://start", sent.getEndpoint().getEndpointUri());
}
Also used : ExchangeSentEvent(org.apache.camel.management.event.ExchangeSentEvent) RouteBuilder(org.apache.camel.builder.RouteBuilder) ExchangeFailureHandlingEvent(org.apache.camel.management.event.ExchangeFailureHandlingEvent) ExchangeFailureHandledEvent(org.apache.camel.management.event.ExchangeFailureHandledEvent)

Aggregations

RouteBuilder (org.apache.camel.builder.RouteBuilder)3 ExchangeFailureHandledEvent (org.apache.camel.management.event.ExchangeFailureHandledEvent)3 ExchangeFailureHandlingEvent (org.apache.camel.management.event.ExchangeFailureHandlingEvent)3 ExchangeSentEvent (org.apache.camel.management.event.ExchangeSentEvent)3 SendProcessor (org.apache.camel.processor.SendProcessor)1