This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.8.x by this push:
new 1b4c696cf72 CAMEL-21957: camel-core - Error handler should store
failure route id eager so onRedelivery/onExceptionOccurred processors have
access
1b4c696cf72 is described below
commit 1b4c696cf72262128f8d1c73f0e54925faaa9543
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Apr 11 18:12:59 2025 +0200
CAMEL-21957: camel-core - Error handler should store failure route id eager
so onRedelivery/onExceptionOccurred processors have access
---
.../onexception/OnExceptionOccurredProcessorTest.xml | 2 +-
.../camel/processor/errorhandler/RedeliveryErrorHandler.java | 12 ++++++++++++
.../camel/processor/DeadLetterChannelOnRedeliveryTest.java | 7 ++++++-
.../onexception/OnExceptionOccurredProcessorTest.java | 6 ++++--
4 files changed, 23 insertions(+), 4 deletions(-)
diff --git
a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorTest.xml
b/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorTest.xml
index 275d9b3a69b..45d7d63f2ca 100644
---
a/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorTest.xml
+++
b/components/camel-spring-xml/src/test/resources/org/apache/camel/spring/processor/onexception/OnExceptionOccurredProcessorTest.xml
@@ -36,7 +36,7 @@
<redeliveryPolicy maximumRedeliveries="3" redeliveryDelay="0"/>
</errorHandler>
- <route>
+ <route id="foo">
<from uri="direct:start"/>
<throwException ref="forced"/>
</route>
diff --git
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index 164958fb736..9887f21cc07 100644
---
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -502,6 +502,12 @@ public abstract class RedeliveryErrorHandler extends
ErrorHandlerSupport
// store the original caused exception in a property, so we can
restore it later
exchange.setProperty(ExchangePropertyKey.EXCEPTION_CAUGHT, e);
+
+ // store where the exception happened
+ Route rc = ExchangeHelper.getRoute(exchange);
+ if (rc != null) {
+ exchange.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID,
rc.getRouteId());
+ }
}
/**
@@ -1043,6 +1049,12 @@ public abstract class RedeliveryErrorHandler extends
ErrorHandlerSupport
}
redeliveryCounter = incrementRedeliveryCounter(exchange);
+
+ // store where the exception happened
+ Route rc = ExchangeHelper.getRoute(exchange);
+ if (rc != null) {
+ exchange.setProperty(ExchangePropertyKey.FAILURE_ROUTE_ID,
rc.getRouteId());
+ }
}
/**
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
index c593e4726d2..9fec14fd455 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
@@ -75,7 +75,7 @@ public class DeadLetterChannelOnRedeliveryTest extends
ContextTestSupport {
.redeliveryDelay(0L));
// END SNIPPET: e1
- from("direct:start").process(new Processor() {
+ from("direct:start").routeId("myRoute").process(new
Processor() {
public void process(Exchange exchange) {
// force some error so Camel will do redelivery
if (++counter <= 3) {
@@ -108,7 +108,12 @@ public class DeadLetterChannelOnRedeliveryTest extends
ContextTestSupport {
// the maximum redelivery was set to 5
int max =
exchange.getIn().getHeader(Exchange.REDELIVERY_MAX_COUNTER, Integer.class);
assertEquals(5, max);
+
+ // should be happening inside myRoute
+ String rid = exchange.getProperty(Exchange.FAILURE_ROUTE_ID,
String.class);
+ assertEquals("myRoute", rid);
}
+
}
// END SNIPPET: e2
diff --git
a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionOccurredProcessorTest.java
b/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionOccurredProcessorTest.java
index 4b195717220..6f798d948b3 100644
---
a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionOccurredProcessorTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionOccurredProcessorTest.java
@@ -57,9 +57,9 @@ public class OnExceptionOccurredProcessorTest extends
ContextTestSupport {
errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(3).redeliveryDelay(0)
.onExceptionOccurred(myProcessor));
- from("direct:start").to("log:a").to("direct:foo").to("log:b");
+
from("direct:start").routeId("start").to("log:a").to("direct:foo").to("log:b");
- from("direct:foo").throwException(new
IllegalArgumentException("Forced"));
+ from("direct:foo").routeId("foo").throwException(new
IllegalArgumentException("Forced"));
}
};
}
@@ -71,6 +71,8 @@ public class OnExceptionOccurredProcessorTest extends
ContextTestSupport {
@Override
public void process(Exchange exchange) {
invoked++;
+ String rid = exchange.getProperty(Exchange.FAILURE_ROUTE_ID,
String.class);
+ assertEquals("foo", rid);
}
public int getInvoked() {