[ 
https://issues.apache.org/jira/browse/CAMEL-24692?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-24692 started by Claus Ibsen.
-------------------------------------------
> camel-catalog: validateLanguagePredicate/Expression for simple rejects 
> property placeholders used as operands
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24692
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24692
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-catalog
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.23.0
>
>
> h3. Problem
> {{AbstractCamelCatalog.doValidateSimple}} substitutes {{{{X}}}} with 
> {{~^X^~}} before handing the text to the Simple parser, so placeholders can 
> be parsed without a running CamelContext. That works when the placeholder 
> sits inside {{${...}}}, but when a placeholder is a bare operand of a binary 
> operator, or the whole expression, the parser sees the {{~^}} token and 
> fails. The runtime resolves property placeholders before parsing Simple, so 
> the same expressions load and run in a route. The validator therefore rejects 
> valid routes.
> h3. Reproducer
> camel-catalog 4.23.0-SNAPSHOT, {{CamelCatalog.validateLanguagePredicate(null, 
> "simple", text)}}:
> {code}
> ERROR ${body} >= {{hot.threshold}}          -> Binary operator >= does not 
> support token ^ at location 12
> OK    ${body} >= 30
> OK    ${body} >= ${properties:hot.threshold}
> ERROR ${header.level} == {{level}}          -> Binary operator == does not 
> support token ^ at location 20
> ERROR {{hot.threshold}}                     -> Unexpected token ~ at location > 0
> {code}
> A YAML route with {{when: simple: "${body} >= {{hot.threshold}}"}} and 
> {{hot.threshold=30}} in application.properties starts with {{camel run}} and 
> routes correctly.
> h3. Impact
> The Camel TUI save-time validation ({{SourceEditAssist}}) and the 
> {{tui_write_file}} / {{tui_validate_source}} MCP tools call this method and 
> refuse to write a correct file. An AI assistant editing a route was blocked 
> four times on a correct edit.
> h3. Code
> {{core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java}},
>  {{doValidateSimple}}; the {{replaceAll}} to {{~^$1^~}} dates from 
> CAMEL-10959 (2017). The same substitution exists in {{doValidateGroovy}}.
> h3. Suggested fix
> Substitute placeholders with a token the Simple parser accepts as a literal 
> operand (a quoted dummy such as {{'placeholder'}}, or a numeric literal when 
> the operator is numeric), or drop binary-operator operands that are pure 
> placeholders before parsing, and map error positions back.
> Found 2026-09-11 while benchmarking AI-assisted editing in the Camel TUI.



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

Reply via email to