Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Not A Problem
-
2.9.1
-
None
-
Unknown
Description
The bug was checked against 2.9.1 version of Camel.
The simple language expressions are not calculated properly within onException clause.
The route below only works as expected because I copy the the exchange and remove information about the exception. If the original exchange with exception information is used with simple language then the exception will be rethrown during (at the end?) the calculation of simple expression.
If I copy the exchange and remove the exception information then the unit tests are passing nicely and the file with proper content is created, so simple language expression can be calculated properly for the object being routed.
from("direct:toPropertyFileAvoidFixingUnfixable") .onException(NullPointerException.class) .onRedelivery(new NullRegistrationDateProcessor()) .handled(true) .retryWhile(new Predicate() { public boolean matches(Exchange exchange) { Predicate composite = PredicateBuilder.and(PredicateBuilder.isNull(simple("${body?.getRegistrationDate}")), PredicateBuilder.isNotNull(simple("${body?.getBirthdate}"))); // Exchange with exception will make computation of simple predicate fail. Exchange local = exchange.copy(); local.setException(null); boolean result = composite.matches(local); return result; } }) .end() .setHeader(Exchange.FILE_NAME, simple("${body.firstname}.${body.surname}")) .bean(RegistrationToPropertiesBean.class, "convert") .to("file://" + outFolder);
It is related to the issue https://issues.apache.org/jira/browse/CAMEL-4513. My guess is that the problem is present for many other places where simple language can be used within onException part of the route definition. Not just retryWhile and custom predicate used within retryWhile.
Attachments
Issue Links
- is a clone of
-
CAMEL-4513 simple predicate fails to introspect the exception in an onException clause using onWhen
- Resolved
- is related to
-
CAMEL-4513 simple predicate fails to introspect the exception in an onException clause using onWhen
- Resolved