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 2022/12/22 11:12:57 UTC

[camel] 01/01: CAMEL-18834: camel-core - StringQuoteHelper should remove quotes for single element

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

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

commit 9b5248c0a5d7610e35298e24c7799ab6f8e97ce4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Dec 22 12:12:38 2022 +0100

    CAMEL-18834: camel-core - StringQuoteHelper should remove quotes for single element
---
 .../apache/camel/util/StingQuoteHelperTest.java    | 34 ++++++++++++++++++++++
 .../camel/support/PropertyBindingSupport.java      |  4 +--
 .../org/apache/camel/util/StringQuoteHelper.java   | 12 +++++++-
 3 files changed, 47 insertions(+), 3 deletions(-)

diff --git a/core/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
index 0dd066b7f03..1f5126a292a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/StingQuoteHelperTest.java
@@ -124,6 +124,40 @@ public class StingQuoteHelperTest {
         assertEquals("*", out[0]);
         assertEquals("", out[1]);
         assertEquals("arg3", out[2]);
+
+        out = StringQuoteHelper.splitSafeQuote("'Hello'", ',', true);
+        assertEquals(1, out.length);
+        assertEquals("Hello", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("' Hello '", ',', true);
+        assertEquals(1, out.length);
+        assertEquals("Hello", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("' Hello '", ',', false);
+        assertEquals(1, out.length);
+        assertEquals(" Hello ", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("'Hello', 'World'", ',', true);
+        assertEquals(2, out.length);
+        assertEquals("Hello", out[0]);
+        assertEquals("World", out[1]);
+
+        out = StringQuoteHelper.splitSafeQuote("\"Hello\"", ',', true);
+        assertEquals(1, out.length);
+        assertEquals("Hello", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("\" Hello \"", ',', true);
+        assertEquals(1, out.length);
+        assertEquals("Hello", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("\" Hello \"", ',', false);
+        assertEquals(1, out.length);
+        assertEquals(" Hello ", out[0]);
+
+        out = StringQuoteHelper.splitSafeQuote("\"Hello\", \"World\"", ',', true);
+        assertEquals(2, out.length);
+        assertEquals("Hello", out[0]);
+        assertEquals("World", out[1]);
     }
 
     @Test
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index a868dc68587..6ce1abb5b92 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -1232,7 +1232,7 @@ public final class PropertyBindingSupport {
      */
     public static Object newInstanceConstructorParameters(CamelContext camelContext, Class<?> type, String parameters)
             throws Exception {
-        String[] params = StringQuoteHelper.splitSafeQuote(parameters, ',');
+        String[] params = StringQuoteHelper.splitSafeQuote(parameters, ',', false);
         Constructor found = findMatchingConstructor(type.getConstructors(), params);
         if (found != null) {
             Object[] arr = new Object[found.getParameterCount()];
@@ -1330,7 +1330,7 @@ public final class PropertyBindingSupport {
     public static Object newInstanceFactoryParameters(
             CamelContext camelContext, Class<?> type, String factoryMethod, String parameters)
             throws Exception {
-        String[] params = StringQuoteHelper.splitSafeQuote(parameters, ',');
+        String[] params = StringQuoteHelper.splitSafeQuote(parameters, ',', false);
         Method found = findMatchingFactoryMethod(type.getMethods(), factoryMethod, params);
         if (found != null) {
             Object[] arr = new Object[found.getParameterCount()];
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/StringQuoteHelper.java b/core/camel-util/src/main/java/org/apache/camel/util/StringQuoteHelper.java
index 414cb95c691..8d6c4d15a0c 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/StringQuoteHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/StringQuoteHelper.java
@@ -37,7 +37,8 @@ public final class StringQuoteHelper {
     /**
      * Returns the text wrapped single quotes
      */
-    public static String singleQuote(String text) {
+    public static String
+    singleQuote(String text) {
         return quote(text, "'");
     }
 
@@ -86,6 +87,15 @@ public final class StringQuoteHelper {
         }
 
         if (input.indexOf(separator) == -1) {
+            if (input.length() > 1) {
+                char ch = input.charAt(0);
+                char ch2 = input.charAt(input.length() - 1);
+                boolean singleQuoted = ch == '\'' && ch2 == '\'';
+                boolean doubleQuoted = ch == '"' && ch2 == '"';
+                if (singleQuoted || doubleQuoted) {
+                    input = input.substring(1, input.length() - 1);
+                }
+            }
             // no separator in data, so return single string with input as is
             return new String[] { trim ? input.trim() : input };
         }