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 2017/04/26 13:23:25 UTC

camel git commit: CAMEL-11024: camel-catalog - asEndpointUri to support connectors/component with no context-path part

Repository: camel
Updated Branches:
  refs/heads/master 367d8c68f -> a978d4750


CAMEL-11024: camel-catalog - asEndpointUri to support connectors/component with no context-path part


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/a978d475
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/a978d475
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/a978d475

Branch: refs/heads/master
Commit: a978d47500bd2ae6738678f0ba04074786b37ec9
Parents: 367d8c6
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Apr 26 15:23:11 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Apr 26 15:23:11 2017 +0200

----------------------------------------------------------------------
 .../runtimecatalog/AbstractCamelCatalog.java    | 51 +++++++++++-------
 .../AbstractCamelCatalogTest.java               | 54 ++++++++++++++++++++
 .../camel/catalog/AbstractCamelCatalog.java     | 51 +++++++++++-------
 3 files changed, 120 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/a978d475/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java b/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
index 0420708..3cda9d6 100644
--- a/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
+++ b/camel-core/src/main/java/org/apache/camel/runtimecatalog/AbstractCamelCatalog.java
@@ -919,12 +919,14 @@ public abstract class AbstractCamelCatalog {
 
         // build endpoint uri
         StringBuilder sb = new StringBuilder();
-        sb.append(scheme);
-        sb.append(":");
+        // add scheme later as we need to take care if there is any context-path or query parameters which
+        // affect how the URI should be constructed
 
         if (hasAllKeys) {
             // we have all the keys for the syntax so we can build the uri the easy way
-            sb.append(syntax);
+            if (syntax != null) {
+                sb.append(syntax);
+            }
 
             if (!copy.isEmpty()) {
                 boolean hasQuestionmark = sb.toString().contains("?");
@@ -1020,7 +1022,18 @@ public abstract class AbstractCamelCatalog {
             }
         }
 
-        return sb.toString();
+        String remainder = sb.toString();
+        boolean queryOnly = remainder.startsWith("?");
+        if (queryOnly) {
+            // it has only query parameters
+            return scheme + remainder;
+        } else if (!remainder.isEmpty()) {
+            // it has context path and possible query parameters
+            return scheme + ":" + remainder;
+        } else {
+            // its empty without anything
+            return scheme;
+        }
     }
 
     @Deprecated
@@ -1055,22 +1068,24 @@ public abstract class AbstractCamelCatalog {
         // build tokens between the separators
         List<String> tokens = new ArrayList<>();
 
-        String current = "";
-        for (int i = 0; i < syntax.length(); i++) {
-            char ch = syntax.charAt(i);
-            if (Character.isLetterOrDigit(ch)) {
-                current += ch;
-            } else {
-                // reset for new current tokens
-                if (current.length() > 0) {
-                    tokens.add(current);
-                    current = "";
+        if (syntax != null) {
+            String current = "";
+            for (int i = 0; i < syntax.length(); i++) {
+                char ch = syntax.charAt(i);
+                if (Character.isLetterOrDigit(ch)) {
+                    current += ch;
+                } else {
+                    // reset for new current tokens
+                    if (current.length() > 0) {
+                        tokens.add(current);
+                        current = "";
+                    }
                 }
             }
-        }
-        // anything left over?
-        if (current.length() > 0) {
-            tokens.add(current);
+            // anything left over?
+            if (current.length() > 0) {
+                tokens.add(current);
+            }
         }
 
         return tokens.toArray(new String[tokens.size()]);

http://git-wip-us.apache.org/repos/asf/camel/blob/a978d475/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java b/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
index 309fb8e..895fdeb 100644
--- a/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
+++ b/camel-core/src/test/java/org/apache/camel/runtimecatalog/AbstractCamelCatalogTest.java
@@ -101,4 +101,58 @@ public class AbstractCamelCatalogTest {
 
         assertEquals("comp:{value1}:/value2/?param3=/value3/{param}", endpointUri);
     }
+
+    @Test
+    public void shouldContextPathAndQuery() throws URISyntaxException {
+        expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+            + "  \"component\": {\n"//
+            + "    \"syntax\": \"comp:value1\"\n"//
+            + "  }\n"//
+            + "}");
+
+        replay(resolver);
+
+        final Map<String, String> properties = new HashMap<>();
+        properties.put("value1", "camel");
+        properties.put("foo", "123");
+
+        final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+        assertEquals("comp:camel?foo=123", endpointUri);
+    }
+
+    @Test
+    public void shouldEmptyContextPath() throws URISyntaxException {
+        expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+            + "  \"component\": {\n"//
+            + "    \"syntax\": \"comp\"\n"//
+            + "  }\n"//
+            + "}");
+
+        replay(resolver);
+
+        final Map<String, String> properties = new HashMap<>();
+
+        final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+        assertEquals("comp", endpointUri);
+    }
+
+    @Test
+    public void shouldEmptyContextPathWithQuery() throws URISyntaxException {
+        expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+            + "  \"component\": {\n"//
+            + "    \"syntax\": \"comp\"\n"//
+            + "  }\n"//
+            + "}");
+
+        replay(resolver);
+
+        final Map<String, String> properties = new HashMap<>();
+        properties.put("foo", "123");
+
+        final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+        assertEquals("comp?foo=123", endpointUri);
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/a978d475/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 6511eff..b285d3a 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -919,12 +919,14 @@ public abstract class AbstractCamelCatalog {
 
         // build endpoint uri
         StringBuilder sb = new StringBuilder();
-        sb.append(scheme);
-        sb.append(":");
+        // add scheme later as we need to take care if there is any context-path or query parameters which
+        // affect how the URI should be constructed
 
         if (hasAllKeys) {
             // we have all the keys for the syntax so we can build the uri the easy way
-            sb.append(syntax);
+            if (syntax != null) {
+                sb.append(syntax);
+            }
 
             if (!copy.isEmpty()) {
                 boolean hasQuestionmark = sb.toString().contains("?");
@@ -1020,7 +1022,18 @@ public abstract class AbstractCamelCatalog {
             }
         }
 
-        return sb.toString();
+        String remainder = sb.toString();
+        boolean queryOnly = remainder.startsWith("?");
+        if (queryOnly) {
+            // it has only query parameters
+            return scheme + remainder;
+        } else if (!remainder.isEmpty()) {
+            // it has context path and possible query parameters
+            return scheme + ":" + remainder;
+        } else {
+            // its empty without anything
+            return scheme;
+        }
     }
 
     @Deprecated
@@ -1055,22 +1068,24 @@ public abstract class AbstractCamelCatalog {
         // build tokens between the separators
         List<String> tokens = new ArrayList<>();
 
-        String current = "";
-        for (int i = 0; i < syntax.length(); i++) {
-            char ch = syntax.charAt(i);
-            if (Character.isLetterOrDigit(ch)) {
-                current += ch;
-            } else {
-                // reset for new current tokens
-                if (current.length() > 0) {
-                    tokens.add(current);
-                    current = "";
+        if (syntax != null) {
+            String current = "";
+            for (int i = 0; i < syntax.length(); i++) {
+                char ch = syntax.charAt(i);
+                if (Character.isLetterOrDigit(ch)) {
+                    current += ch;
+                } else {
+                    // reset for new current tokens
+                    if (current.length() > 0) {
+                        tokens.add(current);
+                        current = "";
+                    }
                 }
             }
-        }
-        // anything left over?
-        if (current.length() > 0) {
-            tokens.add(current);
+            // anything left over?
+            if (current.length() > 0) {
+                tokens.add(current);
+            }
         }
 
         return tokens.toArray(new String[tokens.size()]);