This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 53b399d885e94763d7b1b41f93a38bdaaa47f79f
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jul 10 19:40:40 2026 +0200

    chore: fix bind command arity, template substitution, and object reference 
bugs
    
    - Remove arity="0" from --property option so picocli accepts 
space-separated values
    - Replace replaceFirst with String.replace in Bind, UriBindingProvider and
      ObjectReferenceBindingProvider to avoid regex replacement issues with $ 
and \ in values
    - Fix ObjectReferenceBindingProvider regex: [alphbetv0-9] typo to [a-z0-9],
      and [A-Z][a-z]+ to [A-Z][a-zA-Z]+ to match multi-word kinds like ConfigMap
    - Fix getEndpointUriProperties to merge query params with endpointProperties
      using putAll instead of replacing the map
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../camel/dsl/jbang/core/commands/bind/Bind.java      | 19 +++++++++----------
 .../commands/bind/ObjectReferenceBindingProvider.java | 14 +++++++-------
 .../jbang/core/commands/bind/UriBindingProvider.java  |  4 ++--
 3 files changed, 18 insertions(+), 19 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/Bind.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/Bind.java
index 7d13475ef143..33ada9981261 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/Bind.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/Bind.java
@@ -75,8 +75,7 @@ public class Bind extends CamelCommand {
     String errorHandler;
 
     @CommandLine.Option(names = { "--property" },
-                        description = "Adds a pipe property in the form of 
[source|sink|error-handler|step-<n>].<key>=<value> where <n> is the step number 
starting from 1",
-                        arity = "0")
+                        description = "Adds a pipe property in the form of 
[source|sink|error-handler|step-<n>].<key>=<value> where <n> is the step number 
starting from 1")
     String[] properties;
 
     @CommandLine.Option(names = { "--output" },
@@ -175,15 +174,15 @@ public class Bind extends CamelCommand {
                         is = templateProvider.getErrorHandlerTemplate("sink");
                         errorHandlerSpec = IOHelper.loadText(is);
                         IOHelper.close(is);
-                        errorHandlerSpec = 
errorHandlerSpec.replaceFirst("\\{\\{ \\.Endpoint }}", endpoint);
-                        errorHandlerSpec = 
errorHandlerSpec.replaceFirst("\\{\\{ \\.ErrorHandlerParameter }}",
+                        errorHandlerSpec = errorHandlerSpec.replace("{{ 
.Endpoint }}", endpoint);
+                        errorHandlerSpec = errorHandlerSpec.replace("{{ 
.ErrorHandlerParameter }}",
                                 
templateProvider.asErrorHandlerParameters(errorHandlerParameters));
                         break;
                     case "log":
                         is = templateProvider.getErrorHandlerTemplate("log");
                         errorHandlerSpec = IOHelper.loadText(is);
                         IOHelper.close(is);
-                        errorHandlerSpec = 
errorHandlerSpec.replaceFirst("\\{\\{ \\.ErrorHandlerParameter }}",
+                        errorHandlerSpec = errorHandlerSpec.replace("{{ 
.ErrorHandlerParameter }}",
                                 
templateProvider.asErrorHandlerParameters(errorHandlerParameters));
                         break;
                     default:
@@ -194,11 +193,11 @@ public class Bind extends CamelCommand {
             }
 
             String name = FileUtil.onlyName(file, false);
-            context = context.replaceFirst("\\{\\{ \\.Name }}", name);
-            context = context.replaceFirst("\\{\\{ \\.Source }}\n", 
sourceEndpoint);
-            context = context.replaceFirst("\\{\\{ \\.Sink }}\n", 
sinkEndpoint);
-            context = context.replaceFirst("\\{\\{ \\.Steps }}", stepsContext);
-            context = context.replaceFirst("\\{\\{ \\.ErrorHandler }}", 
errorHandlerContext);
+            context = context.replace("{{ .Name }}", name);
+            context = context.replace("{{ .Source }}\n", sourceEndpoint);
+            context = context.replace("{{ .Sink }}\n", sinkEndpoint);
+            context = context.replace("{{ .Steps }}", stepsContext);
+            context = context.replace("{{ .ErrorHandler }}", 
errorHandlerContext);
             return context;
         } catch (Exception e) {
             printer().printErr(e);
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/ObjectReferenceBindingProvider.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/ObjectReferenceBindingProvider.java
index b46259df8b35..6ee4e24dcdbf 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/ObjectReferenceBindingProvider.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/ObjectReferenceBindingProvider.java
@@ -40,7 +40,7 @@ import org.apache.camel.util.URISupport;
 public class ObjectReferenceBindingProvider implements BindingProvider {
 
     private static final Pattern OBJECT_REFERENCE_URI_PATTERN
-            = 
Pattern.compile("^([a-z.]+/[alphbetv0-9]+):([A-Z][a-z]+):([a-z][a-z-]*/?[a-z][a-z-]*)\\??[^?]*",
 Pattern.DOTALL);
+            = 
Pattern.compile("^([a-z.]+/[a-z0-9]+):([A-Z][a-zA-Z]+):([a-z][a-z-]*/?[a-z][a-z-]*)\\??[^?]*",
 Pattern.DOTALL);
 
     private final String apiVersion;
     private final String kind;
@@ -105,11 +105,11 @@ public class ObjectReferenceBindingProvider implements 
BindingProvider {
             namespaceContext = "      namespace: " + namespace + "\n";
         }
 
-        context = context.replaceFirst("\\{\\{ \\.ApiVersion }}", 
apiVersionValue);
-        context = context.replaceFirst("\\{\\{ \\.Kind }}", kindValue);
-        context = context.replaceFirst("\\{\\{ \\.Name }}", objectName);
-        context = context.replaceFirst("\\{\\{ \\.Namespace }}\n", 
namespaceContext);
-        context = context.replaceFirst("\\{\\{ \\.EndpointProperties }}\n",
+        context = context.replace("{{ .ApiVersion }}", apiVersionValue);
+        context = context.replace("{{ .Kind }}", kindValue);
+        context = context.replace("{{ .Name }}", objectName);
+        context = context.replace("{{ .Namespace }}\n", namespaceContext);
+        context = context.replace("{{ .EndpointProperties }}\n",
                 templateProvider.asEndpointProperties(endpointUriProperties));
 
         return context;
@@ -148,7 +148,7 @@ public class ObjectReferenceBindingProvider implements 
BindingProvider {
         if (uriExpression.contains("?")) {
             String query = StringHelper.after(uriExpression, "?");
             if (query != null) {
-                endpointUriProperties = URISupport.parseQuery(query, true);
+                endpointUriProperties.putAll(URISupport.parseQuery(query, 
true));
             }
         }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/UriBindingProvider.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/UriBindingProvider.java
index 39babfa3b95f..220fdf828536 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/UriBindingProvider.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/bind/UriBindingProvider.java
@@ -57,8 +57,8 @@ public class UriBindingProvider implements BindingProvider {
         String context = IOHelper.loadText(is);
         IOHelper.close(is);
 
-        context = context.replaceFirst("\\{\\{ \\.URI }}", endpointUri);
-        context = context.replaceFirst("\\{\\{ \\.EndpointProperties }}\n",
+        context = context.replace("{{ .URI }}", endpointUri);
+        context = context.replace("{{ .EndpointProperties }}\n",
                 templateProvider.asEndpointProperties(endpointProperties));
 
         return context;

Reply via email to