* @rkuhn found the problems in the scala camel samples - HttpSample returns scrambled data - CustomRouteSample times out
58 lines
1.8 KiB
Scala
58 lines
1.8 KiB
Scala
package sample.camel
|
|
|
|
import org.apache.camel.Exchange
|
|
import org.apache.camel.Processor
|
|
import org.apache.camel.builder.RouteBuilder
|
|
import akka.actor.Actor
|
|
import akka.actor.ActorRef
|
|
import akka.actor.ActorSystem
|
|
import akka.actor.Props
|
|
import akka.camel.CamelExtension
|
|
import akka.camel.CamelMessage
|
|
import akka.camel.Consumer
|
|
import akka.camel.Producer
|
|
|
|
object CustomRouteExample {
|
|
|
|
def main(args: Array[String]): Unit = {
|
|
val system = ActorSystem("some-system")
|
|
val producer = system.actorOf(Props[RouteProducer])
|
|
val mediator = system.actorOf(Props(classOf[RouteTransformer], producer))
|
|
val consumer = system.actorOf(Props(classOf[RouteConsumer], mediator))
|
|
CamelExtension(system).context.addRoutes(new CustomRouteBuilder)
|
|
}
|
|
|
|
class RouteConsumer(transformer: ActorRef) extends Actor with Consumer {
|
|
def endpointUri = "jetty:http://0.0.0.0:8877/camel/welcome"
|
|
|
|
def receive = {
|
|
// Forward a string representation of the message body to transformer
|
|
case msg: CamelMessage => transformer.forward(msg.withBodyAs[String])
|
|
}
|
|
}
|
|
|
|
class RouteTransformer(producer: ActorRef) extends Actor {
|
|
def receive = {
|
|
// example: transform message body "foo" to "- foo -" and forward result
|
|
// to producer
|
|
case msg: CamelMessage =>
|
|
producer.forward(msg.mapBody((body: String) => "- %s -" format body))
|
|
}
|
|
}
|
|
|
|
class RouteProducer extends Actor with Producer {
|
|
def endpointUri = "direct:welcome"
|
|
}
|
|
|
|
class CustomRouteBuilder extends RouteBuilder {
|
|
def configure {
|
|
from("direct:welcome").process(new Processor() {
|
|
def process(exchange: Exchange) {
|
|
// Create a 'welcome' message from the input message
|
|
exchange.getOut.setBody("Welcome %s" format exchange.getIn.getBody)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
}
|