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 <claus.ib...@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; }