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 2019/08/21 11:17:58 UTC

[camel] branch CAMEL-13870 updated (4aea1c6 -> 2d9e5db)

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

davsclaus pushed a change to branch CAMEL-13870
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from 4aea1c6  CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.
     new ebb5c0e  CAMEL-13870: Regen
     new 353810a  CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.
     new 2d9e5db  CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../camel-file/src/main/docs/file-component.adoc   |  2 +-
 .../camel/component/language/LanguageEndpoint.java |  5 ++
 .../camel/component/language/LanguageProducer.java |  4 ++
 components/readme.adoc                             | 22 +++----
 .../file/FileProducerChmodOptionTest.java          |  4 +-
 .../endpoint/dsl/FileEndpointBuilderFactory.java   | 20 +-----
 core/camel-headersmap/pom.xml                      | 10 +++
 .../camel/support/ScheduledPollEndpoint.java       | 73 ++++++++++------------
 .../modules/ROOT/pages/atomix-map-component.adoc   |  2 +-
 .../ROOT/pages/atomix-messaging-component.adoc     |  2 +-
 .../ROOT/pages/atomix-multimap-component.adoc      |  2 +-
 .../modules/ROOT/pages/atomix-queue-component.adoc |  2 +-
 .../modules/ROOT/pages/atomix-set-component.adoc   |  2 +-
 .../modules/ROOT/pages/atomix-value-component.adoc |  2 +-
 .../modules/ROOT/pages/crypto-cms-component.adoc   |  6 +-
 .../ROOT/pages/iec60870-client-component.adoc      |  2 +-
 .../ROOT/pages/iec60870-server-component.adoc      |  2 +-
 .../modules/ROOT/pages/spring-ws-component.adoc    | 10 +--
 18 files changed, 82 insertions(+), 90 deletions(-)


[camel] 03/03: CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2d9e5db42ba73dfbaaaf330c2db37b5dbe52eb5d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 21 13:16:50 2019 +0200

    CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.
---
 .../java/org/apache/camel/component/language/LanguageEndpoint.java   | 5 +++++
 .../java/org/apache/camel/component/language/LanguageProducer.java   | 4 ++++
 .../org/apache/camel/component/file/FileProducerChmodOptionTest.java | 4 ++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
index 86367ca..f914f8b 100644
--- a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
+++ b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageEndpoint.java
@@ -33,6 +33,8 @@ import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -112,10 +114,13 @@ public class LanguageEndpoint extends ResourceEndpoint {
      */
     protected String resolveScript(String script) throws IOException {
         String answer;
+
         if (ResourceHelper.hasScheme(script)) {
             InputStream is = loadResource(script);
             answer = getCamelContext().getTypeConverter().convertTo(String.class, is);
             IOHelper.close(is);
+        } else if (EndpointHelper.isReferenceParameter(script)) {
+            answer = CamelContextHelper.mandatoryLookup(getCamelContext(), script, String.class);
         } else {
             answer = script;
         }
diff --git a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageProducer.java b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageProducer.java
index f3beac4..8d802ba 100644
--- a/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageProducer.java
+++ b/components/camel-language/src/main/java/org/apache/camel/component/language/LanguageProducer.java
@@ -22,6 +22,7 @@ import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.IOHelper;
@@ -72,6 +73,9 @@ public class LanguageProducer extends DefaultProducer {
                 is = getEndpoint().getResourceAsInputStream();
             } else if (ResourceHelper.hasScheme(script)) {
                 is = ResourceHelper.resolveMandatoryResourceAsInputStream(getEndpoint().getCamelContext(), script);
+            } else if (EndpointHelper.isReferenceParameter(script)) {
+                String ref = "ref:" + script.substring(1);
+                is = ResourceHelper.resolveMandatoryResourceAsInputStream(getEndpoint().getCamelContext(), ref);
             }
 
             if (is != null && !getEndpoint().isBinary()) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
index 31c8ceb..2da0df8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
@@ -103,8 +103,8 @@ public class FileProducerChmodOptionTest extends ContextTestSupport {
             fail("Expected FailedToCreateRouteException");
         } catch (FailedToCreateRouteException e) {
             assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
-            PropertyBindingException pbe = assertIsInstanceOf(PropertyBindingException.class, e.getCause().getCause());
-            assertEquals("chmod", pbe.getPropertyName());
+            IllegalArgumentException iae = assertIsInstanceOf(IllegalArgumentException.class, e.getCause().getCause());
+            assertEquals("chmod option [abc] is not valid", iae.getMessage());
         }
     }
 


[camel] 02/03: CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 353810a37878806f06db9768898f5b425c1c09cc
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 21 12:46:34 2019 +0200

    CAMEL-13870: Fast property configuration of Camel endpoints. Work in progress.
---
 .../camel-file/src/main/docs/file-component.adoc   |  2 +-
 .../endpoint/dsl/FileEndpointBuilderFactory.java   | 20 +-----
 core/camel-headersmap/pom.xml                      | 10 +++
 .../camel/support/ScheduledPollEndpoint.java       | 73 ++++++++++------------
 4 files changed, 44 insertions(+), 61 deletions(-)

diff --git a/components/camel-file/src/main/docs/file-component.adoc b/components/camel-file/src/main/docs/file-component.adoc
index 6b51cf9..fc16ba0 100644
--- a/components/camel-file/src/main/docs/file-component.adoc
+++ b/components/camel-file/src/main/docs/file-component.adoc
@@ -173,7 +173,7 @@ with the following path and query parameters:
 | *initialDelay* (scheduler) | Milliseconds before the first poll starts. You can also specify time values using units, such as 60s (60 seconds), 5m30s (5 minutes and 30 seconds), and 1h (1 hour). | 1000 | long
 | *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. | TRACE | LoggingLevel
 | *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutor Service
-| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component | none | ScheduledPollConsumer Scheduler
+| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component | none | String
 | *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
 | *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
 | *timeUnit* (scheduler) | Time unit for initialDelay and delay options. | MILLISECONDS | TimeUnit
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
index 7d24a7b..cfb4e23 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/FileEndpointBuilderFactory.java
@@ -32,7 +32,6 @@ import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
 import org.apache.camel.spi.ExceptionHandler;
 import org.apache.camel.spi.IdempotentRepository;
 import org.apache.camel.spi.PollingConsumerPollStrategy;
-import org.apache.camel.spi.ScheduledPollConsumerScheduler;
 
 /**
  * The file component is used for reading or writing files.
@@ -1529,24 +1528,7 @@ public interface FileEndpointBuilderFactory {
          * To use a cron scheduler from either camel-spring or camel-quartz
          * component.
          * 
-         * The option is a:
-         * <code>org.apache.camel.spi.ScheduledPollConsumerScheduler</code>
-         * type.
-         * 
-         * Group: scheduler
-         */
-        default FileEndpointConsumerBuilder scheduler(
-                ScheduledPollConsumerScheduler scheduler) {
-            setProperty("scheduler", scheduler);
-            return this;
-        }
-        /**
-         * To use a cron scheduler from either camel-spring or camel-quartz
-         * component.
-         * 
-         * The option will be converted to a
-         * <code>org.apache.camel.spi.ScheduledPollConsumerScheduler</code>
-         * type.
+         * The option is a: <code>java.lang.String</code> type.
          * 
          * Group: scheduler
          */
diff --git a/core/camel-headersmap/pom.xml b/core/camel-headersmap/pom.xml
index 3852bbd..3c0b821 100644
--- a/core/camel-headersmap/pom.xml
+++ b/core/camel-headersmap/pom.xml
@@ -64,6 +64,16 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>spi-annotations</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>meta-annotations</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-mock</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollEndpoint.java b/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollEndpoint.java
index ace9815..d465eb1 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollEndpoint.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ScheduledPollEndpoint.java
@@ -37,6 +37,8 @@ public abstract class ScheduledPollEndpoint extends DefaultEndpoint {
     private static final String SPRING_SCHEDULER = "org.apache.camel.spring.pollingconsumer.SpringScheduledPollConsumerScheduler";
     private static final String QUARTZ_SCHEDULER = "org.apache.camel.pollconsumer.quartz.QuartzScheduledPollConsumerScheduler";
 
+    private transient ScheduledPollConsumerScheduler consumerScheduler;
+
     // if adding more options then align with org.apache.camel.support.ScheduledPollConsumer
     @UriParam(optionalPrefix = "consumer.", defaultValue = "true", label = "consumer,scheduler",
             description = "Whether the scheduler should be auto started.")
@@ -70,8 +72,7 @@ public abstract class ScheduledPollEndpoint extends DefaultEndpoint {
     private boolean greedy;
     @UriParam(optionalPrefix = "consumer.", enums = "none,spring,quartz",
             defaultValue = "none", label = "consumer,scheduler", description = "To use a cron scheduler from either camel-spring or camel-quartz component")
-    private ScheduledPollConsumerScheduler scheduler;
-    private String schedulerName = "none"; // used when configuring scheduler using a string value
+    private String scheduler = "none";
     @UriParam(prefix = "scheduler.", multiValue = true, label = "consumer,scheduler",
             description = "To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler.")
     private Map<String, Object> schedulerProperties;
@@ -111,30 +112,28 @@ public abstract class ScheduledPollEndpoint extends DefaultEndpoint {
             setSchedulerProperties(schedulerProperties);
         }
 
-        if (scheduler == null && schedulerName != null) {
-            if ("none".equals(schedulerName)) {
-                // no cron scheduler in use
-                scheduler = null;
-            } else if ("spring".equals(schedulerName)) {
-                // special for scheduler if its "spring" or "quartz"
-                try {
-                    Class<? extends ScheduledPollConsumerScheduler> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(SPRING_SCHEDULER, ScheduledPollConsumerScheduler.class);
-                    setScheduler(getCamelContext().getInjector().newInstance(clazz));
-                } catch (ClassNotFoundException e) {
-                    throw new IllegalArgumentException("Cannot load " + SPRING_SCHEDULER + " from classpath. Make sure camel-spring.jar is on the classpath.", e);
-                }
-            } else if ("quartz".equals(schedulerName)) {
-                // special for scheduler if its "spring" or "quartz"
-                try {
-                    Class<? extends ScheduledPollConsumerScheduler> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(QUARTZ_SCHEDULER, ScheduledPollConsumerScheduler.class);
-                    setScheduler(getCamelContext().getInjector().newInstance(clazz));
-                } catch (ClassNotFoundException e) {
-                    throw new IllegalArgumentException("Cannot load " + QUARTZ_SCHEDULER + " from classpath. Make sure camel-quartz.jar is on the classpath.", e);
-                }
-            } else {
-                // must refer to a custom scheduler by the given name
-                setScheduler(CamelContextHelper.mandatoryLookup(getCamelContext(), schedulerName, ScheduledPollConsumerScheduler.class));
+        if ("spring".equals(scheduler)) {
+            // special for scheduler if its "spring" or "quartz"
+            try {
+                Class<? extends ScheduledPollConsumerScheduler> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(SPRING_SCHEDULER, ScheduledPollConsumerScheduler.class);
+                consumerScheduler = getCamelContext().getInjector().newInstance(clazz);
+            } catch (ClassNotFoundException e) {
+                throw new IllegalArgumentException("Cannot load " + SPRING_SCHEDULER + " from classpath. Make sure camel-spring.jar is on the classpath.", e);
+            }
+        } else if ("quartz".equals(scheduler)) {
+            // special for scheduler if its "spring" or "quartz"
+            try {
+                Class<? extends ScheduledPollConsumerScheduler> clazz = getCamelContext().getClassResolver().resolveMandatoryClass(QUARTZ_SCHEDULER, ScheduledPollConsumerScheduler.class);
+                consumerScheduler = getCamelContext().getInjector().newInstance(clazz);
+            } catch (ClassNotFoundException e) {
+                throw new IllegalArgumentException("Cannot load " + QUARTZ_SCHEDULER + " from classpath. Make sure camel-quartz.jar is on the classpath.", e);
             }
+        } else if (!"none".equals(scheduler)) {
+            // must refer to a custom scheduler by the given name
+            if (EndpointHelper.isReferenceParameter(scheduler)) {
+                scheduler = scheduler.substring(1);
+            }
+            consumerScheduler = CamelContextHelper.mandatoryLookup(getCamelContext(), scheduler, ScheduledPollConsumerScheduler.class);
         }
     }
 
@@ -189,7 +188,8 @@ public abstract class ScheduledPollEndpoint extends DefaultEndpoint {
             options.put("greedy", isGreedy());
         }
         if (!options.containsKey("scheduler")) {
-            options.put("scheduler", getScheduler());
+            // the scheduler implementation
+            options.put("scheduler", consumerScheduler);
         }
         if (!options.containsKey("schedulerProperties")) {
             options.put("schedulerProperties", getSchedulerProperties());
@@ -332,31 +332,22 @@ public abstract class ScheduledPollEndpoint extends DefaultEndpoint {
         this.greedy = greedy;
     }
 
-    public ScheduledPollConsumerScheduler getScheduler() {
-        return scheduler;
-    }
-
     /**
      * Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler to use as the scheduler for
-     * firing when the polling consumer runs. The default implementation uses the ScheduledExecutorService and
-     * there is a Quartz, and Spring based which supports CRON expressions.
+     * firing when the polling consumer runs. This option is used for referring to one of the built-in schedulers
+     * either <tt>spring</tt>, or <tt>quartz</tt>. Using <tt>none</tt> refers to no scheduler to be used.
      *
      * Notice: If using a custom scheduler then the options for initialDelay, useFixedDelay, timeUnit,
      * and scheduledExecutorService may not be in use. Use the text quartz to refer to use the Quartz scheduler;
      * and use the text spring to use the Spring based; and use the text #myScheduler to refer to a custom scheduler
      * by its id in the Registry. See Quartz page for an example.
      */
-    public void setScheduler(ScheduledPollConsumerScheduler scheduler) {
-        this.scheduler = scheduler;
+    public void setScheduler(String schedulerName) {
+        this.scheduler = schedulerName;
     }
 
-    /**
-     * Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler to use as the scheduler for
-     * firing when the polling consumer runs. This option is used for referring to one of the built-in schedulers
-     * either <tt>spring</tt>, or <tt>quartz</tt>. Using <tt>none</tt> refers to no scheduler to be used.
-     */
-    public void setScheduler(String schedulerName) {
-        this.schedulerName = schedulerName;
+    public String getScheduler() {
+        return scheduler;
     }
 
     public Map<String, Object> getSchedulerProperties() {


[camel] 01/03: CAMEL-13870: Regen

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ebb5c0e5e0aae8d47386a4dcae8077ba00c3bd45
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 21 12:31:01 2019 +0200

    CAMEL-13870: Regen
---
 components/readme.adoc                             | 22 +++++++++++-----------
 .../modules/ROOT/pages/atomix-map-component.adoc   |  2 +-
 .../ROOT/pages/atomix-messaging-component.adoc     |  2 +-
 .../ROOT/pages/atomix-multimap-component.adoc      |  2 +-
 .../modules/ROOT/pages/atomix-queue-component.adoc |  2 +-
 .../modules/ROOT/pages/atomix-set-component.adoc   |  2 +-
 .../modules/ROOT/pages/atomix-value-component.adoc |  2 +-
 .../modules/ROOT/pages/crypto-cms-component.adoc   |  6 +++---
 .../ROOT/pages/iec60870-client-component.adoc      |  2 +-
 .../ROOT/pages/iec60870-server-component.adoc      |  2 +-
 .../modules/ROOT/pages/spring-ws-component.adoc    | 10 +++++-----
 11 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/components/readme.adoc b/components/readme.adoc
index 652f337..803fa2d 100644
--- a/components/readme.adoc
+++ b/components/readme.adoc
@@ -1,7 +1,7 @@
 = Components
 
 // components: START
-Number of Components: 296 in 231 JAR artifacts (0 deprecated)
+Number of Components: 296 in 234 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -46,22 +46,22 @@ Number of Components: 296 in 231 JAR artifacts (0 deprecated)
 | link:camel-atom/src/main/docs/atom-component.adoc[Atom] (camel-atom) +
 `atom:feedUri` | 1.2 | The atom component is used for consuming Atom RSS feeds.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-map-component.adoc[Atomix Map] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-map-component.adoc[Atomix Map] (camel-atomix) +
 `atomix-map:resourceName` | 2.20 | The atomix-map component is used to access Atomix's distributed map.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-messaging-component.adoc[Atomix Messaging] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-messaging-component.adoc[Atomix Messaging] (camel-atomix) +
 `atomix-messaging:resourceName` | 2.20 | The atomix-messaging component is used to access Atomix's group messaging.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-multimap-component.adoc[Atomix MultiMap] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-multimap-component.adoc[Atomix MultiMap] (camel-atomix) +
 `atomix-multimap:resourceName` | 2.20 | The atomix-multimap component is used to access Atomix's distributed multi map.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-queue-component.adoc[Atomix Queue] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-queue-component.adoc[Atomix Queue] (camel-atomix) +
 `atomix-queue:resourceName` | 2.20 | The atomix-queue component is used to access Atomix's distributed queue.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-set-component.adoc[Atomix Set] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-set-component.adoc[Atomix Set] (camel-atomix) +
 `atomix-set:resourceName` | 2.20 | The atomix-set component is used to access Atomix's distributed set.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/atomix-value-component.adoc[Atomix Value] (@@@ARTIFACTID@@@) +
+| link:camel-atomix/src/main/docs/atomix-value-component.adoc[Atomix Value] (camel-atomix) +
 `atomix-value:resourceName` | 2.20 | The atomix-value component is used to access Atomix's distributed value.
 
 | link:camel-avro/src/main/docs/avro-component.adoc[Avro] (camel-avro) +
@@ -199,7 +199,7 @@ Number of Components: 296 in 231 JAR artifacts (0 deprecated)
 | link:camel-crypto/src/main/docs/crypto-component.adoc[Crypto (JCE)] (camel-crypto) +
 `crypto:cryptoOperation:name` | 2.3 | The crypto component is used for signing and verifying exchanges using the Signature Service of the Java Cryptographic Extension (JCE).
 
-| link:@@@ARTIFACTID@@@/src/main/docs/crypto-cms-component.adoc[Crypto CMS] (@@@ARTIFACTID@@@) +
+| link:camel-crypto-cms/src/main/docs/crypto-cms-component.adoc[Crypto CMS] (camel-crypto-cms) +
 `crypto-cms:cryptoOperation:name` | 2.20 | The crypto cms component is used for encrypting data in CMS Enveloped Data format, decrypting CMS Enveloped Data, signing data in CMS Signed Data format, and verifying CMS Signed Data.
 
 | link:camel-cxf/src/main/docs/cxf-component.adoc[CXF] (camel-cxf) +
@@ -385,10 +385,10 @@ Number of Components: 296 in 231 JAR artifacts (0 deprecated)
 | link:camel-http/src/main/docs/http-component.adoc[HTTP] (camel-http) +
 `http:httpUri` | 2.3 | For calling out to external HTTP servers using Apache HTTP Client 4.x.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/iec60870-client-component.adoc[IEC 60870 Client] (@@@ARTIFACTID@@@) +
+| link:camel-iec60870/src/main/docs/iec60870-client-component.adoc[IEC 60870 Client] (camel-iec60870) +
 `iec60870-client:uriPath` | 2.20 | IEC 60870 component used for telecontrol (supervisory control and data acquisition) such as controlling electric power transmission grids and other geographically widespread control systems.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/iec60870-server-component.adoc[IEC 60870 Server] (@@@ARTIFACTID@@@) +
+| link:camel-iec60870/src/main/docs/iec60870-server-component.adoc[IEC 60870 Server] (camel-iec60870) +
 `iec60870-server:uriPath` | 2.20 | IEC 60870 component used for telecontrol (supervisory control and data acquisition) such as controlling electric power transmission grids and other geographically widespread control systems.
 
 | link:camel-ignite/src/main/docs/ignite-cache-component.adoc[Ignite Cache] (camel-ignite) +
@@ -790,7 +790,7 @@ Number of Components: 296 in 231 JAR artifacts (0 deprecated)
 | link:camel-spring-redis/src/main/docs/spring-redis-component.adoc[Spring Redis] (camel-spring-redis) +
 `spring-redis:host:port` | 2.11 | The spring-redis component allows sending and receiving messages from Redis.
 
-| link:@@@ARTIFACTID@@@/src/main/docs/spring-ws-component.adoc[Spring WebService] (@@@ARTIFACTID@@@) +
+| link:camel-spring-ws/src/main/docs/spring-ws-component.adoc[Spring WebService] (camel-spring-ws) +
 `spring-ws:type:lookupKey:webServiceEndpointUri` | 2.6 | The spring-ws component is used for SOAP WebServices using Spring WebServices.
 
 | link:camel-sql/src/main/docs/sql-component.adoc[SQL] (camel-sql) +
diff --git a/docs/components/modules/ROOT/pages/atomix-map-component.adoc b/docs/components/modules/ROOT/pages/atomix-map-component.adoc
index 67db23c..ed1d0a8 100644
--- a/docs/components/modules/ROOT/pages/atomix-map-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-map-component.adoc
@@ -72,7 +72,7 @@ with the following path and query parameters:
 | *key* (common) | The key to use if none is set in the header or to listen for events for a specific key. |  | Object
 | *nodes* (common) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (common) | The header that wil carry the result. |  | String
-| *transport* (common) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *ttl* (common) | The resource ttl. |  | long
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
diff --git a/docs/components/modules/ROOT/pages/atomix-messaging-component.adoc b/docs/components/modules/ROOT/pages/atomix-messaging-component.adoc
index 4c6e80b..89fa55c 100644
--- a/docs/components/modules/ROOT/pages/atomix-messaging-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-messaging-component.adoc
@@ -73,7 +73,7 @@ with the following path and query parameters:
 | *memberName* (common) | The Atomix Group member name |  | String
 | *nodes* (common) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (common) | The header that wil carry the result. |  | String
-| *transport* (common) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
diff --git a/docs/components/modules/ROOT/pages/atomix-multimap-component.adoc b/docs/components/modules/ROOT/pages/atomix-multimap-component.adoc
index 2204a5b..1ffb7fc 100644
--- a/docs/components/modules/ROOT/pages/atomix-multimap-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-multimap-component.adoc
@@ -72,7 +72,7 @@ with the following path and query parameters:
 | *key* (consumer) | The key to use if none is set in the header or to listen for events for a specific key. |  | Object
 | *nodes* (consumer) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (consumer) | The header that wil carry the result. |  | String
-| *transport* (consumer) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (consumer) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *ttl* (consumer) | The resource ttl. |  | long
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
diff --git a/docs/components/modules/ROOT/pages/atomix-queue-component.adoc b/docs/components/modules/ROOT/pages/atomix-queue-component.adoc
index 78d9571..1003367 100644
--- a/docs/components/modules/ROOT/pages/atomix-queue-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-queue-component.adoc
@@ -70,7 +70,7 @@ with the following path and query parameters:
 | *defaultAction* (common) | The default action. | ADD | Action
 | *nodes* (common) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (common) | The header that wil carry the result. |  | String
-| *transport* (common) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
diff --git a/docs/components/modules/ROOT/pages/atomix-set-component.adoc b/docs/components/modules/ROOT/pages/atomix-set-component.adoc
index 43bef07..4cf4806 100644
--- a/docs/components/modules/ROOT/pages/atomix-set-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-set-component.adoc
@@ -70,7 +70,7 @@ with the following path and query parameters:
 | *defaultAction* (common) | The default action. | ADD | Action
 | *nodes* (common) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (common) | The header that wil carry the result. |  | String
-| *transport* (common) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *ttl* (common) | The resource ttl. |  | long
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
diff --git a/docs/components/modules/ROOT/pages/atomix-value-component.adoc b/docs/components/modules/ROOT/pages/atomix-value-component.adoc
index 30e6c5c..8ce04f1 100644
--- a/docs/components/modules/ROOT/pages/atomix-value-component.adoc
+++ b/docs/components/modules/ROOT/pages/atomix-value-component.adoc
@@ -70,7 +70,7 @@ with the following path and query parameters:
 | *defaultAction* (common) | The default action. | SET | Action
 | *nodes* (common) | The address of the nodes composing the cluster. |  | String
 | *resultHeader* (common) | The header that wil carry the result. |  | String
-| *transport* (common) | Sets the Atomix transport. | io.atomix.catalyst.transport.netty.NettyTransport | Transport
+| *transportClassName* (common) | The class name (fqn) of the Atomix transport | io.atomix.catalyst.transport.netty.NettyTransport | String
 | *ttl* (common) | The resource ttl. |  | long
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
diff --git a/docs/components/modules/ROOT/pages/crypto-cms-component.adoc b/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
index 8583a92..3585b75 100644
--- a/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
+++ b/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
@@ -79,7 +79,7 @@ with the following path and query parameters:
 | *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
 | *password* (decrypt) | Sets the password of the private keys. It is assumed that all private keys in the keystore have the same password. If not set then it is assumed that the password of the private keys is given by the keystore password given in the KeyStoreParameters. |  | Char[]
-| *fromBase64* (decrypt_verify) | If true then the CMS message is base 64 encoded and must be decoded during the processing. Default value is false. | false | Boolean
+| *fromBase64* (decrypt_verify) | If true then the CMS message is base 64 encoded and must be decoded during the processing. Default value is false. | false | boolean
 | *contentEncryptionAlgorithm* (encrypt) | Encryption algorithm, for example DESede/CBC/PKCS5Padding. Further possible values: DESede/CBC/PKCS5Padding, AES/CBC/PKCS5Padding, Camellia/CBC/PKCS5Padding, CAST5/CBC/PKCS5Padding. |  | String
 | *originatorInformation Provider* (encrypt) | Provider for the originator info. See \https://tools.ietf.org/html/rfc5652#section-6.1. The default value is null. |  | OriginatorInformation Provider
 | *recipient* (encrypt) | Recipient Info: reference to a bean which implements the interface org.apache.camel.component.crypto.cms.api.TransRecipientInfo |  | List
@@ -88,8 +88,8 @@ with the following path and query parameters:
 | *toBase64* (encrypt_sign) | Indicates whether the Signed Data or Enveloped Data instance shall be base 64 encoded. Default value is false. | false | Boolean
 | *includeContent* (sign) | Indicates whether the signed content should be included into the Signed Data instance. If false then a detached Signed Data instance is created in the header CamelCryptoCmsSignedData. | true | Boolean
 | *signer* (sign) | Signer information: reference to bean(s) which implements org.apache.camel.component.crypto.cms.api.SignerInfo. Multiple values can be separated by comma |  | String
-| *signedDataHeaderBase64* (verify) | Indicates whether the value in the header CamelCryptoCmsSignedData is base64 encoded. Default value is false. Only relevant for detached signatures. In the detached signature case, the header contains the Signed Data object. | false | Boolean
-| *verifySignaturesOfAll Signers* (verify) | If true then the signatures of all signers contained in the Signed Data object are verified. If false then only one signature whose signer info matches with one of the specified certificates is verified. Default value is true. | true | Boolean
+| *signedDataHeaderBase64* (verify) | Indicates whether the value in the header CamelCryptoCmsSignedData is base64 encoded. Default value is false. Only relevant for detached signatures. In the detached signature case, the header contains the Signed Data object. | false | boolean
+| *verifySignaturesOfAll Signers* (verify) | If true then the signatures of all signers contained in the Signed Data object are verified. If false then only one signature whose signer info matches with one of the specified certificates is verified. Default value is true. | true | boolean
 |===
 // endpoint options: END
 // spring-boot-auto-configure options: START
diff --git a/docs/components/modules/ROOT/pages/iec60870-client-component.adoc b/docs/components/modules/ROOT/pages/iec60870-client-component.adoc
index a7ba118..b953838 100644
--- a/docs/components/modules/ROOT/pages/iec60870-client-component.adoc
+++ b/docs/components/modules/ROOT/pages/iec60870-client-component.adoc
@@ -93,7 +93,7 @@ with the following path and query parameters:
 | *timeout1* (connection) | Timeout T1 in milliseconds. | 15000 | int
 | *timeout2* (connection) | Timeout T2 in milliseconds. | 10000 | int
 | *timeout3* (connection) | Timeout T3 in milliseconds. | 20000 | int
-| *causeSourceAddress* (data) | Whether to include the source address | true | boolean
+| *causeSourceAddress* (data) | Whether to include the source address |  | byte
 | *ignoreBackgroundScan* (data) | Whether background scan transmissions should be ignored. | true | boolean
 | *ignoreDaylightSavingTime* (data) | Whether to ignore or respect DST | false | boolean
 | *timeZone* (data) | The timezone to use. May be any Java time zone string | UTC | TimeZone
diff --git a/docs/components/modules/ROOT/pages/iec60870-server-component.adoc b/docs/components/modules/ROOT/pages/iec60870-server-component.adoc
index 0d5e39d..fb47c82 100644
--- a/docs/components/modules/ROOT/pages/iec60870-server-component.adoc
+++ b/docs/components/modules/ROOT/pages/iec60870-server-component.adoc
@@ -97,7 +97,7 @@ with the following path and query parameters:
 | *timeout1* (connection) | Timeout T1 in milliseconds. | 15000 | int
 | *timeout2* (connection) | Timeout T2 in milliseconds. | 10000 | int
 | *timeout3* (connection) | Timeout T3 in milliseconds. | 20000 | int
-| *causeSourceAddress* (data) | Whether to include the source address | true | boolean
+| *causeSourceAddress* (data) | Whether to include the source address |  | byte
 | *ignoreBackgroundScan* (data) | Whether background scan transmissions should be ignored. | true | boolean
 | *ignoreDaylightSavingTime* (data) | Whether to ignore or respect DST | false | boolean
 | *timeZone* (data) | The timezone to use. May be any Java time zone string | UTC | TimeZone
diff --git a/docs/components/modules/ROOT/pages/spring-ws-component.adoc b/docs/components/modules/ROOT/pages/spring-ws-component.adoc
index 6831aed..1b88ba8 100644
--- a/docs/components/modules/ROOT/pages/spring-ws-component.adoc
+++ b/docs/components/modules/ROOT/pages/spring-ws-component.adoc
@@ -107,19 +107,20 @@ spring-ws:type:lookupKey:webServiceEndpointUri
 
 with the following path and query parameters:
 
-=== Path Parameters (3 parameters):
+=== Path Parameters (4 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *type* | Endpoint mapping type if endpoint mapping is used. rootqname - Offers the option to map web service requests based on the qualified name of the root element contained in the message. soapaction - Used to map web service requests based on the SOAP action specified in the header of the message. uri - In order to map web service requests that target a specific URI. xpathresult - Used to map web service requests based on the evaluation of an XPath expression against the incoming m [...]
-| *lookupKey* | Endpoint mapping key if endpoint mapping is used |  | String
 | *webServiceEndpointUri* | The default Web Service endpoint uri to use for the producer. |  | String
+| *endpointMappingType* | Endpoint mapping type if endpoint mapping is used. rootqname - Offers the option to map web service requests based on the qualified name of the root element contained in the message. soapaction - Used to map web service requests based on the SOAP action specified in the header of the message. uri - In order to map web service requests that target a specific URI. xpathresult - Used to map web service requests based on the evaluation of an XPath expression against [...]
+| *endpointMappingLookupKey* | Endpoint mapping key if endpoint mapping is used |  | String
+| *expression* | The XPath expression to use when option type=xpathresult. Then this option is required to be configured. |  | String
 |===
 
 
-=== Query Parameters (24 parameters):
+=== Query Parameters (23 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
@@ -129,7 +130,6 @@ with the following path and query parameters:
 | *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
 | *endpointDispatcher* (consumer) | Spring org.springframework.ws.server.endpoint.MessageEndpoint for dispatching messages received by Spring-WS to a Camel endpoint, to integrate with existing (legacy) endpoint mappings like PayloadRootQNameEndpointMapping, SoapActionEndpointMapping, etc. |  | CamelEndpointDispatcher
 | *endpointMapping* (consumer) | Reference to an instance of org.apache.camel.component.spring.ws.bean.CamelEndpointMapping in the Registry/ApplicationContext. Only one bean is required in the registry to serve all Camel/Spring-WS endpoints. This bean is auto-discovered by the MessageDispatcher and used to map requests to Camel endpoints based on characteristics specified on the endpoint (like root QName, SOAP action, etc) |  | CamelSpringWSEndpoint Mapping
-| *expression* (consumer) | The XPath expression to use when option type=xpathresult. Then this option is required to be configured. |  | String
 | *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
 | *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
 | *allowResponseAttachment Override* (producer) | Option to override soap response attachments in in/out exchange with attachments from the actual service layer. If the invoked service appends or rewrites the soap attachments this option when set to true, allows the modified soap attachments to be overwritten in in/out message attachments | false | boolean