You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2025/07/09 10:20:24 UTC
(camel) 01/02: Interceptor EIPs should include more information where the interception happened
This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 277930876b2a1b1d8dd74e095465e161b6f6c83c
Author: Croway <fe...@gmail.com>
AuthorDate: Mon Jul 7 15:53:02 2025 +0200
Interceptor EIPs should include more information where the interception happened
---
.../org/apache/camel/catalog/models/intercept.json | 5 +
.../apache/camel/catalog/models/interceptFrom.json | 5 +-
.../catalog/models/interceptSendToEndpoint.json | 5 +-
.../org/apache/camel/ExchangeConstantProvider.java | 5 +-
.../src/main/java/org/apache/camel/Exchange.java | 10 ++
.../java/org/apache/camel/ExchangePropertyKey.java | 9 ++
.../META-INF/org/apache/camel/model/intercept.json | 5 +
.../org/apache/camel/model/interceptFrom.json | 5 +-
.../camel/model/interceptSendToEndpoint.json | 5 +-
.../apache/camel/reifier/InterceptFromReifier.java | 4 +
.../org/apache/camel/reifier/InterceptReifier.java | 17 +++-
.../reifier/InterceptSendToEndpointReifier.java | 13 ++-
.../camel/processor/InterceptPropertiesTest.java | 111 +++++++++++++++++++++
13 files changed, 190 insertions(+), 9 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/intercept.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/intercept.json
index d40e3711a15..796125e30d7 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/intercept.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/intercept.json
@@ -17,5 +17,10 @@
"disabled": { "index": 2, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"onWhen": { "index": 3, "kind": "element", "displayName": "On When", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.OnWhenDefinition", "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "To use an expression to only trigger intercepting in specific situations" },
"outputs": { "index": 4, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
+ },
+ "exchangeProperties": {
+ "CamelInterceptedNodeId": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptFrom.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptFrom.json
index 3b4c57b949e..317d68daff6 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptFrom.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptFrom.json
@@ -20,6 +20,9 @@
"outputs": { "index": 5, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
},
"exchangeProperties": {
- "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" }
+ "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" },
+ "CamelInterceptedNodeId": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 3, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptSendToEndpoint.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptSendToEndpoint.json
index aa27dcb67a4..cb440512326 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptSendToEndpoint.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/interceptSendToEndpoint.json
@@ -22,6 +22,9 @@
"outputs": { "index": 7, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
},
"exchangeProperties": {
- "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" }
+ "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" },
+ "CamelInterceptedNodeId": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 3, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
index f38cc8019f8..c8a0bec481c 100644
--- a/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
+++ b/core/camel-api/src/generated/java/org/apache/camel/ExchangeConstantProvider.java
@@ -13,7 +13,7 @@ public class ExchangeConstantProvider {
private static final Map<String, String> MAP;
static {
- Map<String, String> map = new HashMap<>(158);
+ Map<String, String> map = new HashMap<>(161);
map.put("ACCEPT_CONTENT_TYPE", "CamelAcceptContentType");
map.put("AGGREGATED_COLLECTION_GUARD", "CamelAggregatedCollectionGuard");
map.put("AGGREGATED_COMPLETED_BY", "CamelAggregatedCompletedBy");
@@ -99,6 +99,9 @@ public class ExchangeConstantProvider {
map.put("HTTP_URL", "CamelHttpUrl");
map.put("INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED", "CamelInterceptSendToEndpointWhenMatched");
map.put("INTERCEPTED_ENDPOINT", "CamelInterceptedEndpoint");
+ map.put("INTERCEPTED_NODE_ID", "CamelInterceptedNodeId");
+ map.put("INTERCEPTED_PARENT_ENDPOINT_URI", "CamelInterceptedParentEndpointUri");
+ map.put("INTERCEPTED_ROUTE_ID", "CamelInterceptedRouteId");
map.put("INTERRUPTED", "CamelInterrupted");
map.put("LANGUAGE_SCRIPT", "CamelLanguageScript");
map.put("LOG_DEBUG_BODY_MAX_CHARS", "CamelLogDebugBodyMaxChars");
diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index 44060c1ff51..ea9cba6ffc9 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -203,6 +203,16 @@ public interface Exchange extends VariableAware {
@Metadata(label = "interceptFrom,interceptSendToEndpoint", description = "The endpoint URI that was intercepted",
javaType = "String")
String INTERCEPTED_ENDPOINT = "CamelInterceptedEndpoint";
+ @Metadata(label = "intercept,interceptFrom,interceptSendToEndpoint", description = "The intercepted route's node ID",
+ javaType = "String")
+ String INTERCEPTED_NODE_ID = "CamelInterceptedNodeId";
+ @Metadata(label = "intercept,interceptFrom,interceptSendToEndpoint",
+ description = "The parent's endpoint URI that was intercepted",
+ javaType = "String")
+ String INTERCEPTED_PARENT_ENDPOINT_URI = "CamelInterceptedParentEndpointUri";
+ @Metadata(label = "intercept,interceptFrom,interceptSendToEndpoint", description = "The intercepted route's ID",
+ javaType = "String")
+ String INTERCEPTED_ROUTE_ID = "CamelInterceptedRouteId";
String INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED = "CamelInterceptSendToEndpointWhenMatched";
@Deprecated(since = "3.1.0")
String INTERRUPTED = "CamelInterrupted";
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
index 182ea087eaf..695b4c47604 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java
@@ -57,6 +57,9 @@ public enum ExchangePropertyKey {
FILE_EXCHANGE_FILE(Exchange.FILE_EXCHANGE_FILE),
GROUPED_EXCHANGE(Exchange.GROUPED_EXCHANGE),
INTERCEPTED_ENDPOINT(Exchange.INTERCEPTED_ENDPOINT),
+ INTERCEPTED_NODE_ID(Exchange.INTERCEPTED_NODE_ID),
+ INTERCEPTED_PARENT_ENDPOINT_URI(Exchange.INTERCEPTED_PARENT_ENDPOINT_URI),
+ INTERCEPTED_ROUTE_ID(Exchange.INTERCEPTED_ROUTE_ID),
INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED(Exchange.INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED),
LOOP_INDEX(Exchange.LOOP_INDEX),
LOOP_SIZE(Exchange.LOOP_SIZE),
@@ -160,6 +163,12 @@ public enum ExchangePropertyKey {
return GROUPED_EXCHANGE;
case Exchange.INTERCEPTED_ENDPOINT:
return INTERCEPTED_ENDPOINT;
+ case Exchange.INTERCEPTED_NODE_ID:
+ return INTERCEPTED_NODE_ID;
+ case Exchange.INTERCEPTED_PARENT_ENDPOINT_URI:
+ return INTERCEPTED_PARENT_ENDPOINT_URI;
+ case Exchange.INTERCEPTED_ROUTE_ID:
+ return INTERCEPTED_ROUTE_ID;
case Exchange.INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED:
return INTERCEPT_SEND_TO_ENDPOINT_WHEN_MATCHED;
case Exchange.LOOP_INDEX:
diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/intercept.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/intercept.json
index d40e3711a15..796125e30d7 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/intercept.json
+++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/intercept.json
@@ -17,5 +17,10 @@
"disabled": { "index": 2, "kind": "attribute", "displayName": "Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime." },
"onWhen": { "index": 3, "kind": "element", "displayName": "On When", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.model.OnWhenDefinition", "deprecated": false, "autowired": false, "secret": false, "asPredicate": true, "description": "To use an expression to only trigger intercepting in specific situations" },
"outputs": { "index": 4, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
+ },
+ "exchangeProperties": {
+ "CamelInterceptedNodeId": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptFrom.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptFrom.json
index 3b4c57b949e..317d68daff6 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptFrom.json
+++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptFrom.json
@@ -20,6 +20,9 @@
"outputs": { "index": 5, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
},
"exchangeProperties": {
- "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" }
+ "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" },
+ "CamelInterceptedNodeId": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 3, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptSendToEndpoint.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptSendToEndpoint.json
index aa27dcb67a4..cb440512326 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptSendToEndpoint.json
+++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/interceptSendToEndpoint.json
@@ -22,6 +22,9 @@
"outputs": { "index": 7, "kind": "element", "displayName": "Outputs", "group": "common", "required": true, "type": "array", "javaType": "java.util.List", "oneOf": [ "aggregate", "bean", "choice", "circuitBreaker", "claimCheck", "convertBodyTo", "convertHeaderTo", "convertVariableTo", "delay", "doCatch", "doFinally", "doTry", "dynamicRouter", "enrich", "filter", "idempotentConsumer", "intercept", "interceptFrom", "interceptSendToEndpoint", "kamelet", "loadBalance", "log", "loop", "mar [...]
},
"exchangeProperties": {
- "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" }
+ "CamelInterceptedEndpoint": { "index": 0, "kind": "exchangeProperty", "displayName": "Intercepted Endpoint", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The endpoint URI that was intercepted" },
+ "CamelInterceptedNodeId": { "index": 1, "kind": "exchangeProperty", "displayName": "Intercepted Node Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's node ID" },
+ "CamelInterceptedParentEndpointUri": { "index": 2, "kind": "exchangeProperty", "displayName": "Intercepted Parent Endpoint Uri", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The parent's endpoint URI that was intercepted" },
+ "CamelInterceptedRouteId": { "index": 3, "kind": "exchangeProperty", "displayName": "Intercepted Route Id", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "autowired": false, "secret": false, "description": "The intercepted route's ID" }
}
}
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
index c4fe62d0e8e..26eb2882bf6 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
@@ -42,7 +42,11 @@ public class InterceptFromReifier extends ProcessorReifier<InterceptFromDefiniti
when = e -> true;
}
// set property before processing the child
+
Processor p = exchange -> {
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_ROUTE_ID, route.getId());
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI, route.getEndpoint().getEndpointUri());
+
if (exchange.getFromEndpoint() != null) {
exchange.setProperty(ExchangePropertyKey.INTERCEPTED_ENDPOINT, exchange.getFromEndpoint().getEndpointUri());
}
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptReifier.java
index ae57c7b39fc..96a0b4efbba 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptReifier.java
@@ -17,12 +17,14 @@
package org.apache.camel.reifier;
import org.apache.camel.CamelContext;
+import org.apache.camel.ExchangePropertyKey;
import org.apache.camel.NamedNode;
import org.apache.camel.Predicate;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.model.InterceptDefinition;
import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.processor.FilterProcessor;
import org.apache.camel.processor.Pipeline;
@@ -61,11 +63,20 @@ public class InterceptReifier extends ProcessorReifier<InterceptDefinition> {
// store the target we are intercepting
this.interceptedTarget = target;
+ Processor p = exchange -> {
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_ROUTE_ID,
+ ProcessorDefinitionHelper.getRouteId(definition.getParent()));
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_NODE_ID, definition.getId());
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI,
+ route.getEndpoint().getEndpointUri());
+ };
+
+ // wrap in a pipeline so we continue routing to the next
if (interceptedTarget != null) {
- // wrap in a pipeline so we continue routing to the next
- return Pipeline.newInstance(context, output, interceptedTarget);
+ return Pipeline.newInstance(context, p, output, interceptedTarget);
} else {
- return output;
+ return Pipeline.newInstance(context,
+ p, output);
}
}
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
index af55a688d37..fb900905d24 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
@@ -29,6 +29,7 @@ import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.ToDefinition;
import org.apache.camel.processor.InterceptSendToEndpointCallback;
+import org.apache.camel.processor.Pipeline;
import org.apache.camel.support.PluginHelper;
public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSendToEndpointDefinition> {
@@ -63,10 +64,20 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
when = new OnWhenPredicate(createPredicate(definition.getOnWhen().getExpression()));
}
+ Processor p = exchange -> {
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_ROUTE_ID, route.getId());
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_NODE_ID, definition.getId());
+ exchange.setProperty(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI, route.getEndpoint().getEndpointUri());
+ };
+
// register endpoint callback so we can proxy the endpoint
camelContext.getCamelContextExtension()
.registerEndpointCallback(
- new InterceptSendToEndpointCallback(camelContext, before, after, matchURI, skip, when));
+ new InterceptSendToEndpointCallback(
+ camelContext,
+ Pipeline.newInstance(camelContext, p, before),
+ after,
+ matchURI, skip, when));
// remove the original intercepted route from the outputs as we do not
// intercept as the regular interceptor
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/InterceptPropertiesTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/InterceptPropertiesTest.java
new file mode 100644
index 00000000000..d7d4d523817
--- /dev/null
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/InterceptPropertiesTest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.ExchangePropertyKey;
+import org.apache.camel.builder.RouteBuilder;
+import org.junit.jupiter.api.Test;
+
+public class InterceptPropertiesTest extends ContextTestSupport {
+
+ @Test
+ public void testInterceptProperties() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ intercept()
+ .to("mock:intercept");
+
+ from("direct:start")
+ .routeId("intercept-test")
+ .process(exchange -> {
+ })
+ .setBody(constant("Test"))
+ .to("log:body");
+ }
+ });
+
+ getMockEndpoint("mock:intercept").expectedMessageCount(3);
+ getMockEndpoint("mock:intercept")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_ROUTE_ID.getName(), "intercept-test");
+ getMockEndpoint("mock:intercept")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI.getName(), "direct://start");
+ // Node IDs are not always the same
+ // getMockEndpoint("mock:intercept")
+ // .expectedPropertyValuesReceivedInAnyOrder(ExchangePropertyKey.INTERCEPTED_NODE_ID.getName(), "to2", "process1",
+ // "setBody1");
+
+ template.sendBody("direct:start", "");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testInterceptFromProperties() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ interceptFrom("direct:startInterceptFrom")
+ .to("mock:interceptFrom");
+
+ from("direct:startInterceptFrom")
+ .routeId("intercept-from-test")
+ .setBody(constant("Test"))
+ .to("log:test");
+ }
+ });
+ getMockEndpoint("mock:interceptFrom").expectedMessageCount(1);
+ getMockEndpoint("mock:interceptFrom")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_ROUTE_ID.getName(), "intercept-from-test");
+ getMockEndpoint("mock:interceptFrom")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI.getName(),
+ "direct://startInterceptFrom");
+
+ template.sendBody("direct:startInterceptFrom", "");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testInterceptSendToEndpointProperties() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ interceptSendToEndpoint("log:body")
+ .to("mock:interceptSendToEndpoint");
+
+ from("direct:start")
+ .routeId("intercept-test")
+ .process(exchange -> {
+ })
+ .setBody(constant("Test"))
+ .to("log:body");
+ }
+ });
+ getMockEndpoint("mock:interceptSendToEndpoint").expectedMessageCount(1);
+ getMockEndpoint("mock:interceptSendToEndpoint")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_ROUTE_ID.getName(), "intercept-test");
+ getMockEndpoint("mock:interceptSendToEndpoint")
+ .expectedPropertyReceived(ExchangePropertyKey.INTERCEPTED_PARENT_ENDPOINT_URI.getName(), "direct://start");
+
+ template.sendBody("direct:start", "");
+
+ assertMockEndpointsSatisfied();
+ }
+
+}