* Receive class that wraps PartialFunction, to avoid
scary scala types
* move AbstractActorContext to AbstractActor.ActorContext
* converting docs, many, many UntypedActor
* removing UntypedActor docs
* add unit test for ReceiveBuilder
* MiMa filters
* consistent use of getContext(), self(), sender()
* rename cross references
* migration guide
* skip samples for now
* improve match type safetyi, add matchUnchecked
* the `? extends P` caused code like this to compile:
`match(String.class, (Integer i) -> {})`
* added matchUnchecked, since it can still be useful (um, convenient)
to be able to do:
`matchUnchecked(List.class, (List<String> list) -> {})`
* eleminate some scala.Option
* preRestart
* findChild
* ActorIdentity.getActorRef
53 lines
No EOL
1.6 KiB
Java
53 lines
No EOL
1.6 KiB
Java
package docs.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<RouteDefinition, ProcessorDefinition<?>> mapper =
|
|
new Mapper<RouteDefinition, ProcessorDefinition<?>>() {
|
|
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<RouteDefinition,
|
|
ProcessorDefinition<?>> getRouteDefinitionHandler() {
|
|
return mapper;
|
|
}
|
|
|
|
@Override
|
|
public void preRestart(Throwable reason, Option<Object> message) {
|
|
sender().tell(new Status.Failure(reason), self());
|
|
}
|
|
}
|
|
//#ErrorThrowingConsumer |