diff --git a/camel-core/src/main/java/org/apache/camel/processor/WireTapProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/WireTapProcessor.java index 13343afd15190..f8ee3db27d421 100644 --- a/camel-core/src/main/java/org/apache/camel/processor/WireTapProcessor.java +++ b/camel-core/src/main/java/org/apache/camel/processor/WireTapProcessor.java @@ -143,7 +143,7 @@ protected Exchange configureExchange(Exchange exchange, ExchangePattern pattern) // invoke on prepare on the exchange if specified if (onPrepare != null) { try { - onPrepare.process(exchange); + onPrepare.process(answer); } catch (Exception e) { throw ObjectHelper.wrapRuntimeCamelException(e); } diff --git a/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java b/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java index 0b37d02653e3d..64f04d7b00180 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java @@ -32,9 +32,16 @@ public void testWireTapOnPrepare() throws Exception { getMockEndpoint("mock:b").expectedMessageCount(1); getMockEndpoint("mock:b").message(0).body(String.class).isEqualTo("1 Tiger"); - template.sendBody("direct:start", new Animal(1, "Tiger")); + final Animal original = new Animal(1, "Tiger"); + template.sendBody("direct:start", original); assertMockEndpointsSatisfied(); + + final Animal aAnimal = getMockEndpoint("mock:a").getExchanges().get(0).getIn().getBody(Animal.class); + final Animal bAnimal = getMockEndpoint("mock:b").getExchanges().get(0).getIn().getBody(Animal.class); + + assertSame("Original instance should stay in main route", original, bAnimal); + assertNotSame("Copy should go to Wire Tap Endpoint", original, aAnimal); } @Override