Message API improvements

This commit is contained in:
Martin Krasser 2010-05-10 14:38:03 +02:00
parent 2f5bbb9d33
commit 9a1c10a7dd
3 changed files with 28 additions and 8 deletions

View file

@ -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 <code>T</code>. 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 <code>names</code>.
*/
@ -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 <code>body</code> converted to type <code>T</code>.
*
* @see Message#bodyAs(Class)
*/
def setBodyAs[T](implicit m: Manifest[T]): Message = setBody(bodyAs[T])
/**
* Creates a Message with a new <code>body</code>.
*/

View file

@ -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 = {

View file

@ -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")
}
}