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)

Reply via email to