[ 
https://issues.apache.org/jira/browse/CAMEL-24703?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18114676#comment-18114676
 ] 

Claus Ibsen commented on CAMEL-24703:
-------------------------------------

Fourth commit (5568883d): "Unknown file language syntax: 
src/main/resources/input.xml" now says that the file: functions describe the 
file being consumed (${file:name}, ${file:size}, ...), that they do not read a 
file, and that reading a file into the body is the poll EIP with a file: 
endpoint. A model tried exactly that in run 5.

> camel-core-languages - simple: error messages should say what to write (audit 
> against typical mistakes)
> -------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24703
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24703
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-core
>            Reporter: Claus Ibsen
>            Priority: Major
>
> Every error message the Simple parser can produce was listed (about 60 throw 
> sites in core/camel-core-languages) and checked against 50 expressions a 
> local model typically writes in the AI authoring benchmark (2026-09-12). A 
> model recovers from a message that says what to write and loops on one that 
> only says what was wrong. The rendered form (message, "at location N", the 
> expression and the * marker) is good; the texts should name the fix. The main 
> cases:
> || model writes || today || proposed ||
> | body == 'Hello World' | Unexpected token b at location 0 | Unexpected token 
> 'b': text outside ${...} is a literal, functions are written as ${body}, 
> ${header.name}. Did you mean ${body} == 'Hello World'? |
> | ${body == 'x'} | Valid syntax: ${body.OGNL} was: body == 'x' | Operators go 
> outside the function: ${body} == 'x' |
> | ${body} == x | Binary operator == does not support token null | Binary 
> operator == needs a value on the right hand side: a quoted literal 'x', a 
> number, true, false, null, or a function ${...}; was: x (never print "token 
> null") |
> | ${body} = 'x' | Unexpected token = | Unknown operator '=': did you mean 
> '=='? Operators: ==, =~, !=, <, <=, >, >=, contains, !contains, ~~, regex, 
> in, !in, is, !is, range, !range, startsWith, endsWith |
> | ${body} == 'x' and ${header.y} == 1 | Unexpected token a | Unknown operator 
> 'and': use && for and, \|\| for or |
> | ${body} == 'x' \|\| | Logical operator \|\| does not support token null | 
> Logical operator \|\| needs a predicate on the right hand side |
> | ${body} == 'it''s' | expected symbol whiteSpace but was singleQuote | A 
> literal that contains a single quote must use double quotes: "it's" |
> | ${header.foo | expected symbol functionEnd but was eol | Missing } to close 
> ${header.foo |
> | ${padding(3)} | Unknown function: padding(3) | Unknown function 'padding': 
> did you mean pad(3)? (closest known name; the functions are listed on the 
> simple language functions page) |
> | ${upper(${body})} | Unknown function: upper(${body}) | as above, plus: a 
> nested ${...} inside a function argument is not supported |
> | ${property.foo} | Unknown function: property.foo | Unknown function 
> 'property': it is exchangeProperty.foo since Camel 3 (alias table for the 
> Camel 2 names) |
> | ${ body }, ${Body} | Unknown function:  body  / Body | remove the spaces / 
> functions are lower camel case: ${body} |
> | ${jsonpath($.name)} without the jar | No language could be found for: 
> jsonpath | add camel-jsonpath to the classpath 
> (org.apache.camel:camel-jsonpath) |
> | ${body.length() > 3} | runtime: Failed to invoke method: length() > 3 on 
> null due to: Method should end with parenthesis | Operators go outside the 
> function: ${body.length()} > 3 |
> | ${body.lenght()} | runtime: Failed to invoke method: lenght() on null due 
> to: MethodNotFoundException ... on bean: hello | drop the wrong "on null"; 
> Method lenght() not found on java.lang.String; did you mean length()? |
> | ${body.toUpperCase} | runtime: Failed to invoke method: toUpperCase on null 
> due to: CamelExecutionException: Exception occurred during execution | No 
> method or property toUpperCase on java.lang.String; a method call needs (): 
> ${body.toUpperCase()} |
> Accepted silently but not what was meant, where the eval tool and validator 
> can add a note: ${header.count} + 1 (Simple has no arithmetic, the + 1 is 
> text), ${body} ? 'a' : 'b' (no ? : operator; the elvis operator is ?: and a 
> conditional is iif(...)).
> Implementation notes: the parse time messages come from SimpleParserException 
> in BaseSimpleParser, SimplePredicateParser, SimpleExpressionParser, the ast 
> nodes and the function factories; "token null" has one origin per parser 
> (does not support token / has no left or right hand side token); the known 
> function names for suggestions are the BUILT_INS and EXPRESSION_ENTRIES in 
> SimpleFunctionDispatcher plus the fixed set; the catalog validator, camel 
> validate yaml, the TUI and the MCP tools all print these messages, so every 
> consumer benefits. The full audit with the probe program (SimpleProbe.java, 
> 50 cases) is kept with the benchmark material.



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

Reply via email to