diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index 293de6ad39..34062ef536 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,9 +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 receiveBeforeProduce: 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(msg: Any): Any = msg /** * Called after a response was received from the endpoint specified by endpointUri. The @@ -114,8 +119,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(msg: 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 b947e43d64..d87d005c43 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,15 +34,11 @@ 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 onRouteResponse(message: AnyRef): Unit = super.routeResponse(message) - final override def receiveBeforeProduce = { - case msg: AnyRef ⇒ onReceiveBeforeProduce(msg) - } - - final override def receiveAfterProduce = { - case msg: AnyRef ⇒ onReceiveAfterProduce(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 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); diff --git a/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/camel/ProducerFeatureTest.scala index 515b776cfe..4db2af577b 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(msg: Any) = msg match { case msg: CamelMessage ⇒ if (upper) msg.mapBody { body: String ⇒ body.toUpperCase } @@ -277,9 +277,7 @@ object ProducerFeatureTest { class TestForwarder(uri: String, target: ActorRef) extends Actor with Producer { def endpointUri = uri - override protected def receiveAfterProduce = { - case msg ⇒ target forward msg - } + override protected def routeResponse(msg: Any): Any = { target forward msg } } class TestResponder extends Actor {