Claus Ibsen created CAMEL-26594:
-----------------------------------
Summary: camel-yaml-dsl - a value under parameters: is cut at an &
when the endpoint uri is created
Key: CAMEL-26594
URL: https://issues.apache.org/jira/browse/CAMEL-26594
Project: Camel
Issue Type: Bug
Components: camel-yaml-dsl
Reporter: Claus Ibsen
Fix For: 4.24.0
In the YAML DSL, the parameters: of an endpoint are a map, so a value should be
taken as it is written. YamlSupport.createEndpointUri adds them to the uri
without encoding them: URISupport.createQueryString(..., false), or
EndpointUriFactory.buildUri(..., false) when the uri is only the scheme. Only
secret options are kept whole, because they are put in RAW(...).
So a value with an & is cut at the &, and the rest becomes another option:
{code:yaml}
- route:
from:
uri: file:inbox
parameters:
filterFile: "${file:name} contains 'R&D'"
{code}
This gives file:inbox?filterFile=${file:name} contains 'R&D', and the route
fails to start: "Error binding property (filterFile=${file:name} contains 'R)
... expected symbol singleQuote but was eol". With && in a predicate the error
is "Unknown parameters=[{ ${file:name} contains 'R'=}]". A lenient component
takes the cut value with no error: vertx-http basicAuthUsername: "u&v" gives
the username u.
Values are also decoded: fileName: "a+b%20c.txt" becomes "a b c.txt".
The workaround is to write the value in RAW(...): filterFile: "RAW(${file:name}
contains 'R&D')" works.
Proposal: keep the values of parameters: whole when the uri is created, for
example by putting a value that has an &, + or % in RAW(...), as is done for
secret options. Property placeholders and bean references (#name) must keep
working.
Found with the AI tools of the Camel CLI: the check of a YAML route now reports
such a value and suggests RAW(...) (CAMEL-26591).
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)