Message API improvements
This commit is contained in:
parent
2f5bbb9d33
commit
9a1c10a7dd
3 changed files with 28 additions and 8 deletions
|
|
@ -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>.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue