You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2026/07/10 17:50:58 UTC
(camel) 02/02: chore: fix bind command arity, template substitution, and object reference bugs
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 <cl...@gmail.com>
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 <no...@anthropic.com>
Signed-off-by: Claus Ibsen <cl...@gmail.com>
---
.../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;