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 2020/09/25 18:45:07 UTC

[camel] 10/16: CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP

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

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

commit 98425c18b3b2a112319879dfe4bf0ee21bb61db0
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 25 13:18:29 2020 +0200

    CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP
---
 .../catalog/CustomEndpointUriAssemblerTest.java    | 67 +++++++++++++++++++++-
 .../component/EndpointUriAssemblerSupport.java     |  4 +-
 2 files changed, 65 insertions(+), 6 deletions(-)

diff --git a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
index 4dbdb16..d0bb0ff 100644
--- a/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/catalog/CustomEndpointUriAssemblerTest.java
@@ -102,7 +102,7 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("amount", "123");
 
         String uri = assembler.buildUri(context, "acme", params);
-        Assertions.assertEquals("acme:bar:8080?amount=123&verbose=false", uri);
+        Assertions.assertEquals("acme:bar?amount=123&verbose=false", uri);
     }
 
     @Test
@@ -116,7 +116,7 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("amount", "123");
 
         String uri = assembler.buildUri(context, "acme2", params);
-        Assertions.assertEquals("acme2:bar/moes:8080?amount=123&verbose=true", uri);
+        Assertions.assertEquals("acme2:bar/moes?amount=123&verbose=true", uri);
     }
 
     @Test
@@ -158,7 +158,45 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
         params.put("amount", "123");
 
         String uri = assembler.buildUri(context, "acme2", params);
-        Assertions.assertEquals("acme2:bar:8080?amount=123&verbose=true", uri);
+        Assertions.assertEquals("acme2:bar?amount=123&verbose=true", uri);
+    }
+
+    @Test
+    public void testJms() throws Exception {
+        EndpointUriAssembler assembler = new MyJmsAssembler();
+
+        Map<String, Object> params = new LinkedHashMap<>();
+        params.put("destinationName", "foo");
+        params.put("destinationType", "topic");
+        params.put("deliveryPersistent", true);
+
+        String uri = assembler.buildUri(context, "jms2", params);
+        Assertions.assertEquals("jms2:topic:foo?deliveryPersistent=true", uri);
+    }
+
+    @Test
+    public void testJmsMatchDefault() throws Exception {
+        EndpointUriAssembler assembler = new MyJmsAssembler();
+
+        Map<String, Object> params = new LinkedHashMap<>();
+        params.put("destinationName", "foo");
+        params.put("destinationType", "queue");
+        params.put("deliveryPersistent", true);
+
+        String uri = assembler.buildUri(context, "jms2", params);
+        Assertions.assertEquals("jms2:queue:foo?deliveryPersistent=true", uri);
+    }
+
+    @Test
+    public void testJmsNoDefault() throws Exception {
+        EndpointUriAssembler assembler = new MyJmsAssembler();
+
+        Map<String, Object> params = new LinkedHashMap<>();
+        params.put("destinationName", "foo");
+        params.put("deliveryPersistent", true);
+
+        String uri = assembler.buildUri(context, "jms2", params);
+        Assertions.assertEquals("jms2:foo?deliveryPersistent=true", uri);
     }
 
     private class MyAssembler extends EndpointUriAssemblerSupport implements EndpointUriAssembler {
@@ -214,4 +252,27 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
 
     }
 
+    private class MyJmsAssembler extends EndpointUriAssemblerSupport implements EndpointUriAssembler {
+
+        private static final String SYNTAX = "jms2:destinationType:destinationName";
+
+        @Override
+        public boolean isEnabled(String scheme) {
+            return "jms2".equals(scheme);
+        }
+
+        @Override
+        public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+                throws URISyntaxException {
+
+            String uri = SYNTAX;
+            uri = buildPathParameter(camelContext, SYNTAX, uri, "destinationType", "queue", false, parameters);
+            uri = buildPathParameter(camelContext, SYNTAX, uri, "destinationName", null, true, parameters);
+            uri = buildQueryParameters(camelContext, uri, parameters);
+
+            return uri;
+        }
+
+    }
+
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
index 9dfa259..cb6ee24 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/component/EndpointUriAssemblerSupport.java
@@ -34,7 +34,7 @@ public abstract class EndpointUriAssemblerSupport {
             CamelContext camelContext, String syntax, String uri, String name, Object defaultValue, boolean required,
             Map<String, Object> parameters) {
         Object obj = parameters.remove(name);
-        if (ObjectHelper.isEmpty(obj) && defaultValue != null) {
+        if (ObjectHelper.isEmpty(obj) && defaultValue != null && required) {
             obj = camelContext.getTypeConverter().convertTo(String.class, defaultValue);
         }
         if (ObjectHelper.isEmpty(obj) && required) {
@@ -59,8 +59,6 @@ public abstract class EndpointUriAssemblerSupport {
             }
         }
 
-        // TODO: value == defaultValue and required = false => remove from path as that is better (eg camel-jms)
-
         return uri;
     }