/* * Copyright (C) 2018-2019 Lightbend Inc. */ package jdocs.camel; // #ErrorThrowingConsumer import akka.actor.Status; import akka.camel.CamelMessage; import akka.camel.javaapi.UntypedConsumerActor; import akka.dispatch.Mapper; import org.apache.camel.builder.Builder; import org.apache.camel.model.ProcessorDefinition; import org.apache.camel.model.RouteDefinition; import scala.Option; public class ErrorThrowingConsumer extends UntypedConsumerActor { private String uri; private static Mapper> mapper = new Mapper>() { public ProcessorDefinition apply(RouteDefinition rd) { // Catch any exception and handle it by returning the exception message // as response return rd.onException(Exception.class) .handled(true) .transform(Builder.exceptionMessage()) .end(); } }; public ErrorThrowingConsumer(String uri) { this.uri = uri; } public String getEndpointUri() { return uri; } public void onReceive(Object message) throws Exception { if (message instanceof CamelMessage) { CamelMessage camelMessage = (CamelMessage) message; String body = camelMessage.getBodyAs(String.class, getCamelContext()); throw new Exception(String.format("error: %s", body)); } else unhandled(message); } @Override public Mapper> getRouteDefinitionHandler() { return mapper; } @Override public void preRestart(Throwable reason, Option message) { getSender().tell(new Status.Failure(reason), getSelf()); } } // #ErrorThrowingConsumer