Claus Ibsen created CAMEL-24983:
-----------------------------------

             Summary: camel-core: simple - say what to write when ! is used to 
negate a function
                 Key: CAMEL-24983
                 URL: https://issues.apache.org/jira/browse/CAMEL-24983
             Project: Camel
          Issue Type: Improvement
          Components: camel-core
            Reporter: Claus Ibsen


Simple has no boolean {{!}} prefix, so a negated function fails with a message 
that points at the operator rather than at the {{!}}:

{noformat}
${body != null && !${body.isEmpty()}}
-> Logical operator && needs a predicate on the right hand side, e.g. 
${header.foo} == 'bar'; was: !${body.isEmpty()}
{noformat}

The same is true without the inner {{${ }}}: {{${body != null && 
!body.isEmpty()}}} fails the same way. The nesting is not the problem - 
{{${body != null && ${body.isEmpty()}}}} evaluates fine - the {{!}} is.

The message now says the comparison to write instead:

{noformat}
! does not negate a function: compare it instead, so !${body.isEmpty()} is 
written as ${body.isEmpty()} == false, or negate the operator (!=, !contains)
{noformat}

Both {{${body.isEmpty()} == false}} and {{body.isEmpty() == false}} were 
verified to evaluate correctly.

h3. Where it comes from

The local-model benchmark: over 1586 route files a model wrote, the 
{{!}}-negated form appears in three separate series, alongside two other shapes 
of the same instinct ({{${body != null && ${body.size()} > 0}}}, which works, 
and {{${simple:${exchangeProperty.orderId}}}}, which reports an unknown 
function). A person writing Java or JavaScript makes the same mistake.

Note this message should be revisited if simple gains support for {{!}} as a 
negation prefix.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to