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/03/09 12:32:58 UTC

[1/2] camel git commit: CAMEL-10967: camel-catalog-connector - Add api to build endpoint uri based on connection options

Repository: camel
Updated Branches:
  refs/heads/master 7f561212a -> 1dfb70985


CAMEL-10967: camel-catalog-connector - Add api to build endpoint uri based on connection options


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

Branch: refs/heads/master
Commit: 1dfb70985f1962d30eb9336488c63c39fd1b30c8
Parents: 655916c
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Mar 9 13:32:41 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Mar 9 13:32:48 2017 +0100

----------------------------------------------------------------------
 .../connector/CamelConnectorCatalog.java        | 22 ------------
 .../connector/DefaultCamelConnectorCatalog.java | 36 --------------------
 .../camel/catalog/rest/CamelCatalogRest.java    | 18 +++++++++-
 .../catalog/rest/CamelConnectorCatalogRest.java | 35 +++++++++++++++++++
 .../org/apache/camel/catalog/CamelCatalog.java  |  4 +--
 5 files changed, 54 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1dfb7098/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
index 5bbebf3..80c9fae 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
@@ -112,28 +112,6 @@ public interface CamelConnectorCatalog {
     String componentSchemaJSon(String groupId, String artifactId, String version);
 
     /**
-     * Creates an endpoint uri in Java style from the information in the json schema
-     *
-     * @param scheme the endpoint schema
-     * @param json the json schema with the endpoint properties
-     * @param encode whether to URL encode the returned uri or not
-     * @return the constructed endpoint uri
-     * @throws java.net.URISyntaxException is thrown if there is encoding error
-     */
-    String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException;
-
-    /**
-     * Creates an endpoint uri in XML style (eg escape & as &ampl;) from the information in the json schema
-     *
-     * @param scheme the endpoint schema
-     * @param json the json schema with the endpoint properties
-     * @param encode whether to URL encode the returned uri or not
-     * @return the constructed endpoint uri
-     * @throws java.net.URISyntaxException is thrown if there is encoding error
-     */
-    String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException;
-
-    /**
      * Creates an endpoint uri in Java style from the information from the properties
      *
      * @param scheme the endpoint schema

http://git-wip-us.apache.org/repos/asf/camel/blob/1dfb7098/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
index 57d5f3f..387164c 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
@@ -106,42 +106,6 @@ public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
     }
 
     @Override
-    public String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException {
-        // delegate to use CamelCatalog
-        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
-        if (found.isPresent()) {
-            ConnectorDto dto = found.get();
-
-            // need to add custom connector as component to the catalog before we can build the uri
-            String javaType = dto.getJavaType();
-            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
-
-            camelCatalog.addComponent(scheme, javaType, componentJson);
-            return camelCatalog.asEndpointUri(scheme, json, encode);
-        }
-        // no connector with that scheme
-        return null;
-    }
-
-    @Override
-    public String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException {
-        // delegate to use CamelCatalog
-        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
-        if (found.isPresent()) {
-            ConnectorDto dto = found.get();
-
-            // need to add custom connector as component to the catalog before we can build the uri
-            String javaType = dto.getJavaType();
-            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
-
-            camelCatalog.addComponent(scheme, javaType, componentJson);
-            return camelCatalog.asEndpointUriXml(scheme, json, encode);
-        }
-        // no connector with that scheme
-        return null;
-    }
-
-    @Override
     public String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException {
         // delegate to use CamelCatalog
         Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();

http://git-wip-us.apache.org/repos/asf/camel/blob/1dfb7098/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
index 6514783..9092f6c 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
@@ -295,7 +295,7 @@ public class CamelCatalogRest {
     @Path("/asEndpointUri/{scheme}")
     @Consumes("application/json")
     @Produces("text/plain")
-    @ApiOperation(value = "Creates an endpoint uri in Java style from the information in the json schema")
+    @ApiOperation(value = "Creates an endpoint uri in Java style configured using the provided options in the JSon body")
     public String asEndpointUri(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
                                 @ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
         try {
@@ -308,6 +308,22 @@ public class CamelCatalogRest {
     }
 
     @POST
+    @Path("/asEndpointUriXml/{scheme}")
+    @Consumes("application/json")
+    @Produces("text/plain")
+    @ApiOperation(value = "Creates an endpoint uri in XML style configured using the provided options in the JSon body")
+    public String asEndpointUriXml(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
+                                   @ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            Map map = mapper.readValue(json, Map.class);
+            return catalog.asEndpointUriXml(scheme, map, true);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @POST
     @Path("/mavenCacheDirectory/{name}")
     @ApiOperation(value = "Configures the Maven cache directory to use when downloading artifacts")
     public void mavenCacheDirectory(@ApiParam(value = "The name of the cache directory", required = true) @PathParam("name") String name) {

http://git-wip-us.apache.org/repos/asf/camel/blob/1dfb7098/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
index 03ad80b..24c8153 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
@@ -17,7 +17,9 @@
 package org.apache.camel.catalog.rest;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -25,6 +27,7 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -104,6 +107,38 @@ public class CamelConnectorCatalogRest {
     }
 
     @POST
+    @Path("/asEndpointUri/{scheme}")
+    @Consumes("application/json")
+    @Produces("text/plain")
+    @ApiOperation(value = "Creates an endpoint uri in Java style configured using the provided options in the JSon body")
+    public String asEndpointUri(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
+                                @ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            Map map = mapper.readValue(json, Map.class);
+            return catalog.asEndpointUri(scheme, map, true);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @POST
+    @Path("/asEndpointUriXml/{scheme}")
+    @Consumes("application/json")
+    @Produces("text/plain")
+    @ApiOperation(value = "Creates an endpoint uri in XML style configured using the provided options in the JSon body")
+    public String asEndpointUriXml(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
+                                   @ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            Map map = mapper.readValue(json, Map.class);
+            return catalog.asEndpointUriXml(scheme, map, true);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @POST
     @Path("/mavenCacheDirectory/{name}")
     @ApiOperation(value = "Configures the Maven cache directory to use when downloading artifacts")
     public void mavenCacheDirectory(@ApiParam(value = "The name of the cache directory", required = true) @PathParam("name") String name) {

http://git-wip-us.apache.org/repos/asf/camel/blob/1dfb7098/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index e45eb67..ca5f4f6 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -513,7 +513,7 @@ public interface CamelCatalog {
     String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException;
 
     /**
-     * Creates an endpoint uri in XML style (eg escape & as &ampl;) from the information in the json schema
+     * Creates an endpoint uri in XML style from the information in the json schema
      *
      * @param scheme the endpoint schema
      * @param json the json schema with the endpoint properties
@@ -536,7 +536,7 @@ public interface CamelCatalog {
     String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException;
 
     /**
-     * Creates an endpoint uri in XML style (eg escape & as &ampl;) from the information from the properties
+     * Creates an endpoint uri in XML style from the information from the properties
      *
      * @param scheme the endpoint schema
      * @param properties the properties as key value pairs


[2/2] camel git commit: CAMEL-10967: camel-catalog-connector - Add api to build endpoint uri based on connection options

Posted by da...@apache.org.
CAMEL-10967: camel-catalog-connector - Add api to build endpoint uri based on connection options


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

Branch: refs/heads/master
Commit: 655916cd7476757821af7f8f073645449a7a43be
Parents: 7f56121
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Mar 9 13:22:52 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Mar 9 13:32:48 2017 +0100

----------------------------------------------------------------------
 .../connector/CamelConnectorCatalog.java        | 61 +++++++++++-
 .../catalog/connector/ConnectorDataStore.java   | 10 +-
 .../camel/catalog/connector/ConnectorDto.java   |  9 ++
 .../connector/DefaultCamelConnectorCatalog.java | 97 +++++++++++++++++++-
 .../connector/MemoryConnectorDataStore.java     | 21 ++++-
 .../connector/CamelConnectorCatalogTest.java    | 42 +++++++--
 .../catalog/maven/ConnectorArtifactHelper.java  | 14 ++-
 .../maven/DefaultMavenArtifactProvider.java     |  7 +-
 .../catalog/maven/MavenVersionManager.java      | 16 ++++
 platforms/camel-catalog-rest/pom.xml            | 12 ++-
 .../camel/catalog/rest/CamelCatalogRest.java    | 45 ++++++---
 .../catalog/rest/CamelConnectorCatalogRest.java | 38 ++++----
 .../rest/CamelConnectorCatalogRestTest.java     |  3 +-
 .../org/apache/camel/catalog/CamelCatalog.java  |  2 +
 14 files changed, 314 insertions(+), 63 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
index 6923b51..5bbebf3 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/CamelConnectorCatalog.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.catalog.connector;
 
+import java.net.URISyntaxException;
 import java.util.List;
+import java.util.Map;
 import javax.management.MXBean;
 
 /**
@@ -48,13 +50,15 @@ public interface CamelConnectorCatalog {
      * @param version               maven version
      * @param name                  name of connector
      * @param scheme                scheme of connector
+     * @param javaType              fully qualified class name of the connector
      * @param description           description of connector
      * @param labels                labels (separated by comma) of connector
      * @param connectorJson         the <tt>camel-connector</tt> json file
      * @param connectorSchemaJson   the <tt>camel-connector-schema</tt> json file
+     * @param componentSchemaJson   the <tt>camel-component-schema</tt> json file
      */
-    void addConnector(String groupId, String artifactId, String version, String name, String scheme, String description, String labels,
-                      String connectorJson, String connectorSchemaJson);
+    void addConnector(String groupId, String artifactId, String version, String name, String scheme, String javaType,
+                      String description, String labels, String connectorJson, String connectorSchemaJson, String componentSchemaJson);
 
     /**
      * Removes the connector from the catalog
@@ -98,4 +102,57 @@ public interface CamelConnectorCatalog {
      */
     String connectorSchemaJSon(String groupId, String artifactId, String version);
 
+    /**
+     * Returns the <tt>camel-component-schema</tt> json file for the given connector with the Maven coordinate
+     *
+     * @param groupId     maven group id
+     * @param artifactId  maven artifact id
+     * @param version     maven version
+     */
+    String componentSchemaJSon(String groupId, String artifactId, String version);
+
+    /**
+     * Creates an endpoint uri in Java style from the information in the json schema
+     *
+     * @param scheme the endpoint schema
+     * @param json the json schema with the endpoint properties
+     * @param encode whether to URL encode the returned uri or not
+     * @return the constructed endpoint uri
+     * @throws java.net.URISyntaxException is thrown if there is encoding error
+     */
+    String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException;
+
+    /**
+     * Creates an endpoint uri in XML style (eg escape & as &ampl;) from the information in the json schema
+     *
+     * @param scheme the endpoint schema
+     * @param json the json schema with the endpoint properties
+     * @param encode whether to URL encode the returned uri or not
+     * @return the constructed endpoint uri
+     * @throws java.net.URISyntaxException is thrown if there is encoding error
+     */
+    String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException;
+
+    /**
+     * Creates an endpoint uri in Java style from the information from the properties
+     *
+     * @param scheme the endpoint schema
+     * @param properties the properties as key value pairs
+     * @param encode whether to URL encode the returned uri or not
+     * @return the constructed endpoint uri
+     * @throws java.net.URISyntaxException is thrown if there is encoding error
+     */
+    String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException;
+
+    /**
+     * Creates an endpoint uri in XML style (eg escape & as &ampl;) from the information from the properties
+     *
+     * @param scheme the endpoint schema
+     * @param properties the properties as key value pairs
+     * @param encode whether to URL encode the returned uri or not
+     * @return the constructed endpoint uri
+     * @throws java.net.URISyntaxException is thrown if there is encoding error
+     */
+    String asEndpointUriXml(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException;
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
index fadfafb..c862a2f 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDataStore.java
@@ -29,8 +29,9 @@ public interface ConnectorDataStore {
      * @param dto                   the connector dto
      * @param connectorJson         the <tt>camel-connector</tt> json file
      * @param connectorSchemaJson   the <tt>camel-connector-schema</tt> json file
+     * @param componentSchemaJson   the <tt>camel-component-schema</tt> json file
      */
-    void addConnector(ConnectorDto dto, String connectorJson, String connectorSchemaJson);
+    void addConnector(ConnectorDto dto, String connectorJson, String connectorSchemaJson, String componentSchemaJson);
 
     /**
      * Is the connector already registered in the catalog
@@ -68,4 +69,11 @@ public interface ConnectorDataStore {
      */
     String connectorSchemaJSon(ConnectorDto dto);
 
+    /**
+     * Returns the <tt>camel-component-schema</tt> json file for the given connector with the Maven coordinate
+     *
+     * @param dto  the connector dto
+     */
+    String componentSchemaJSon(ConnectorDto dto);
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDto.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDto.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDto.java
index 87e96c0..ad2facb 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDto.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/ConnectorDto.java
@@ -25,6 +25,7 @@ public class ConnectorDto {
     private String scheme;
     private String description;
     private String labels;
+    private String javaType;
 
     private String groupId;
     private String artifactId;
@@ -66,6 +67,14 @@ public class ConnectorDto {
         this.labels = labels;
     }
 
+    public String getJavaType() {
+        return javaType;
+    }
+
+    public void setJavaType(String javaType) {
+        this.javaType = javaType;
+    }
+
     public String getGroupId() {
         return groupId;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
index 82d7d8d..57d5f3f 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/DefaultCamelConnectorCatalog.java
@@ -16,10 +16,17 @@
  */
 package org.apache.camel.catalog.connector;
 
+import java.net.URISyntaxException;
 import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import org.apache.camel.catalog.CamelCatalog;
+import org.apache.camel.catalog.DefaultCamelCatalog;
 
 public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
 
+    private final CamelCatalog camelCatalog = new DefaultCamelCatalog(true);
     private ConnectorDataStore dataStore = new MemoryConnectorDataStore();
 
     @Override
@@ -37,17 +44,19 @@ public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
     }
 
     @Override
-    public void addConnector(String groupId, String artifactId, String version, String name, String scheme, String description, String labels,
-                             String connectorJson, String connectorSchemaJson) {
+    public void addConnector(String groupId, String artifactId, String version, String name, String scheme,
+                             String javaType, String description, String labels,
+                             String connectorJson, String connectorSchemaJson, String componentSchemaJson) {
         ConnectorDto dto = new ConnectorDto();
         dto.setGroupId(groupId);
         dto.setArtifactId(artifactId);
         dto.setVersion(version);
         dto.setName(name);
         dto.setScheme(scheme);
+        dto.setJavaType(javaType);
         dto.setDescription(description);
         dto.setLabels(labels);
-        dataStore.addConnector(dto, connectorJson, connectorSchemaJson);
+        dataStore.addConnector(dto, connectorJson, connectorSchemaJson, componentSchemaJson);
     }
 
     @Override
@@ -86,4 +95,86 @@ public class DefaultCamelConnectorCatalog implements CamelConnectorCatalog {
         dto.setVersion(version);
         return dataStore.connectorSchemaJSon(dto);
     }
+
+    @Override
+    public String componentSchemaJSon(String groupId, String artifactId, String version) {
+        ConnectorDto dto = new ConnectorDto();
+        dto.setGroupId(groupId);
+        dto.setArtifactId(artifactId);
+        dto.setVersion(version);
+        return dataStore.componentSchemaJSon(dto);
+    }
+
+    @Override
+    public String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException {
+        // delegate to use CamelCatalog
+        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
+        if (found.isPresent()) {
+            ConnectorDto dto = found.get();
+
+            // need to add custom connector as component to the catalog before we can build the uri
+            String javaType = dto.getJavaType();
+            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
+
+            camelCatalog.addComponent(scheme, javaType, componentJson);
+            return camelCatalog.asEndpointUri(scheme, json, encode);
+        }
+        // no connector with that scheme
+        return null;
+    }
+
+    @Override
+    public String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException {
+        // delegate to use CamelCatalog
+        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
+        if (found.isPresent()) {
+            ConnectorDto dto = found.get();
+
+            // need to add custom connector as component to the catalog before we can build the uri
+            String javaType = dto.getJavaType();
+            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
+
+            camelCatalog.addComponent(scheme, javaType, componentJson);
+            return camelCatalog.asEndpointUriXml(scheme, json, encode);
+        }
+        // no connector with that scheme
+        return null;
+    }
+
+    @Override
+    public String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException {
+        // delegate to use CamelCatalog
+        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
+        if (found.isPresent()) {
+            ConnectorDto dto = found.get();
+
+            // need to add custom connector as component to the catalog before we can build the uri
+            String javaType = dto.getJavaType();
+            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
+
+            camelCatalog.addComponent(scheme, javaType, componentJson);
+            return camelCatalog.asEndpointUri(scheme, properties, encode);
+        }
+        // no connector with that scheme
+        return null;
+    }
+
+    @Override
+    public String asEndpointUriXml(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException {
+        // delegate to use CamelCatalog
+        Optional<ConnectorDto> found = dataStore.findConnector(null, true).stream().filter(d -> d.getScheme().equals(scheme)).findAny();
+        if (found.isPresent()) {
+            ConnectorDto dto = found.get();
+
+            // need to add custom connector as component to the catalog before we can build the uri
+            String javaType = dto.getJavaType();
+            String componentJson = componentSchemaJSon(dto.getGroupId(), dto.getArtifactId(), dto.getVersion());
+
+            camelCatalog.addComponent(scheme, javaType, componentJson);
+            return camelCatalog.asEndpointUriXml(scheme, properties, encode);
+        }
+        // no connector with that scheme
+        return null;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
index ebb0a21..e00dfb4 100644
--- a/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
+++ b/platforms/camel-catalog-connector/src/main/java/org/apache/camel/catalog/connector/MemoryConnectorDataStore.java
@@ -31,8 +31,8 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
     private Set<ConnectorDetails> store = new CopyOnWriteArraySet<>();
 
     @Override
-    public void addConnector(ConnectorDto dto, String connectorJson, String connectorSchemaJson) {
-        ConnectorDetails entry = new ConnectorDetails(dto, connectorJson, connectorSchemaJson);
+    public void addConnector(ConnectorDto dto, String connectorJson, String connectorSchemaJson, String componentSchemaJson) {
+        ConnectorDetails entry = new ConnectorDetails(dto, connectorJson, connectorSchemaJson, componentSchemaJson);
 
         // remove in case we are updating the connector
         store.remove(entry);
@@ -41,12 +41,12 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
 
     @Override
     public boolean hasConnector(ConnectorDto dto) {
-        return store.contains(new ConnectorDetails(dto, null, null));
+        return store.contains(new ConnectorDetails(dto, null, null, null));
     }
 
     @Override
     public void removeConnector(ConnectorDto dto) {
-        store.remove(new ConnectorDetails(dto, null, null));
+        store.remove(new ConnectorDetails(dto, null, null, null));
     }
 
     @Override
@@ -127,6 +127,11 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
         return store.stream().filter(d -> d.getDto().equals(dto)).findFirst().orElse(null).getConnectorSchemaJson();
     }
 
+    @Override
+    public String componentSchemaJSon(ConnectorDto dto) {
+        return store.stream().filter(d -> d.getDto().equals(dto)).findFirst().orElse(null).getComponentSchemaJson();
+    }
+
     /**
      * Entry holding the connector details
      */
@@ -135,11 +140,13 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
         private ConnectorDto dto;
         private String connectorJson;
         private String connectorSchemaJson;
+        private String componentSchemaJson;
 
-        ConnectorDetails(ConnectorDto dto, String connectorJson, String connectorSchemaJson) {
+        ConnectorDetails(ConnectorDto dto, String connectorJson, String connectorSchemaJson, String componentSchemaJson) {
             this.dto = dto;
             this.connectorJson = connectorJson;
             this.connectorSchemaJson = connectorSchemaJson;
+            this.componentSchemaJson = componentSchemaJson;
         }
 
         ConnectorDto getDto() {
@@ -154,6 +161,10 @@ public class MemoryConnectorDataStore implements ConnectorDataStore {
             return connectorSchemaJson;
         }
 
+        String getComponentSchemaJson() {
+            return componentSchemaJson;
+        }
+
         @Override
         public boolean equals(Object o) {
             if (this == o) {

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java b/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
index 4b802d6..607af6c 100644
--- a/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
+++ b/platforms/camel-catalog-connector/src/test/java/org/apache/camel/catalog/connector/CamelConnectorCatalogTest.java
@@ -31,7 +31,8 @@ public class CamelConnectorCatalogTest {
         assertEquals(0, catalog.findConnector(false).size());
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo","Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         assertEquals(1, catalog.findConnector(false).size());
     }
@@ -45,7 +46,8 @@ public class CamelConnectorCatalogTest {
         assertFalse(catalog.hasConnector("org.apache.camel", "myfoo-connector", "2.19.0"));
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         assertEquals(1, catalog.findConnector(false).size());
 
@@ -57,7 +59,8 @@ public class CamelConnectorCatalogTest {
         CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", "foo", "bar");
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", "foo", "bar", "baz");
 
         String json = catalog.connectorJSon("org.apache.camel", "myfoo-connector", "2.19.0");
         assertEquals("foo", json);
@@ -68,20 +71,34 @@ public class CamelConnectorCatalogTest {
         CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", "foo", "bar");
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", "foo", "bar", "baz");
 
         String json = catalog.connectorSchemaJSon("org.apache.camel", "myfoo-connector", "2.19.0");
         assertEquals("bar", json);
     }
 
     @Test
+    public void testComponentSchemaJson() throws Exception {
+        CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
+
+        catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", "foo", "bar", "baz");
+
+        String json = catalog.componentSchemaJSon("org.apache.camel", "myfoo-connector", "2.19.0");
+        assertEquals("baz", json);
+    }
+
+    @Test
     public void testRemoveConnector() throws Exception {
         CamelConnectorCatalog catalog = new DefaultCamelConnectorCatalog();
 
         assertEquals(0, catalog.findConnector(false).size());
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         assertEquals(1, catalog.findConnector(false).size());
 
@@ -97,7 +114,8 @@ public class CamelConnectorCatalogTest {
         assertEquals(0, catalog.findConnector(false).size());
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         assertEquals(1, catalog.findConnector("foo", false).size());
         assertEquals(0, catalog.findConnector("bar", false).size());
@@ -110,10 +128,12 @@ public class CamelConnectorCatalogTest {
         assertEquals(0, catalog.findConnector(false).size());
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.1",
-            "MyFoo", "my-foo", "Something more cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something more cool", "foo,timer", null, null, null);
 
         assertEquals(1, catalog.findConnector("foo", true).size());
         assertEquals(0, catalog.findConnector("bar", true).size());
@@ -129,10 +149,12 @@ public class CamelConnectorCatalogTest {
         assertEquals(0, catalog.findConnector(false).size());
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.0",
-            "MyFoo", "my-foo", "Something cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         catalog.addConnector("org.apache.camel", "myfoo-connector", "2.19.1",
-            "MyFoo", "my-foo", "Something more cool", "foo,timer", null, null);
+            "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something more cool", "foo,timer", null, null, null);
 
         assertEquals(2, catalog.findConnector("foo", false).size());
         assertEquals(0, catalog.findConnector("bar", false).size());

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
index 6fcb1bc..475eb91 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/ConnectorArtifactHelper.java
@@ -30,8 +30,8 @@ public final class ConnectorArtifactHelper {
     private ConnectorArtifactHelper() {
     }
 
-    public static String[] loadConnectorJSonSchema(ClassLoader classLoader) {
-        String[] answer = new String[2];
+    public static String[] loadJSonSchemas(ClassLoader classLoader) {
+        String[] answer = new String[3];
 
         String path = "camel-connector.json";
         try {
@@ -53,6 +53,16 @@ public final class ConnectorArtifactHelper {
             LOG.warn("Error loading " + path + " file", e);
         }
 
+        path = "camel-component-schema.json";
+        try {
+            InputStream is = classLoader.getResourceAsStream(path);
+            if (is != null) {
+                answer[2] = loadText(is);
+            }
+        } catch (Throwable e) {
+            LOG.warn("Error loading " + path + " file", e);
+        }
+
         return answer;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
index 3a7c2a2..054041b 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/DefaultMavenArtifactProvider.java
@@ -36,7 +36,7 @@ import org.slf4j.LoggerFactory;
 import static org.apache.camel.catalog.maven.ComponentArtifactHelper.extractComponentJavaType;
 import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentJSonSchema;
 import static org.apache.camel.catalog.maven.ComponentArtifactHelper.loadComponentProperties;
-import static org.apache.camel.catalog.maven.ConnectorArtifactHelper.loadConnectorJSonSchema;
+import static org.apache.camel.catalog.maven.ConnectorArtifactHelper.loadJSonSchemas;
 
 /**
  * Default {@link MavenArtifactProvider} which uses Groovy Grape to download the artifact.
@@ -129,7 +129,7 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
     protected void scanCamelConnectors(CamelConnectorCatalog camelConnectorCatalog, ClassLoader classLoader,
                                           String groupId, String artifactId, String version,
                                           Set<String> names) {
-        String[] json = loadConnectorJSonSchema(classLoader);
+        String[] json = loadJSonSchemas(classLoader);
         if (json != null) {
             if (!camelConnectorCatalog.hasConnector(groupId, artifactId, version)) {
                 try {
@@ -137,6 +137,7 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
                     JsonNode tree = mapper.readTree(json[0]);
                     String name = tree.get("name").textValue();
                     String scheme = tree.get("scheme").textValue();
+                    String javaType = tree.get("javaType").textValue();
                     String description = tree.get("description").textValue();
                     Iterator<JsonNode> it = tree.withArray("labels").iterator();
 
@@ -148,7 +149,7 @@ public class DefaultMavenArtifactProvider implements MavenArtifactProvider {
 
                     LOG.debug("Adding connector: {} with scheme: {}", name, scheme);
                     camelConnectorCatalog.addConnector(groupId, artifactId, version,
-                        name, scheme, description, csb.toString(), json[0], json[1]);
+                        name, scheme, javaType, description, csb.toString(), json[0], json[1], json[2]);
 
                     names.add(name);
                 } catch (Throwable e) {

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenVersionManager.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenVersionManager.java b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenVersionManager.java
index a6814a1..ed9339a 100644
--- a/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenVersionManager.java
+++ b/platforms/camel-catalog-maven/src/main/java/org/apache/camel/catalog/maven/MavenVersionManager.java
@@ -38,6 +38,18 @@ public class MavenVersionManager implements VersionManager {
     private final ClassLoader classLoader = new GroovyClassLoader();
     private String version;
     private String runtimeProviderVersion;
+    private String cacheDirectory;
+
+    /**
+     * Configures the directory for the download cache.
+     * <p/>
+     * The default folder is <tt>USER_HOME/.groovy/grape</tt>
+     *
+     * @param directory the directory.
+     */
+    public void setCacheDirectory(String directory) {
+        this.cacheDirectory = directory;
+    }
 
     /**
      * To add a 3rd party Maven repository.
@@ -60,6 +72,10 @@ public class MavenVersionManager implements VersionManager {
     @Override
     public boolean loadVersion(String version) {
         try {
+            if (cacheDirectory != null) {
+                System.setProperty("grape.root", cacheDirectory);
+            }
+
             Grape.setEnableAutoDownload(true);
 
             Map<String, Object> param = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-rest/pom.xml
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/pom.xml b/platforms/camel-catalog-rest/pom.xml
index b84a0ad..28986b5 100644
--- a/platforms/camel-catalog-rest/pom.xml
+++ b/platforms/camel-catalog-rest/pom.xml
@@ -45,6 +45,13 @@
       <artifactId>camel-catalog-maven</artifactId>
     </dependency>
 
+    <!-- json parser -->
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>${jackson2-version}</version>
+    </dependency>
+
     <!-- REST api -->
     <dependency>
       <groupId>javax.ws.rs</groupId>
@@ -103,11 +110,6 @@
       <artifactId>jackson-jaxrs-json-provider</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>com.fasterxml.jackson.core</groupId>
-      <artifactId>jackson-databind</artifactId>
-      <scope>test</scope>
-    </dependency>
 
     <!-- testing -->
     <dependency>

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
index 24fe206..6514783 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelCatalogRest.java
@@ -17,13 +17,16 @@
 package org.apache.camel.catalog.rest;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -133,7 +136,7 @@ public class CamelCatalogRest {
     @Path("/componentJSonSchema/{name}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the component information as JSon format")
-    public String componentJSonSchema(@ApiParam("The name of the component")
+    public String componentJSonSchema(@ApiParam(value = "The name of the component", required = true)
                                       @PathParam("name") String name) {
         return catalog.componentJSonSchema(name);
     }
@@ -142,7 +145,7 @@ public class CamelCatalogRest {
     @Path("/dataFormatJSonSchema/{name}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the data format information as JSon format")
-    public String dataFormatJSonSchema(@ApiParam("The name of the data format")
+    public String dataFormatJSonSchema(@ApiParam(value = "The name of the data format", required = true)
                                        @PathParam("name") String name) {
         return catalog.dataFormatJSonSchema(name);
     }
@@ -151,7 +154,7 @@ public class CamelCatalogRest {
     @Path("/languageJSonSchema/{name}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the language information as JSon format")
-    public String languageJSonSchema(@ApiParam("The name of the language")
+    public String languageJSonSchema(@ApiParam(value = "The name of the language", required = true)
                                      @PathParam("name") String name) {
         return catalog.languageJSonSchema(name);
     }
@@ -160,7 +163,7 @@ public class CamelCatalogRest {
     @Path("/modelJSonSchema/{name}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the model (EIP) information as JSon format")
-    public String modelJSonSchema(@ApiParam("The name of the model (EIP)")
+    public String modelJSonSchema(@ApiParam(value = "The name of the model (EIP)", required = true)
                                   @PathParam("name") String name) {
         return catalog.modelJSonSchema(name);
     }
@@ -169,7 +172,7 @@ public class CamelCatalogRest {
     @Path("/componentAsciiDoc/{name}")
     @Produces("text/plain")
     @ApiOperation(value = "Returns the component documentation as Ascii doc format")
-    public String componentAsciiDoc(@ApiParam("The name of the component")
+    public String componentAsciiDoc(@ApiParam(value = "The name of the component", required = true)
                                     @PathParam("name") String name) {
         return catalog.componentAsciiDoc(name);
     }
@@ -178,7 +181,7 @@ public class CamelCatalogRest {
     @Path("/dataFormatAsciiDoc/{name}")
     @Produces("text/plain")
     @ApiOperation(value = "Returns the data format documentation as Ascii doc format")
-    public String dataFormatAsciiDoc(@ApiParam("The name of the data format")
+    public String dataFormatAsciiDoc(@ApiParam(value = "The name of the data format", required = true)
                                      @PathParam("name") String name) {
         return catalog.dataFormatAsciiDoc(name);
     }
@@ -187,7 +190,7 @@ public class CamelCatalogRest {
     @Path("/languageAsciiDoc/{name}")
     @Produces("text/plain")
     @ApiOperation(value = "Returns the language documentation as Ascii doc format")
-    public String languageAsciiDoc(@ApiParam("The name of the language")
+    public String languageAsciiDoc(@ApiParam(value = "The name of the language", required = true)
                                    @PathParam("name") String name) {
         return catalog.languageAsciiDoc(name);
     }
@@ -289,17 +292,33 @@ public class CamelCatalogRest {
     }
 
     @POST
+    @Path("/asEndpointUri/{scheme}")
+    @Consumes("application/json")
+    @Produces("text/plain")
+    @ApiOperation(value = "Creates an endpoint uri in Java style from the information in the json schema")
+    public String asEndpointUri(@ApiParam(value = "The component scheme", readOnly = true) @PathParam("scheme") String scheme,
+                                @ApiParam(value = "The options as a JSon map with key/value pairs", required = true) String json) {
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            Map map = mapper.readValue(json, Map.class);
+            return catalog.asEndpointUri(scheme, map, true);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    @POST
     @Path("/mavenCacheDirectory/{name}")
     @ApiOperation(value = "Configures the Maven cache directory to use when downloading artifacts")
-    public void mavenCacheDirectory(@ApiParam("The name of the cache directory") @PathParam("name") String name) {
+    public void mavenCacheDirectory(@ApiParam(value = "The name of the cache directory", required = true) @PathParam("name") String name) {
         maven.setCacheDirectory(name);
     }
 
     @POST
     @Path("/addMavenRepository/{name}/{url}")
     @ApiOperation(value = "Adds a third party Maven repository to use for downloading Maven artifacts")
-    public void addMavenRepository(@ApiParam("The name of the Maven repository") @PathParam("name") String name,
-                                   @ApiParam("The URL of the Maven repository") @PathParam("url") String url) {
+    public void addMavenRepository(@ApiParam(value = "The name of the Maven repository", required = true) @PathParam("name") String name,
+                                   @ApiParam(value = "The URL of the Maven repository", required = true) @PathParam("url") String url) {
         maven.addMavenRepository(name, url);
     }
 
@@ -307,9 +326,9 @@ public class CamelCatalogRest {
     @Path("/addComponentFromMavenArtifact/{groupId}/{artifactId}/{version}")
     @Produces("application/json")
     @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel components which will be added to the catalog and returns the names of the found components")
-    public Set<String> addComponentFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
-                                                     @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
-                                                     @ApiParam("The Maven version") @PathParam("version") String version) {
+    public Set<String> addComponentFromMavenArtifact(@ApiParam(value = "The Maven groupId", required = true) @PathParam("groupId") String groupId,
+                                                     @ApiParam(value = "The Maven artifactId", required = true) @PathParam("artifactId") String artifactId,
+                                                     @ApiParam(value = "The Maven version", required = true) @PathParam("version") String version) {
         return maven.addArtifactToCatalog(catalog, null, groupId, artifactId, version);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
index 364bbf5..03ad80b 100644
--- a/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
+++ b/platforms/camel-catalog-rest/src/main/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRest.java
@@ -59,9 +59,10 @@ public class CamelConnectorCatalogRest {
     @Path("/findConnector")
     @Produces("application/json")
     @ApiOperation(value = "Find all the connectors from the catalog")
-    public List<ConnectorDto> findConnector(@ApiParam("Whether to include latest version only")
-                                            @QueryParam("latestVersionOnly") boolean latestVersionOnly) {
-        return catalog.findConnector(latestVersionOnly);
+    public List<ConnectorDto> findConnector(@ApiParam(value = "Whether to include latest version only", defaultValue = "true")
+                                            @QueryParam("latestVersionOnly") Boolean latestVersionOnly) {
+        boolean latest = latestVersionOnly != null ? latestVersionOnly : true;
+        return catalog.findConnector(latest);
     }
 
     @GET
@@ -70,20 +71,21 @@ public class CamelConnectorCatalogRest {
     @ApiOperation(value = "Find all the connectors from the catalog")
     public List<ConnectorDto> findConnector(@ApiParam("Filter the connector matching by name, description or labels")
                                             @PathParam("filter") String filter,
-                                            @ApiParam("Whether to include latest version only")
-                                            @QueryParam("latestVersionOnly") boolean latestVersionOnly) {
-        return catalog.findConnector(latestVersionOnly);
+                                            @ApiParam(value = "Whether to include latest version only", defaultValue = "true")
+                                            @QueryParam("latestVersionOnly") Boolean latestVersionOnly) {
+        boolean latest = latestVersionOnly != null ? latestVersionOnly : true;
+        return catalog.findConnector(latest);
     }
 
     @GET
     @Path("/connectorJSon/{groupId}/{artifactId}/{version}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the camel-connector json file for the given connector with the Maven coordinate")
-    public String connectorJSon(@ApiParam("Maven groupdId of the connector")
+    public String connectorJSon(@ApiParam(value = "Maven groupdId of the connector", required = true)
                                 @PathParam("groupId") String groupId,
-                                @ApiParam("Maven artifactId of the connector")
+                                @ApiParam(value = "Maven artifactId of the connector", required = true)
                                 @PathParam("artifactId") String artifactId,
-                                @ApiParam("Maven version of the connector")
+                                @ApiParam(value = "Maven version of the connector", required = true)
                                 @PathParam("version") String version) {
         return catalog.connectorJSon(groupId, artifactId, version);
     }
@@ -92,11 +94,11 @@ public class CamelConnectorCatalogRest {
     @Path("/connectorSchemaJSon/{groupId}/{artifactId}/{version}")
     @Produces("application/json")
     @ApiOperation(value = "Returns the camel-connector-schema json file for the given connector with the Maven coordinate")
-    public String connectorSchemaJSon(@ApiParam("Maven groupdId of the connector")
+    public String connectorSchemaJSon(@ApiParam(value = "Maven groupdId of the connector", required = true)
                                       @PathParam("groupId") String groupId,
-                                      @ApiParam("Maven artifactId of the connector")
+                                      @ApiParam(value = "Maven artifactId of the connector", required = true)
                                       @PathParam("artifactId") String artifactId,
-                                      @ApiParam("Maven version of the connector")
+                                      @ApiParam(value = "Maven version of the connector", required = true)
                                       @PathParam("version") String version) {
         return catalog.connectorSchemaJSon(groupId, artifactId, version);
     }
@@ -104,15 +106,15 @@ public class CamelConnectorCatalogRest {
     @POST
     @Path("/mavenCacheDirectory/{name}")
     @ApiOperation(value = "Configures the Maven cache directory to use when downloading artifacts")
-    public void mavenCacheDirectory(@ApiParam("The name of the cache directory") @PathParam("name") String name) {
+    public void mavenCacheDirectory(@ApiParam(value = "The name of the cache directory", required = true) @PathParam("name") String name) {
         maven.setCacheDirectory(name);
     }
 
     @POST
     @Path("/addMavenRepository/{name}/{url}")
     @ApiOperation(value = "Adds a third party Maven repository to use for downloading Maven artifacts")
-    public void addMavenRepository(@ApiParam("The name of the Maven repository") @PathParam("name") String name,
-                                   @ApiParam("The URL of the Maven repository") @PathParam("url") String url) {
+    public void addMavenRepository(@ApiParam(value = "The name of the Maven repository", required = true) @PathParam("name") String name,
+                                   @ApiParam(value = "The URL of the Maven repository", required = true) @PathParam("url") String url) {
         maven.addMavenRepository(name, url);
     }
 
@@ -120,9 +122,9 @@ public class CamelConnectorCatalogRest {
     @Path("/addConnectorFromMavenArtifact/{groupId}/{artifactId}/{version}")
     @Produces("application/json")
     @ApiOperation(value = "Downloads the Maven artifact and scan for custom Camel connectors which will be added to the catalog and returns the names of the found connectors")
-    public Set<String> addConnectorFromMavenArtifact(@ApiParam("The Maven groupId") @PathParam("groupId") String groupId,
-                                                     @ApiParam("The Maven artifactId") @PathParam("artifactId") String artifactId,
-                                                     @ApiParam("The Maven version") @PathParam("version") String version) {
+    public Set<String> addConnectorFromMavenArtifact(@ApiParam(value = "The Maven groupId", required = true) @PathParam("groupId") String groupId,
+                                                     @ApiParam(value = "The Maven artifactId", required = true) @PathParam("artifactId") String artifactId,
+                                                     @ApiParam(value = "The Maven version", required = true) @PathParam("version") String version) {
         return maven.addArtifactToCatalog(null, catalog, groupId, artifactId, version);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java b/platforms/camel-catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
index df6b2d9..a578092 100644
--- a/platforms/camel-catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
+++ b/platforms/camel-catalog-rest/src/test/java/org/apache/camel/catalog/rest/CamelConnectorCatalogRestTest.java
@@ -73,7 +73,8 @@ public class CamelConnectorCatalogRestTest {
 
     @Test
     public void testFindConnectors() throws Exception {
-        catalog.getCatalog().addConnector("org.apache.camel", "myfoo-connector", "2.19.0", "MyFoo", "my-foo","Something cool", "foo,timer", null, null);
+        catalog.getCatalog().addConnector("org.apache.camel", "myfoo-connector", "2.19.0", "MyFoo", "my-foo", "org.myfoo.connector.MyFooComponent",
+            "Something cool", "foo,timer", null, null, null);
 
         given().
             baseUri("http://localhost:" + port).

http://git-wip-us.apache.org/repos/asf/camel/blob/655916cd/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index bc4d9fa..e45eb67 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -509,6 +509,7 @@ public interface CamelCatalog {
      * @return the constructed endpoint uri
      * @throws java.net.URISyntaxException is thrown if there is encoding error
      */
+    @Deprecated
     String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException;
 
     /**
@@ -520,6 +521,7 @@ public interface CamelCatalog {
      * @return the constructed endpoint uri
      * @throws java.net.URISyntaxException is thrown if there is encoding error
      */
+    @Deprecated
     String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException;
 
     /**