2012-07-22 21:40:09 +02:00
|
|
|
/**
|
|
|
|
|
* Copyright (C) 2009-2012 Typesafe Inc. <http://www.typesafe.com>
|
|
|
|
|
*/
|
|
|
|
|
|
2012-06-26 10:43:31 +02:00
|
|
|
package docs.camel
|
|
|
|
|
|
|
|
|
|
import akka.camel.CamelMessage
|
|
|
|
|
import akka.actor.Status.Failure
|
|
|
|
|
|
2012-07-22 21:40:09 +02:00
|
|
|
import language.existentials
|
|
|
|
|
|
2012-06-26 10:43:31 +02:00
|
|
|
object CustomRoute {
|
|
|
|
|
{
|
|
|
|
|
//#CustomRoute
|
2012-07-12 15:00:11 +02:00
|
|
|
import akka.actor.{ Props, ActorSystem, Actor, ActorRef }
|
|
|
|
|
import akka.camel.{ CamelMessage, CamelExtension }
|
2012-06-26 10:43:31 +02:00
|
|
|
import org.apache.camel.builder.RouteBuilder
|
|
|
|
|
import akka.camel._
|
|
|
|
|
class Responder extends Actor {
|
|
|
|
|
def receive = {
|
|
|
|
|
case msg: CamelMessage ⇒
|
|
|
|
|
sender ! (msg.mapBody {
|
|
|
|
|
body: String ⇒ "received %s" format body
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-07-12 15:00:11 +02:00
|
|
|
class CustomRouteBuilder(system: ActorSystem, responder: ActorRef) extends RouteBuilder {
|
2012-06-26 10:43:31 +02:00
|
|
|
def configure {
|
|
|
|
|
from("jetty:http://localhost:8877/camel/custom").to(responder)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
val system = ActorSystem("some-system")
|
|
|
|
|
val camel = CamelExtension(system)
|
|
|
|
|
val responder = system.actorOf(Props[Responder], name = "TestResponder")
|
|
|
|
|
camel.context.addRoutes(new CustomRouteBuilder(system, responder))
|
|
|
|
|
//#CustomRoute
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
//#ErrorThrowingConsumer
|
|
|
|
|
import akka.camel.Consumer
|
|
|
|
|
|
|
|
|
|
import org.apache.camel.builder.Builder
|
|
|
|
|
import org.apache.camel.model.RouteDefinition
|
|
|
|
|
|
|
|
|
|
class ErrorThrowingConsumer(override val endpointUri: String) extends Consumer {
|
|
|
|
|
def receive = {
|
|
|
|
|
case msg: CamelMessage ⇒ throw new Exception("error: %s" format msg.body)
|
|
|
|
|
}
|
|
|
|
|
override def onRouteDefinition(rd: RouteDefinition) = {
|
|
|
|
|
// Catch any exception and handle it by returning the exception message as response
|
|
|
|
|
rd.onException(classOf[Exception]).handled(true).transform(Builder.exceptionMessage).end
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
final override def preRestart(reason: Throwable, message: Option[Any]) {
|
|
|
|
|
sender ! Failure(reason)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//#ErrorThrowingConsumer
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|