Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-5156

simple language is not working in onException policy (for example retryWhile clause).

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Not A Problem
    • 2.9.1
    • 2.10.0
    • camel-core
    • 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

          Activity

            People

              davsclaus Claus Ibsen
              radsz Radoslaw Szymanek
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: