From 8138186a44a6bbb45564253cbf12a2e6c0f9c673 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Fri, 30 Mar 2012 11:08:00 +0100 Subject: [PATCH 1/7] Made message conversions on producer more user friendly by renaming it and adding outgonig message converter. --- .../src/main/scala/akka/camel/Producer.scala | 24 +++++++++++++------ .../camel/javaapi/UntypedProducerActor.scala | 6 ++--- .../akka/camel/ProducerFeatureTest.scala | 4 ++-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 293de6ad39..e7ac1fb194 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -88,13 +88,13 @@ trait ProducerSupport { this: Actor ⇒ * @see Producer#produce(Any, ExchangePattern) */ protected def produce: Receive = { - case res: MessageResult ⇒ receiveAfterProduce(res.message) - case res: FailureResult ⇒ receiveAfterProduce(res.failure) + case res: MessageResult ⇒ routeResponse(res.message) + case res: FailureResult ⇒ routeResponse(res.failure) case msg ⇒ { if (oneway) - produce(receiveBeforeProduce(msg), ExchangePattern.InOnly) + produce(transformOutgoingMessage(msg), ExchangePattern.InOnly) else - produce(receiveBeforeProduce(msg), ExchangePattern.InOut) + produce(transformOutgoingMessage(msg), ExchangePattern.InOut) } } @@ -103,7 +103,16 @@ trait ProducerSupport { this: Actor ⇒ * message is passed as argument. By default, this method simply returns the argument but may be overridden * by subtraits or subclasses. */ - protected def receiveBeforeProduce: PartialFunction[Any, Any] = { + protected def transformOutgoingMessage: PartialFunction[Any, Any] = { + case msg ⇒ msg + } + + /** + * Called before the response message is sent to the original sender. The original + * message is passed as argument. By default, this method simply returns the argument but may be overridden + * by subtraits or subclasses. + */ + protected def transformResponse: PartialFunction[Any, Any] = { case msg ⇒ msg } @@ -114,8 +123,9 @@ trait ProducerSupport { this: Actor ⇒ * done. This method may be overridden by subtraits or subclasses (e.g. to forward responses to another * actor). */ - protected def receiveAfterProduce: Receive = { - case msg ⇒ if (!oneway) sender ! msg + + protected def routeResponse: Receive = { + case msg ⇒ if (!oneway) sender ! transformResponse(msg) } } diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index b947e43d64..d615c64244 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -27,13 +27,13 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { * if oneway is false. If oneway is true, nothing is * done. This method may be overridden by subclasses (e.g. to forward responses to another actor). */ - def onReceiveAfterProduce(message: AnyRef): Unit = super.receiveAfterProduce(message) + def onReceiveAfterProduce(message: AnyRef): Unit = super.routeResponse(message) - final override def receiveBeforeProduce = { + final override def transformOutgoingMessage = { case msg: AnyRef ⇒ onReceiveBeforeProduce(msg) } - final override def receiveAfterProduce = { + final override def routeResponse = { case msg: AnyRef ⇒ onReceiveAfterProduce(msg) } diff --git a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala index 515b776cfe..6de826bb8f 100644 --- a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala @@ -266,7 +266,7 @@ object ProducerFeatureTest { class TestProducer(uri: String, upper: Boolean = false) extends Actor with Producer { def endpointUri = uri - override protected def receiveBeforeProduce = { + override protected def transformOutgoingMessage = { case msg: CamelMessage ⇒ if (upper) msg.mapBody { body: String ⇒ body.toUpperCase } @@ -277,7 +277,7 @@ object ProducerFeatureTest { class TestForwarder(uri: String, target: ActorRef) extends Actor with Producer { def endpointUri = uri - override protected def receiveAfterProduce = { + override protected def routeResponse = { case msg ⇒ target forward msg } } From 7da8fa132a9f7b019ba628ffe037c001586f5b21 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Fri, 30 Mar 2012 11:18:07 +0100 Subject: [PATCH 2/7] Made message conversions on producer more user friendly by renaming it and adding outgonig message converter. Part II --- .../camel/javaapi/UntypedProducerActor.scala | 19 +++++++++++++++---- .../SampleUntypedForwardingProducer.java | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index d615c64244..e67c4fe3cd 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -19,7 +19,14 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { * message is passed as argument. By default, this method simply returns the argument but may be overridden * by subclasses. */ - def onReceiveBeforeProduce(message: AnyRef): AnyRef = message + def onTransformOutgoingMessage(message: AnyRef): AnyRef = message + + /** + * Called before the response message is sent to original sender. The original + * message is passed as argument. By default, this method simply returns the argument but may be overridden + * by subclasses. + */ + def onTransformResponse(message: AnyRef): AnyRef = message /** * Called after a response was received from the endpoint specified by endpointUri. The @@ -27,14 +34,18 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { * if oneway is false. If oneway is true, nothing is * done. This method may be overridden by subclasses (e.g. to forward responses to another actor). */ - def onReceiveAfterProduce(message: AnyRef): Unit = super.routeResponse(message) + def onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) final override def transformOutgoingMessage = { - case msg: AnyRef ⇒ onReceiveBeforeProduce(msg) + case msg: AnyRef ⇒ onTransformOutgoingMessage(msg) + } + + final override def transformResponse = { + case msg: AnyRef ⇒ onTransformResponse(msg) } final override def routeResponse = { - case msg: AnyRef ⇒ onReceiveAfterProduce(msg) + case msg: AnyRef ⇒ onRouteResponse(msg) } final override def endpointUri = getEndpointUri diff --git a/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java b/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java index ef0b7465c5..375ef36835 100644 --- a/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java +++ b/akka-camel/src/test/java/akka/camel/SampleUntypedForwardingProducer.java @@ -15,7 +15,7 @@ public class SampleUntypedForwardingProducer extends UntypedProducerActor { } @Override - public void onReceiveAfterProduce(Object message) { + public void onRouteResponse(Object message) { CamelMessage msg = (CamelMessage)message; String body = msg.getBodyAs(String.class,getCamelContext()); getProducerTemplate().sendBody("direct:forward-test-1", body); From 44a19aff8e057573da74d26ccaa9afd387549b9b Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Fri, 6 Apr 2012 11:13:59 +0100 Subject: [PATCH 3/7] Partial functions replaced with regular functions for message converters --- akka-camel/src/main/scala/akka/camel/Producer.scala | 8 ++------ .../scala/akka/camel/javaapi/UntypedProducerActor.scala | 4 ++-- .../src/test/scala/akka/camel/ProducerFeatureTest.scala | 2 +- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index e7ac1fb194..679bfbd495 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -103,18 +103,14 @@ trait ProducerSupport { this: Actor ⇒ * message is passed as argument. By default, this method simply returns the argument but may be overridden * by subtraits or subclasses. */ - protected def transformOutgoingMessage: PartialFunction[Any, Any] = { - case msg ⇒ msg - } + protected def transformOutgoingMessage(msg: Any): Any = msg /** * Called before the response message is sent to the original sender. The original * message is passed as argument. By default, this method simply returns the argument but may be overridden * by subtraits or subclasses. */ - protected def transformResponse: PartialFunction[Any, Any] = { - case msg ⇒ msg - } + protected def transformResponse(msg: Any): Any = msg /** * Called after a response was received from the endpoint specified by endpointUri. The diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index e67c4fe3cd..18055223d6 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -36,11 +36,11 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { */ def onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) - final override def transformOutgoingMessage = { + final override def transformOutgoingMessage(msg: Any) = msg match { case msg: AnyRef ⇒ onTransformOutgoingMessage(msg) } - final override def transformResponse = { + final override def transformResponse(msg: Any) = msg match { case msg: AnyRef ⇒ onTransformResponse(msg) } diff --git a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala index 6de826bb8f..a8f138e44a 100644 --- a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala @@ -266,7 +266,7 @@ object ProducerFeatureTest { class TestProducer(uri: String, upper: Boolean = false) extends Actor with Producer { def endpointUri = uri - override protected def transformOutgoingMessage = { + override protected def transformOutgoingMessage(msg: Any) = msg match { case msg: CamelMessage ⇒ if (upper) msg.mapBody { body: String ⇒ body.toUpperCase } From 1b254f9f61c731700953a0c1b115f54ce54f77f2 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Mon, 9 Apr 2012 07:44:47 +0100 Subject: [PATCH 4/7] adding return types --- .../scala/akka/camel/javaapi/UntypedProducerActor.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index 18055223d6..a9138654d9 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -36,15 +36,15 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { */ def onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) - final override def transformOutgoingMessage(msg: Any) = msg match { + final override def transformOutgoingMessage(msg: Any) : AnyRef = msg match { case msg: AnyRef ⇒ onTransformOutgoingMessage(msg) } - final override def transformResponse(msg: Any) = msg match { + final override def transformResponse(msg: Any) : AnyRef = msg match { case msg: AnyRef ⇒ onTransformResponse(msg) } - final override def routeResponse = { + final override def routeResponse : AnyRef = { case msg: AnyRef ⇒ onRouteResponse(msg) } From c457360dbee05ebb8b7ee21e178711004a256329 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Mon, 9 Apr 2012 07:59:03 +0100 Subject: [PATCH 5/7] adding return types --- akka-camel/src/main/scala/akka/camel/Producer.scala | 4 ++-- .../scala/akka/camel/javaapi/UntypedProducerActor.scala | 6 +++--- .../src/test/scala/akka/camel/ProducerFeatureTest.scala | 4 +--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 679bfbd495..4fd879355c 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -120,8 +120,8 @@ trait ProducerSupport { this: Actor ⇒ * actor). */ - protected def routeResponse: Receive = { - case msg ⇒ if (!oneway) sender ! transformResponse(msg) + protected def routeResponse(msg: Any): Any = { + if (!oneway) sender ! transformResponse(msg) } } diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index a9138654d9..33a7934e81 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -36,15 +36,15 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { */ def onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) - final override def transformOutgoingMessage(msg: Any) : AnyRef = msg match { + final override def transformOutgoingMessage(msg: Any): AnyRef = msg match { case msg: AnyRef ⇒ onTransformOutgoingMessage(msg) } - final override def transformResponse(msg: Any) : AnyRef = msg match { + final override def transformResponse(msg: Any): AnyRef = msg match { case msg: AnyRef ⇒ onTransformResponse(msg) } - final override def routeResponse : AnyRef = { + final override def routeResponse(msg: Any): Any = msg match { case msg: AnyRef ⇒ onRouteResponse(msg) } diff --git a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala index a8f138e44a..4db2af577b 100644 --- a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala @@ -277,9 +277,7 @@ object ProducerFeatureTest { class TestForwarder(uri: String, target: ActorRef) extends Actor with Producer { def endpointUri = uri - override protected def routeResponse = { - case msg ⇒ target forward msg - } + override protected def routeResponse(msg: Any): Any = { target forward msg } } class TestResponder extends Actor { From b7fc3f6da0d8acbb8922bd4432006bd5a18a95f9 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Fri, 20 Apr 2012 17:07:42 +0100 Subject: [PATCH 6/7] casting to AnyRef instead --- .../akka/camel/javaapi/UntypedProducerActor.scala | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala index 33a7934e81..d87d005c43 100644 --- a/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala +++ b/akka-camel/src/main/scala/akka/camel/javaapi/UntypedProducerActor.scala @@ -36,17 +36,9 @@ abstract class UntypedProducerActor extends UntypedActor with ProducerSupport { */ def onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) - final override def transformOutgoingMessage(msg: Any): AnyRef = msg match { - case msg: AnyRef ⇒ onTransformOutgoingMessage(msg) - } - - final override def transformResponse(msg: Any): AnyRef = msg match { - case msg: AnyRef ⇒ onTransformResponse(msg) - } - - final override def routeResponse(msg: Any): Any = msg match { - case msg: AnyRef ⇒ onRouteResponse(msg) - } + final override def transformOutgoingMessage(msg: Any): AnyRef = onTransformOutgoingMessage(msg.asInstanceOf[AnyRef]) + final override def transformResponse(msg: Any): AnyRef = onTransformResponse(msg.asInstanceOf[AnyRef]) + final override def routeResponse(msg: Any): Any = onRouteResponse(msg.asInstanceOf[AnyRef]) final override def endpointUri = getEndpointUri From ec0f04a741b8eba9d465ce9435dce3e48ebbb0e4 Mon Sep 17 00:00:00 2001 From: Piotr Gabryanczyk Date: Mon, 23 Apr 2012 10:19:31 +0100 Subject: [PATCH 7/7] routeResponse returns Unit --- akka-camel/src/main/scala/akka/camel/Producer.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 4fd879355c..34062ef536 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -120,7 +120,7 @@ trait ProducerSupport { this: Actor ⇒ * actor). */ - protected def routeResponse(msg: Any): Any = { + protected def routeResponse(msg: Any) { if (!oneway) sender ! transformResponse(msg) }