You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/02/17 09:08:34 UTC
[camel] branch main updated: CAMEL-17668: camel-core - WireTap - Remove function to tap as new body/header
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 7bc5ba6 CAMEL-17668: camel-core - WireTap - Remove function to tap as new body/header
7bc5ba6 is described below
commit 7bc5ba6168dafa8887f136f05d43c35f19deae63
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 17 10:07:46 2022 +0100
CAMEL-17668: camel-core - WireTap - Remove function to tap as new body/header
---
.../org/apache/camel/catalog/models/wireTap.json | 2 -
.../apache/camel/catalog/schemas/camel-spring.xsd | 20 +--
.../processor/SpringWireTapNewExchangeTest.java | 31 ----
.../SpringWireTapUsingFireAndForgetCopyTest.java | 96 -----------
.../SpringWireTapUsingFireAndForgetTest.java | 95 -----------
.../processor/SpringWireTapNewExchangeTest.xml | 52 ------
.../SpringWireTapUsingFireAndForgetCopyTest.xml | 56 -------
.../SpringWireTapUsingFireAndForgetTest.xml | 56 -------
.../main/docs/modules/eips/pages/wireTap-eip.adoc | 61 +------
.../resources/org/apache/camel/model/wireTap.json | 2 -
.../org/apache/camel/model/WireTapDefinition.java | 105 ------------
.../apache/camel/processor/WireTapProcessor.java | 49 ------
.../org/apache/camel/reifier/WireTapReifier.java | 20 +--
.../camel/processor/WireTapNewExchangeTest.java | 67 --------
.../camel/processor/WireTapOnPrepareTest.java | 2 +-
...WireTapUsingFireAndForgetCopyAsDefaultTest.java | 177 ---------------------
.../WireTapUsingFireAndForgetCopyTest.java | 177 ---------------------
.../processor/WireTapUsingFireAndForgetTest.java | 107 -------------
.../OnExceptionWireTapNewExchangeBodyTest.java | 47 ------
.../java/org/apache/camel/xml/in/ModelParser.java | 10 +-
.../ROOT/pages/camel-3x-upgrade-guide-3_16.adoc | 4 +
.../dsl/yaml/deserializers/ModelDeserializers.java | 18 ---
.../src/generated/resources/camel-yaml-dsl.json | 12 --
.../src/generated/resources/camelYamlDsl.json | 12 --
24 files changed, 11 insertions(+), 1267 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wireTap.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wireTap.json
index f135ac6..d0e6691 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wireTap.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/wireTap.json
@@ -12,8 +12,6 @@
"output": false
},
"properties": {
- "processorRef": { "kind": "attribute", "displayName": "Processor Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a Processor to use for creating a new body as the message to use for wire tapping" },
- "body": { "kind": "expression", "displayName": "Body", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "joor", "jsonpath", "language", "method", "mvel", "ognl", "ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Uses the expression for [...]
"executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Uses a custom thread pool" },
"copy": { "kind": "attribute", "displayName": "Copy", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Uses a copy of the original exchange" },
"dynamicUri": { "kind": "attribute", "displayName": "Dynamic Uri", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 59c7ab3..6781005 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -12399,25 +12399,7 @@ exception to throw instead.
<xs:complexType name="wireTapDefinition">
<xs:complexContent>
<xs:extension base="tns:toDynamicDefinition">
- <xs:sequence>
- <xs:element minOccurs="0" name="body" type="tns:expressionSubElementDefinition">
- <xs:annotation>
- <xs:documentation xml:lang="en"><![CDATA[
-Uses the expression for creating a new body as the message to use for wire
-tapping.
- ]]></xs:documentation>
- </xs:annotation>
- </xs:element>
- <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:setHeader"/>
- </xs:sequence>
- <xs:attribute name="processorRef" type="xs:string">
- <xs:annotation>
- <xs:documentation xml:lang="en"><![CDATA[
-Reference to a Processor to use for creating a new body as the message to use
-for wire tapping.
- ]]></xs:documentation>
- </xs:annotation>
- </xs:attribute>
+ <xs:sequence/>
<xs:attribute name="executorServiceRef" type="xs:string">
<xs:annotation>
<xs:documentation xml:lang="en"><![CDATA[
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.java
deleted file mode 100644
index 8598db7..0000000
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.spring.processor;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.processor.WireTapNewExchangeTest;
-
-import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-
-public class SpringWireTapNewExchangeTest extends WireTapNewExchangeTest {
-
- @Override
- protected CamelContext createCamelContext() throws Exception {
- return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.xml");
- }
-
-}
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java
deleted file mode 100644
index 7fd0e34..0000000
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.spring.processor;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-
-public class SpringWireTapUsingFireAndForgetCopyTest extends ContextTestSupport {
-
- @Override
- protected CamelContext createCamelContext() throws Exception {
- return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.xml");
- }
-
- @Test
- public void testFireAndForgetUsingExpression() throws Exception {
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingProcessor() throws Exception {
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start2", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start2", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start2", e2.getFromEndpoint().getEndpointUri());
- }
-
- // START SNIPPET: e1
- public static class MyProcessor implements Processor {
-
- @Override
- public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- // here we prepare the new exchange by setting the payload on the exchange
- // on the IN message.
- exchange.getIn().setBody("Bye " + body);
- exchange.getIn().setHeader("foo", "bar");
- }
- }
- // END SNIPPET: e1
-
-}
diff --git a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java b/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java
deleted file mode 100644
index b2ff2fd..0000000
--- a/components/camel-spring-xml/src/test/java/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.spring.processor;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-
-public class SpringWireTapUsingFireAndForgetTest extends ContextTestSupport {
-
- @Override
- protected CamelContext createCamelContext() throws Exception {
- return createSpringCamelContext(this, "org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.xml");
- }
-
- @Test
- public void testFireAndForgetUsingExpression() throws Exception {
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("Hello World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingProcessor() throws Exception {
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("Hello World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start2", "Hello World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start2", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start2", e2.getFromEndpoint().getEndpointUri());
- }
-
- // START SNIPPET: e1
- public static class MyProcessor implements Processor {
-
- @Override
- public void process(Exchange exchange) throws Exception {
- // here we prepare the new exchange by setting the payload on the exchange
- // on the IN message.
- exchange.getIn().setBody("Bye World");
- exchange.getIn().setHeader("foo", "bar");
- }
- }
- // END SNIPPET: e1
-
-}
diff --git a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.xml b/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.xml
deleted file mode 100644
index 6c60365..0000000
--- a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapNewExchangeTest.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
- ">
-
- <camelContext xmlns="http://camel.apache.org/schema/spring">
- <!-- START SNIPPET: e1 -->
- <route>
- <from uri="direct:start"/>
- <!-- tap a new message and send it to direct:tap -->
- <!-- the new message should be Bye World with 2 headers -->
- <wireTap uri="direct:tap">
- <!-- create the new tap message body and headers -->
- <body><constant>Bye World</constant></body>
- <setHeader name="id"><constant>123</constant></setHeader>
- <setHeader name="date"><simple>${date:now:yyyyMMdd}</simple></setHeader>
- </wireTap>
- <!-- here we continue routing the original message -->
- <to uri="mock:result"/>
- </route>
- <!-- END SNIPPET: e1 -->
-
- <!-- this is the tapped route -->
- <route>
- <from uri="direct:tap"/>
- <to uri="mock:tap"/>
- </route>
-
- </camelContext>
-
-</beans>
diff --git a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.xml b/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.xml
deleted file mode 100644
index b9d7140..0000000
--- a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetCopyTest.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
- ">
-
-
- <camelContext xmlns="http://camel.apache.org/schema/spring">
- <!-- START SNIPPET: e1 -->
- <route>
- <from uri="direct:start"/>
- <wireTap uri="direct:foo">
- <body><simple>Bye ${body}</simple></body>
- </wireTap>
- <to uri="mock:result"/>
- </route>
- <!-- END SNIPPET: e1 -->
-
- <!-- START SNIPPET: e2 -->
- <route>
- <from uri="direct:start2"/>
- <wireTap uri="direct:foo" processorRef="myProcessor"/>
- <to uri="mock:result"/>
- </route>
- <!-- END SNIPPET: e2 -->
-
- <route>
- <from uri="direct:foo"/>
- <to uri="mock:foo"/>
- </route>
-
- </camelContext>
-
- <bean id="myProcessor" class="org.apache.camel.spring.processor.SpringWireTapUsingFireAndForgetCopyTest$MyProcessor"/>
-
-</beans>
diff --git a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.xml b/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.xml
deleted file mode 100644
index 0ac3e10..0000000
--- a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/SpringWireTapUsingFireAndForgetTest.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
- ">
-
-
- <camelContext xmlns="http://camel.apache.org/schema/spring">
- <!-- START SNIPPET: e1 -->
- <route>
- <from uri="direct:start"/>
- <wireTap uri="direct:foo">
- <body><constant>Bye World</constant></body>
- </wireTap>
- <to uri="mock:result"/>
- </route>
- <!-- END SNIPPET: e1 -->
-
- <!-- START SNIPPET: e2 -->
- <route>
- <from uri="direct:start2"/>
- <wireTap uri="direct:foo" processorRef="myProcessor"/>
- <to uri="mock:result"/>
- </route>
- <!-- END SNIPPET: e2 -->
-
- <route>
- <from uri="direct:foo"/>
- <to uri="mock:foo"/>
- </route>
-
- </camelContext>
-
- <bean id="myProcessor" class="org.apache.camel.spring.processor.SpringWireTapUsingFireAndForgetTest$MyProcessor"/>
-
-</beans>
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
index 2840de7..454fed4 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
@@ -18,12 +18,9 @@ image::eip/WireTap.gif[image]
include::partial$eip-options.adoc[]
// eip options: END
-== WireTap Nodes
+== Wire Tap
-Camel's Wire Tap node supports two modes when wire tapping an
-xref:manual::exchange.adoc[Exchange]:
-
-- _Default mode_: Camel will copy the original
+Camel's Wire Tap will copy the original
xref:manual::exchange.adoc[Exchange] and set its
xref:manual::exchange-pattern.adoc[Exchange Pattern] to *`InOnly`*, as we want
the tapped xref:manual::exchange.adoc[Exchange] to be sent in a fire and forget
@@ -33,15 +30,11 @@ only the `Exchange` is copied - Wire Tap won't do a deep clone (unless you
specify a custom processor via *`onPrepareRef`* which does that). So all
copies could share objects from the original `Exchange`.
-- _New mode_: Camel also provides an option of sending a new
-xref:manual::exchange.adoc[Exchange] allowing you to populate it with new
-values.
-
=== Using Wire Tap
In the example below the exchange is wire tapped to the direct:tap route.
This route delays the message 1 second before continuing. This is because
-it allows you to see that the tapped message is routed independently from the original
+it allows you to see that the tapped message is routed independently of the original
route, so that you would see log:result happens before log:tap
[source,java]
@@ -102,54 +95,6 @@ And in XML:
</route>
----
-=== Wire tapping a new message
-
-In the _new mode_ then the wire tap will create a new `Exchange` that gets populated with new data, to be sent
-out from the wire tap. The idea is to allow you to construct the tapped message with information from the original
-message.
-
-The construction of the new message is done via a `Processor` where you populate the `Exchange`
-
-[source,java]
-----
-from("direct:start")
- .wireTap("direct:tap").newExchange(exchange -> {
- String oldBody = exchange.getMessage().getBody(String.class);
- String newBody = "We are listening: " + oldBody;
- exchange.getMessage().setBody(newBody);
- exchange.getMessage().setHeader("tapId", "123");
- })
- .to("log:result");
-
-from("direct:tap")
- .to("log:tap");
-----
-
-And in XML we are using `<body>` and `<setHeader`> (This is also possible in Java DSL)
-to construct the message, instead of using a `Processor`:
-
-[source,xml]
-----
-<routes>
-
- <route>
- <from uri="direct:start"/>
- <wireTap uri="direct:tap">
- <body><simple>We are listening: ${body}</simple></body>
- <setHeader name="tapId"><constant>123</constant></setHeader>
- </wireTap>
- <to uri="log:result"/>
- </route>
-
- <route>
- <from uri="direct:tap"/>
- <to uri="log:log"/>
- </route>
-
-</routes>
-
-----
-
== WireTap Thread Pools
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/wireTap.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/wireTap.json
index f135ac6..d0e6691 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/wireTap.json
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/wireTap.json
@@ -12,8 +12,6 @@
"output": false
},
"properties": {
- "processorRef": { "kind": "attribute", "displayName": "Processor Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a Processor to use for creating a new body as the message to use for wire tapping" },
- "body": { "kind": "expression", "displayName": "Body", "required": false, "type": "object", "javaType": "org.apache.camel.model.ExpressionSubElementDefinition", "oneOf": [ "constant", "csimple", "datasonnet", "exchangeProperty", "groovy", "header", "hl7terser", "joor", "jsonpath", "language", "method", "mvel", "ognl", "ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "description": "Uses the expression for [...]
"executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Uses a custom thread pool" },
"copy": { "kind": "attribute", "displayName": "Copy", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Uses a copy of the original exchange" },
"dynamicUri": { "kind": "attribute", "displayName": "Dynamic Uri", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the [...]
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/WireTapDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/WireTapDefinition.java
index da87d26..f79bf76 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/WireTapDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/WireTapDefinition.java
@@ -16,20 +16,15 @@
*/
package org.apache.camel.model;
-import java.util.ArrayList;
-import java.util.List;
import java.util.concurrent.ExecutorService;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.ExchangePattern;
-import org.apache.camel.Expression;
import org.apache.camel.Processor;
import org.apache.camel.spi.Metadata;
@@ -43,14 +38,6 @@ import org.apache.camel.spi.Metadata;
public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends ToDynamicDefinition
implements ExecutorServiceAwareDefinition<WireTapDefinition<Type>> {
@XmlTransient
- private Processor newExchangeProcessor;
- @XmlAttribute(name = "processorRef")
- private String newExchangeProcessorRef;
- @XmlElement(name = "body")
- private ExpressionSubElementDefinition newExchangeExpression;
- @XmlElementRef
- private List<SetHeaderDefinition> headers = new ArrayList<>();
- @XmlTransient
private ExecutorService executorService;
@XmlAttribute
private String executorServiceRef;
@@ -187,57 +174,6 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
}
/**
- * Sends a <i>new</i> Exchange, instead of tapping an existing, using {@link ExchangePattern#InOnly}
- *
- * @param expression expression that creates the new body to send
- * @return the builder
- * @see #newExchangeHeader(String, org.apache.camel.Expression)
- */
- public WireTapDefinition<Type> newExchangeBody(Expression expression) {
- setNewExchangeExpression(new ExpressionSubElementDefinition(expression));
- return this;
- }
-
- /**
- * Sends a <i>new</i> Exchange, instead of tapping an existing, using {@link ExchangePattern#InOnly}
- *
- * @param ref reference to the {@link Processor} to lookup in the {@link org.apache.camel.spi.Registry} to be used
- * for preparing the new exchange to send
- * @return the builder
- */
- public WireTapDefinition<Type> newExchangeRef(String ref) {
- setNewExchangeProcessorRef(ref);
- return this;
- }
-
- /**
- * Sends a <i>new</i> Exchange, instead of tapping an existing, using {@link ExchangePattern#InOnly}
- *
- * @param processor processor preparing the new exchange to send
- * @return the builder
- * @see #newExchangeHeader(String, org.apache.camel.Expression)
- */
- public WireTapDefinition<Type> newExchange(Processor processor) {
- setNewExchangeProcessor(processor);
- return this;
- }
-
- /**
- * Sets a header on the <i>new</i> Exchange, instead of tapping an existing, using {@link ExchangePattern#InOnly}.
- * <p/>
- * Use this together with the {@link #newExchangeBody(org.apache.camel.Expression)} or
- * {@link #newExchange(org.apache.camel.Processor)} methods.
- *
- * @param headerName the header name
- * @param expression the expression setting the header value
- * @return the builder
- */
- public WireTapDefinition<Type> newExchangeHeader(String headerName, Expression expression) {
- headers.add(new SetHeaderDefinition(headerName, expression));
- return this;
- }
-
- /**
* Uses the {@link Processor} when preparing the {@link org.apache.camel.Exchange} to be send. This can be used to
* deep-clone messages that should be send, or any custom logic needed before the exchange is send.
*
@@ -337,39 +273,6 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
super.setUri(uri);
}
- public Processor getNewExchangeProcessor() {
- return newExchangeProcessor;
- }
-
- /**
- * To use a Processor for creating a new body as the message to use for wire tapping
- */
- public void setNewExchangeProcessor(Processor processor) {
- this.newExchangeProcessor = processor;
- }
-
- public String getNewExchangeProcessorRef() {
- return newExchangeProcessorRef;
- }
-
- /**
- * Reference to a Processor to use for creating a new body as the message to use for wire tapping
- */
- public void setNewExchangeProcessorRef(String ref) {
- this.newExchangeProcessorRef = ref;
- }
-
- public ExpressionSubElementDefinition getNewExchangeExpression() {
- return newExchangeExpression;
- }
-
- /**
- * Uses the expression for creating a new body as the message to use for wire tapping
- */
- public void setNewExchangeExpression(ExpressionSubElementDefinition newExchangeExpression) {
- this.newExchangeExpression = newExchangeExpression;
- }
-
@Override
public ExecutorService getExecutorService() {
return executorService;
@@ -422,12 +325,4 @@ public class WireTapDefinition<Type extends ProcessorDefinition<Type>> extends T
this.onPrepare = onPrepare;
}
- public List<SetHeaderDefinition> getHeaders() {
- return headers;
- }
-
- public void setHeaders(List<SetHeaderDefinition> headers) {
- this.headers = headers;
- }
-
}
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java
index 96e27fc..aa21610 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java
@@ -17,8 +17,6 @@
package org.apache.camel.processor;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.atomic.LongAdder;
@@ -29,7 +27,6 @@ import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.Expression;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.Message;
import org.apache.camel.Processor;
@@ -72,11 +69,6 @@ public class WireTapProcessor extends AsyncProcessorSupport
private final LongAdder taskCount = new LongAdder();
private ProcessorExchangeFactory processorExchangeFactory;
private PooledExchangeTaskFactory taskFactory;
-
- // expression or processor used for populating a new exchange to send
- // as opposed to traditional wiretap that sends a copy of the original exchange
- private Expression newExchangeExpression;
- private List<Processor> newExchangeProcessors;
private Processor onPrepare;
public WireTapProcessor(SendDynamicProcessor dynamicSendProcessor, Processor processor, String uri,
@@ -233,24 +225,6 @@ public class WireTapProcessor extends AsyncProcessorSupport
answer = configureNewExchange(exchange);
}
- // prepare the exchange
- if (newExchangeExpression != null) {
- Object body = newExchangeExpression.evaluate(answer, Object.class);
- if (body != null) {
- answer.getIn().setBody(body);
- }
- }
-
- if (newExchangeProcessors != null) {
- for (Processor processor : newExchangeProcessors) {
- try {
- processor.process(answer);
- } catch (Exception e) {
- throw RuntimeCamelException.wrapRuntimeCamelException(e);
- }
- }
- }
-
// if the body is a stream cache we must use a copy of the stream in the wire tapped exchange
Message msg = answer.getMessage();
if (msg.getBody() instanceof StreamCache) {
@@ -294,29 +268,6 @@ public class WireTapProcessor extends AsyncProcessorSupport
return processorExchangeFactory.create(exchange.getFromEndpoint(), ExchangePattern.InOnly);
}
- public List<Processor> getNewExchangeProcessors() {
- return newExchangeProcessors;
- }
-
- public void setNewExchangeProcessors(List<Processor> newExchangeProcessors) {
- this.newExchangeProcessors = newExchangeProcessors;
- }
-
- public Expression getNewExchangeExpression() {
- return newExchangeExpression;
- }
-
- public void setNewExchangeExpression(Expression newExchangeExpression) {
- this.newExchangeExpression = newExchangeExpression;
- }
-
- public void addNewExchangeProcessor(Processor processor) {
- if (newExchangeProcessors == null) {
- newExchangeProcessors = new ArrayList<>();
- }
- newExchangeProcessors.add(processor);
- }
-
public boolean isCopy() {
return copy;
}
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
index 4c8bc70..7431efc 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
@@ -29,7 +29,6 @@ import org.apache.camel.Route;
import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.SetHeaderDefinition;
import org.apache.camel.model.WireTapDefinition;
import org.apache.camel.processor.SendDynamicProcessor;
import org.apache.camel.processor.SendProcessor;
@@ -97,25 +96,8 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
dynamicSendProcessor, target, uri,
parse(ExchangePattern.class, definition.getPattern()), isCopy,
threadPool, shutdownThreadPool, dynamic);
- Processor newExchangeProcessor = definition.getNewExchangeProcessor();
- String ref = parseString(definition.getNewExchangeProcessorRef());
- if (ref != null) {
- newExchangeProcessor = mandatoryLookup(ref, Processor.class);
- }
- if (newExchangeProcessor != null) {
- answer.addNewExchangeProcessor(newExchangeProcessor);
- }
- if (definition.getNewExchangeExpression() != null) {
- answer.setNewExchangeExpression(createExpression(definition.getNewExchangeExpression()));
- }
- if (definition.getHeaders() != null && !definition.getHeaders().isEmpty()) {
- for (SetHeaderDefinition header : definition.getHeaders()) {
- Processor processor = createProcessor(header);
- answer.addNewExchangeProcessor(processor);
- }
- }
Processor onPrepare = definition.getOnPrepare();
- ref = parseString(definition.getOnPrepareRef());
+ String ref = parseString(definition.getOnPrepareRef());
if (ref != null) {
onPrepare = mandatoryLookup(ref, Processor.class);
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapNewExchangeTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapNewExchangeTest.java
deleted file mode 100644
index 9623efc..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapNewExchangeTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-public class WireTapNewExchangeTest extends ContextTestSupport {
-
- @Test
- public void testFireAndForgetUsingExpressions() throws Exception {
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("Hello World");
-
- MockEndpoint tap = getMockEndpoint("mock:tap");
- tap.expectedBodiesReceived("Bye World");
- tap.expectedHeaderReceived("id", 123);
- String today = new SimpleDateFormat("yyyyMMdd").format(new Date());
- tap.expectedHeaderReceived("date", today);
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
- }
-
- @Override
- protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e1
- from("direct:start")
- // tap a new message and send it to direct:tap
- // the new message should be Bye World with 2 headers
- .wireTap("direct:tap")
- // create the new tap message body and headers
- .newExchangeBody(constant("Bye World")).newExchangeHeader("id", constant(123))
- .newExchangeHeader("date", simple("${date:now:yyyyMMdd}")).end()
- // here we continue routing the original messages
- .to("mock:result");
-
- // this is the tapped route
- from("direct:tap").to("mock:tap");
- // END SNIPPET: e1
- }
- };
- }
-}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java
index 93907b3..c074c0a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapOnPrepareTest.java
@@ -54,7 +54,7 @@ public class WireTapOnPrepareTest extends ContextTestSupport {
@Override
public void configure() throws Exception {
// START SNIPPET: e1
- from("direct:start").wireTap("direct:a").copy().newExchange(new AnimalDeepClonePrepare()).to("direct:b");
+ from("direct:start").wireTap("direct:a").copy().onPrepare(new AnimalDeepClonePrepare()).to("direct:b");
// END SNIPPET: e1
from("direct:a").process(new ProcessorA()).to("mock:a");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyAsDefaultTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyAsDefaultTest.java
deleted file mode 100644
index 0b2d169..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyAsDefaultTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-
-public class WireTapUsingFireAndForgetCopyAsDefaultTest extends ContextTestSupport {
-
- @Override
- public boolean isUseRouteBuilder() {
- return false;
- }
-
- @Test
- public void testFireAndForgetUsingProcessor() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e1
- from("direct:start").wireTap("direct:foo").copy().newExchange(exchange -> {
- String body = exchange.getIn().getBody(String.class);
- exchange.getIn().setBody("Bye " + body);
- exchange.getIn().setHeader("foo", "bar");
- }).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e1
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingProcessor2() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:start").wireTap("direct:foo").copy().newExchange(exchange -> {
- String body = exchange.getIn().getBody(String.class);
- exchange.getIn().setBody("Bye " + body);
- exchange.getIn().setHeader("foo", "bar");
- }).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingExpression() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e2
- from("direct:start").wireTap("direct:foo").copy().newExchangeBody(simple("Bye ${body}")).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e2
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingExpression2() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:start").wireTap("direct:foo").copy().newExchangeBody(simple("Bye ${body}")).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
-}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyTest.java
deleted file mode 100644
index 68bbd2a..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetCopyTest.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-
-public class WireTapUsingFireAndForgetCopyTest extends ContextTestSupport {
-
- @Override
- public boolean isUseRouteBuilder() {
- return false;
- }
-
- @Test
- public void testFireAndForgetUsingProcessor() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e1
- from("direct:start").wireTap("direct:foo").copy().newExchange(exchange -> {
- String body = exchange.getIn().getBody(String.class);
- exchange.getIn().setBody("Bye " + body);
- exchange.getIn().setHeader("foo", "bar");
- }).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e1
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingProcessor2() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:start").wireTap("direct:foo").copy().newExchange(exchange -> {
- String body = exchange.getIn().getBody(String.class);
- exchange.getIn().setBody("Bye " + body);
- exchange.getIn().setHeader("foo", "bar");
- }).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingExpression() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e2
- from("direct:start").wireTap("direct:foo").copy(true).newExchangeBody(simple("Bye ${body}")).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e2
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingExpression2() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:start").wireTap("direct:foo").copy(true).newExchangeBody(simple("Bye ${body}")).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
-}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetTest.java
deleted file mode 100644
index f4d5461..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/processor/WireTapUsingFireAndForgetTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.mock.MockEndpoint;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotSame;
-
-public class WireTapUsingFireAndForgetTest extends ContextTestSupport {
-
- @Override
- public boolean isUseRouteBuilder() {
- return false;
- }
-
- @Test
- public void testFireAndForgetUsingProcessor() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e1
- from("direct:start").wireTap("direct:foo").copy(false).newExchange(exchange -> {
- exchange.getIn().setBody("Bye World");
- exchange.getIn().setHeader("foo", "bar");
- }).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e1
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("Hello World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
- foo.expectedHeaderReceived("foo", "bar");
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
- @Test
- public void testFireAndForgetUsingExpression() throws Exception {
- context.addRoutes(new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- // START SNIPPET: e2
- from("direct:start").wireTap("direct:foo").copy(false).newExchangeBody(constant("Bye World")).to("mock:result");
-
- from("direct:foo").to("mock:foo");
- // END SNIPPET: e2
- }
- });
- context.start();
-
- MockEndpoint result = getMockEndpoint("mock:result");
- result.expectedBodiesReceived("Hello World");
-
- MockEndpoint foo = getMockEndpoint("mock:foo");
- foo.expectedBodiesReceived("Bye World");
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
-
- // should be different exchange instances
- Exchange e1 = result.getReceivedExchanges().get(0);
- Exchange e2 = foo.getReceivedExchanges().get(0);
- assertNotSame(e1, e2, "Should not be same Exchange");
-
- // should have same from endpoint
- assertEquals("direct://start", e1.getFromEndpoint().getEndpointUri());
- assertEquals("direct://start", e2.getFromEndpoint().getEndpointUri());
- }
-
-}
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWireTapNewExchangeBodyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWireTapNewExchangeBodyTest.java
deleted file mode 100644
index d49a67b..0000000
--- a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionWireTapNewExchangeBodyTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.processor.onexception;
-
-import org.apache.camel.ContextTestSupport;
-import org.apache.camel.builder.RouteBuilder;
-import org.junit.jupiter.api.Test;
-
-public class OnExceptionWireTapNewExchangeBodyTest extends ContextTestSupport {
-
- @Test
- public void testOnExceptionWireTapNewExchangeBody() throws Exception {
- getMockEndpoint("mock:tap").expectedBodiesReceived("Error due Forced");
- getMockEndpoint("mock:ignore").expectedMessageCount(1);
-
- template.sendBody("direct:start", "Hello World");
-
- assertMockEndpointsSatisfied();
- }
-
- @Override
- protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- onException(IllegalArgumentException.class).wireTap("mock:tap")
- .newExchangeBody(simple("Error due ${exception.message}")).end().handled(true).to("mock:ignore");
-
- from("direct:start").throwException(new IllegalArgumentException("Forced"));
- }
- };
- }
-}
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index bf17d23..9df72d5 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -1562,18 +1562,10 @@ public class ModelParser extends BaseParser {
case "dynamicUri": def.setDynamicUri(val); break;
case "executorServiceRef": def.setExecutorServiceRef(val); break;
case "onPrepareRef": def.setOnPrepareRef(val); break;
- case "processorRef": def.setNewExchangeProcessorRef(val); break;
default: return toDynamicDefinitionAttributeHandler().accept(def, key, val);
}
return true;
- }, (def, key) -> {
- switch (key) {
- case "setHeader": doAdd(doParseSetHeaderDefinition(), def.getHeaders(), def::setHeaders); break;
- case "body": def.setNewExchangeExpression(doParseExpressionSubElementDefinition()); break;
- default: return optionalIdentifiedDefinitionElementHandler().accept(def, key);
- }
- return true;
- }, noValueHandler());
+ }, optionalIdentifiedDefinitionElementHandler(), noValueHandler());
}
protected BlacklistServiceCallServiceFilterConfiguration doParseBlacklistServiceCallServiceFilterConfiguration() throws IOException, XmlPullParserException {
return doParse(new BlacklistServiceCallServiceFilterConfiguration(),
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_16.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_16.adoc
index 1fed0b8..04e8366 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_16.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_16.adoc
@@ -51,6 +51,10 @@ To:
</saga>
----
+==== WireTap EIP
+
+Removed the _new message_ mode as this functionality is better done by using onPrepare processor in copy mode.
+
=== camel-health
The `HealthCheck` API has been simplified and removed the following configurations:
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 47f9b1c..c31e5f8 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -17852,7 +17852,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
properties = {
@YamlProperty(name = "allow-optimised-components", type = "boolean"),
@YamlProperty(name = "auto-start-components", type = "boolean"),
- @YamlProperty(name = "body", type = "object:org.apache.camel.model.ExpressionSubElementDefinition"),
@YamlProperty(name = "cache-size", type = "number"),
@YamlProperty(name = "copy", type = "boolean"),
@YamlProperty(name = "description", type = "string"),
@@ -17864,8 +17863,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
@YamlProperty(name = "on-prepare-ref", type = "string"),
@YamlProperty(name = "parameters", type = "object"),
@YamlProperty(name = "pattern", type = "string"),
- @YamlProperty(name = "processor-ref", type = "string"),
- @YamlProperty(name = "set-header", type = "array:org.apache.camel.model.SetHeaderDefinition"),
@YamlProperty(name = "uri", type = "string", required = true)
}
)
@@ -17919,11 +17916,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
target.setExecutorServiceRef(val);
break;
}
- case "set-header": {
- java.util.List<org.apache.camel.model.SetHeaderDefinition> val = asFlatList(node, org.apache.camel.model.SetHeaderDefinition.class);
- target.setHeaders(val);
- break;
- }
case "ignore-invalid-endpoint": {
String val = asText(node);
target.setIgnoreInvalidEndpoint(val);
@@ -17934,16 +17926,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
target.setInheritErrorHandler(java.lang.Boolean.valueOf(val));
break;
}
- case "body": {
- org.apache.camel.model.ExpressionSubElementDefinition val = asType(node, org.apache.camel.model.ExpressionSubElementDefinition.class);
- target.setNewExchangeExpression(val);
- break;
- }
- case "processor-ref": {
- String val = asText(node);
- target.setNewExchangeProcessorRef(val);
- break;
- }
case "on-prepare-ref": {
String val = asText(node);
target.setOnPrepareRef(val);
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
index cebf21a..11ec70d 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
@@ -3530,9 +3530,6 @@
"auto-start-components" : {
"type" : "boolean"
},
- "body" : {
- "$ref" : "#/items/definitions/org.apache.camel.model.ExpressionSubElementDefinition"
- },
"cache-size" : {
"type" : "number"
},
@@ -3566,15 +3563,6 @@
"pattern" : {
"type" : "string"
},
- "processor-ref" : {
- "type" : "string"
- },
- "set-header" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/items/definitions/org.apache.camel.model.SetHeaderDefinition"
- }
- },
"uri" : {
"type" : "string"
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camelYamlDsl.json
index eba1f0c..23e16e1 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camelYamlDsl.json
@@ -3431,9 +3431,6 @@
"autoStartComponents" : {
"type" : "boolean"
},
- "body" : {
- "$ref" : "#/items/definitions/org.apache.camel.model.ExpressionSubElementDefinition"
- },
"cacheSize" : {
"type" : "number"
},
@@ -3467,15 +3464,6 @@
"pattern" : {
"type" : "string"
},
- "processorRef" : {
- "type" : "string"
- },
- "setHeader" : {
- "type" : "array",
- "items" : {
- "$ref" : "#/items/definitions/org.apache.camel.model.SetHeaderDefinition"
- }
- },
"uri" : {
"type" : "string"
}