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:02 UTC
[camel] 05/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 f2034e1df7fa6459a88828669b42335060ffa099
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 25 10:11:26 2020 +0200
CAMEL-15567: components - Generate source code for creating endpoint uri via a map of properties. WIP
---
.../jetty9/JettyHttp9EndpointUriAssembler.java | 26 ++++
.../org/apache/camel/assembler/jetty-endpoint | 2 +
.../netty/http/NettyHttpEndpointUriAssembler.java | 29 +++++
.../org/apache/camel/assembler/netty-http-endpoint | 2 +
.../catalog/CustomEndpointUriAssemblerTest.java | 135 +++++++++++++++++++--
.../component/EndpointUriAssemblerSupport.java | 13 ++
6 files changed, 194 insertions(+), 13 deletions(-)
diff --git a/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriAssembler.java b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriAssembler.java
new file mode 100644
index 0000000..e0f4418
--- /dev/null
+++ b/components/camel-jetty/src/generated/java/org/apache/camel/component/jetty9/JettyHttp9EndpointUriAssembler.java
@@ -0,0 +1,26 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.jetty9;
+
+import java.net.URISyntaxException;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.EndpointUriAssembler;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+public class JettyHttp9EndpointUriAssembler extends org.apache.camel.support.component.EndpointUriAssemblerSupport implements EndpointUriAssembler {
+
+ private static final String SYNTAX = "jetty:httpUri";
+
+ @Override
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException {
+ String uri = SYNTAX;
+
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "httpUri", null, true, parameters);
+ uri = buildQueryParameters(camelContext, uri, parameters);
+ return uri;
+ }
+}
+
diff --git a/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/assembler/jetty-endpoint b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/assembler/jetty-endpoint
new file mode 100644
index 0000000..7f8e7ed
--- /dev/null
+++ b/components/camel-jetty/src/generated/resources/META-INF/services/org/apache/camel/assembler/jetty-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.jetty9.JettyHttp9EndpointUriAssembler
diff --git a/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriAssembler.java b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriAssembler.java
new file mode 100644
index 0000000..e252977
--- /dev/null
+++ b/components/camel-netty-http/src/generated/java/org/apache/camel/component/netty/http/NettyHttpEndpointUriAssembler.java
@@ -0,0 +1,29 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.netty.http;
+
+import java.net.URISyntaxException;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.EndpointUriAssembler;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+public class NettyHttpEndpointUriAssembler extends org.apache.camel.support.component.EndpointUriAssemblerSupport implements EndpointUriAssembler {
+
+ private static final String SYNTAX = "netty-http:protocol:host:port/path";
+
+ @Override
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters) throws URISyntaxException {
+ String uri = SYNTAX;
+
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "protocol", null, true, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "host", null, true, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "port", null, false, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "path", null, false, parameters);
+ uri = buildQueryParameters(camelContext, uri, parameters);
+ return uri;
+ }
+}
+
diff --git a/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/assembler/netty-http-endpoint b/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/assembler/netty-http-endpoint
new file mode 100644
index 0000000..98e4c6b
--- /dev/null
+++ b/components/camel-netty-http/src/generated/resources/META-INF/services/org/apache/camel/assembler/netty-http-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.netty.http.NettyHttpEndpointUriAssembler
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 f5097da..30ef452 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
@@ -35,12 +35,13 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
EndpointUriAssembler assembler = new MyAssembler();
Map<String, Object> params = new HashMap<>();
- params.put("timerName", "foo");
- params.put("period", 123);
- params.put("repeatCount", "5");
+ params.put("name", "foo");
+ params.put("amount", "123");
+ params.put("port", 4444);
+ params.put("verbose", true);
- String uri = assembler.buildUri(context, "timer", params);
- Assertions.assertEquals("timer:foo?period=123&repeatCount=5", uri);
+ String uri = assembler.buildUri(context, "acme", params);
+ Assertions.assertEquals("acme:foo:4444?amount=123&verbose=true", uri);
}
@Test
@@ -48,17 +49,104 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
EndpointUriAssembler assembler = new MyAssembler();
Map<String, Object> params = new LinkedHashMap<>();
- params.put("timerName", "foo");
- params.put("repeatCount", 5);
- params.put("period", "123");
+ params.put("name", "foo");
+ params.put("verbose", false);
+ params.put("port", 4444);
+ params.put("amount", "123");
- String uri = assembler.buildUri(context, "timer", params);
- Assertions.assertEquals("timer:foo?period=123&repeatCount=5", uri);
+ String uri = assembler.buildUri(context, "acme", params);
+ Assertions.assertEquals("acme:foo:4444?amount=123&verbose=false", uri);
+ }
+
+ @Test
+ public void testCustomAssembleNoMandatory() throws Exception {
+ EndpointUriAssembler assembler = new MyAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("verbose", false);
+ params.put("port", 4444);
+ params.put("amount", "123");
+
+ try {
+ assembler.buildUri(context, "acme", params);
+ Assertions.fail();
+ } catch (IllegalArgumentException e) {
+ Assertions.assertEquals("Option name is required when creating endpoint uri with syntax acme:name:port", e.getMessage());
+ }
+ }
+
+ @Test
+ public void testCustomAssembleDefault() throws Exception {
+ EndpointUriAssembler assembler = new MyAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("name", "bar");
+ params.put("verbose", false);
+ params.put("amount", "123");
+
+ String uri = assembler.buildUri(context, "acme", params);
+ Assertions.assertEquals("acme:bar:8080?amount=123&verbose=false", uri);
+ }
+
+ @Test
+ public void testCustomAssembleComplex() throws Exception {
+ EndpointUriAssembler assembler = new MySecondAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("name", "bar");
+ params.put("path", "moes");
+ params.put("verbose", true);
+ params.put("amount", "123");
+
+ String uri = assembler.buildUri(context, "acme2", params);
+ Assertions.assertEquals("acme2:bar/moes:8080?amount=123&verbose=true", uri);
+ }
+
+ @Test
+ public void testCustomAssembleComplexPort() throws Exception {
+ EndpointUriAssembler assembler = new MySecondAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("name", "bar");
+ params.put("path", "moes");
+ params.put("port", "4444");
+ params.put("verbose", true);
+ params.put("amount", "123");
+
+ String uri = assembler.buildUri(context, "acme2", params);
+ Assertions.assertEquals("acme2:bar/moes:4444?amount=123&verbose=true", uri);
+ }
+
+ @Test
+ public void testCustomAssembleComplexNoPath() throws Exception {
+ EndpointUriAssembler assembler = new MySecondAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("name", "bar");
+ params.put("port", "4444");
+ params.put("verbose", true);
+ params.put("amount", "123");
+
+ String uri = assembler.buildUri(context, "acme2", params);
+ Assertions.assertEquals("acme2:bar:4444?amount=123&verbose=true", uri);
+ }
+
+ @Test
+ public void testCustomAssembleComplexNoPathNoPort() throws Exception {
+ EndpointUriAssembler assembler = new MySecondAssembler();
+
+ Map<String, Object> params = new LinkedHashMap<>();
+ params.put("name", "bar");
+ params.put("verbose", true);
+ params.put("amount", "123");
+
+ String uri = assembler.buildUri(context, "acme2", params);
+ Assertions.assertEquals("acme2:bar:8080?amount=123&verbose=true", uri);
}
private class MyAssembler extends EndpointUriAssemblerSupport implements EndpointUriAssembler {
- private static final String SYNTAX = "timer:timerName";
+ private static final String SYNTAX = "acme:name:port";
@Override
public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
@@ -66,10 +154,31 @@ public class CustomEndpointUriAssemblerTest extends ContextTestSupport {
// begin from syntax
String uri = SYNTAX;
- // TODO: optional path parameters that are missing
+ // append path parameters
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "name", null, true, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "port", 8080, false, parameters);
+ // append remainder parameters
+ uri = buildQueryParameters(camelContext, uri, parameters);
+
+ return uri;
+ }
+
+ }
+
+ private class MySecondAssembler extends EndpointUriAssemblerSupport implements EndpointUriAssembler {
+
+ private static final String SYNTAX = "acme2:name/path:port";
+
+ @Override
+ public String buildUri(CamelContext camelContext, String scheme, Map<String, Object> parameters)
+ throws URISyntaxException {
+ // begin from syntax
+ String uri = SYNTAX;
// append path parameters
- uri = buildPathParameter(camelContext, SYNTAX, uri, "timerName", null, true, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "name", null, true, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "path", null, false, parameters);
+ uri = buildPathParameter(camelContext, SYNTAX, uri, "port", 8080, false, parameters);
// append remainder parameters
uri = buildQueryParameters(camelContext, uri, parameters);
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 14a8aa0..d3e1c8c 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
@@ -44,6 +44,19 @@ public abstract class EndpointUriAssemblerSupport {
if (ObjectHelper.isNotEmpty(obj)) {
String str = camelContext.getTypeConverter().convertTo(String.class, obj);
uri = uri.replace(name, str);
+ } else {
+ // the option is optional and we have no default or value for it, so we need to remove it from the syntax
+ int pos = uri.indexOf(name);
+ if (pos != -1) {
+ // remove from syntax
+ uri = uri.replace(name, "");
+ pos = pos - 1;
+ // remove the separator char
+ char ch = uri.charAt(pos);
+ if (!Character.isLetterOrDigit(ch)) {
+ uri = uri.substring(0, pos) + uri.substring(pos + 1);
+ }
+ }
}
return uri;
}