This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/CAMEL-23594 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 288fd8fc65a296f8169b3181bde7165603cc37c3 Author: Claus Ibsen <[email protected]> AuthorDate: Mon Jun 22 10:03:53 2026 +0200 CAMEL-23594: fix kamelet properties being URL-encoded in YAML DSL The YAML DSL was URL-encoding kamelet parameters via URISupport.createQueryString() (encode=true by default), but KameletComponent uses useRawUri()=true so the encoding was never reversed. This caused values like application/json to arrive as application%2Fjson in kamelet templates. Skip encoding for kamelet URIs, matching what KameletDeserializer and YamlSupport already do with createQueryString(params, false). Co-Authored-By: Claude <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../camel/dsl/yaml/YamlRoutesBuilderLoader.java | 3 ++- .../org/apache/camel/dsl/yaml/KameletTest.groovy | 31 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java index 16862746b179..feab814755ab 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java @@ -603,7 +603,8 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { } if (params != null && !params.isEmpty()) { - String query = URISupport.createQueryString(params); + // kamelet uses useRawUri so parameters should not be encoded + String query = URISupport.createQueryString(params, !kamelet); // CAMEL-23284: restore property placeholders that were URL-encoded query = query.replace("%7B%7B", "{{").replace("%7D%7D", "}}"); uri = uri + "?" + query; diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy index b9ef38fcb29a..05b913beeebc 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy @@ -390,4 +390,35 @@ class KameletTest extends YamlTestSupport { then: MockEndpoint.assertIsSatisfied(context) } + + def "kamelet (properties not url encoded)"() { + setup: + addTemplate('setPayloadWithType') { + from('kamelet:source') + .setBody().simple('{{contentType}}') + .to("kamelet:sink") + } + + loadRoutes ''' + - from: + uri: "direct:start" + steps: + - kamelet: + name: "setPayloadWithType" + parameters: + contentType: "application/json" + - to: "mock:result" + ''' + + withMock('mock:result') { + expectedMessageCount 1 + expectedBodiesReceived 'application/json' + } + when: + withTemplate { + to('direct:start').withBody('hello').send() + } + then: + MockEndpoint.assertIsSatisfied(context) + } }
