diff --git a/akka-camel/src/main/scala/Message.scala b/akka-camel/src/main/scala/Message.scala index 6118a17522..a4231978ec 100644 --- a/akka-camel/src/main/scala/Message.scala +++ b/akka-camel/src/main/scala/Message.scala @@ -23,9 +23,21 @@ case class Message(val body: Any, val headers: Map[String, Any] = Map.empty) { * * @see CamelContextManager. */ + @deprecated("use bodyAs[T](implicit m: Manifest[T]): T instead") def bodyAs[T](clazz: Class[T]): T = CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](clazz, body) + /** + * Returns the body of the message converted to the type T. Conversion is done + * using Camel's type converter. The type converter is obtained from the CamelContext managed + * by CamelContextManager. Applications have to ensure proper initialization of + * CamelContextManager. + * + * @see CamelContextManager. + */ + def bodyAs[T](implicit m: Manifest[T]): T = + CamelContextManager.context.getTypeConverter.mandatoryConvertTo[T](m.erasure.asInstanceOf[Class[T]], body) + /** * Returns those headers from this message whose name is contained in names. */ @@ -41,8 +53,16 @@ case class Message(val body: Any, val headers: Map[String, Any] = Map.empty) { * * @see Message#bodyAs(Class) */ + @deprecated("use setBodyAs[T](implicit m: Manifest[T]): Message instead") def setBodyAs[T](clazz: Class[T]): Message = setBody(bodyAs(clazz)) + /** + * Creates a Message with a new body converted to type T. + * + * @see Message#bodyAs(Class) + */ + def setBodyAs[T](implicit m: Manifest[T]): Message = setBody(bodyAs[T]) + /** * Creates a Message with a new body. */ diff --git a/akka-camel/src/test/scala/MessageTest.scala b/akka-camel/src/test/scala/MessageTest.scala index 797d48ee57..da317be902 100644 --- a/akka-camel/src/test/scala/MessageTest.scala +++ b/akka-camel/src/test/scala/MessageTest.scala @@ -14,12 +14,12 @@ class MessageTest extends JUnitSuite with BeforeAndAfterAll { override protected def beforeAll = CamelContextManager.init @Test def shouldConvertDoubleBodyToString = { - assertEquals("1.4", Message(1.4, null).bodyAs(classOf[String])) + assertEquals("1.4", Message(1.4, null).bodyAs[String]) } @Test def shouldThrowExceptionWhenConvertingDoubleBodyToInputStream { intercept[NoTypeConversionAvailableException] { - Message(1.4, null).bodyAs(classOf[InputStream]) + Message(1.4, null).bodyAs[InputStream] } } @@ -37,7 +37,7 @@ class MessageTest extends JUnitSuite with BeforeAndAfterAll { @Test def shouldConvertBodyAndPreserveHeaders = { assertEquals( Message("1.4", Map("A" -> "1")), - Message(1.4 , Map("A" -> "1")).setBodyAs(classOf[String])) + Message(1.4 , Map("A" -> "1")).setBodyAs[String]) } @Test def shouldSetBodyAndPreserveHeaders = { diff --git a/akka-samples/akka-sample-camel/src/main/scala/Actors.scala b/akka-samples/akka-sample-camel/src/main/scala/Actors.scala index 11fd9020f9..655adf76a6 100644 --- a/akka-samples/akka-sample-camel/src/main/scala/Actors.scala +++ b/akka-samples/akka-sample-camel/src/main/scala/Actors.scala @@ -40,14 +40,14 @@ class Consumer1 extends Actor with Consumer with Logging { def endpointUri = "file:data/input" def receive = { - case msg: Message => log.info("received %s" format msg.bodyAs(classOf[String])) + case msg: Message => log.info("received %s" format msg.bodyAs[String]) } } @consume("jetty:http://0.0.0.0:8877/camel/test1") class Consumer2 extends Actor { def receive = { - case msg: Message => reply("Hello %s" format msg.bodyAs(classOf[String])) + case msg: Message => reply("Hello %s" format msg.bodyAs[String]) } } @@ -55,7 +55,7 @@ class Consumer3(transformer: ActorRef) extends Actor with Consumer { def endpointUri = "jetty:http://0.0.0.0:8877/camel/welcome" def receive = { - case msg: Message => transformer.forward(msg.setBodyAs(classOf[String])) + case msg: Message => transformer.forward(msg.setBodyAs[String]) } } @@ -63,7 +63,7 @@ class Consumer4 extends Actor with Consumer with Logging { def endpointUri = "jetty:http://0.0.0.0:8877/camel/stop" def receive = { - case msg: Message => msg.bodyAs(classOf[String]) match { + case msg: Message => msg.bodyAs[String] match { case "stop" => { reply("Consumer4 stopped") stop @@ -110,7 +110,7 @@ class PublisherBridge(uri: String, publisher: ActorRef) extends Actor with Consu protected def receive = { case msg: Message => { - publisher ! msg.bodyAs(classOf[String]) + publisher ! msg.bodyAs[String] reply("message published") } }