You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dj...@apache.org on 2020/03/13 01:14:08 UTC

[camel] branch issue-14698-rearrange-adocs created (now a320dae)

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

djencks pushed a change to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git.


      at a320dae  yarn.lock update from adding gulp-filter

This branch includes the following new commits:

     new 2ef4774  rearrange user-manual sources so they don't need copying
     new e318725  update UpdateReadmeMojo.java to new docs structure; set correct location of eip docs
     new d42e6d9  constant for playbook location
     new 13b4a1a  tooling generated update to eip pages, from correcting expected location
     new b142a20  use antora xref-checker
     new 25978be  auto-generated nav change
     new 84eccb3  move eip images to eips module
     new ce69d8d  fix xrefs in eip pages
     new 28ee340  fix user-manual eip xrefs
     new 3824467  fix user-manual languages xrefs
     new 4ab82aa  fix component eip xrefs
     new f8aec16  fix fixable language xrefs in component.  Generated broken xrefs remain in index.adoc
     new 31dc7ba  move languages and properties-component to components: fix xrefs: user-manual
     new 5a23033  move all languages under components:languages
     new c0ed7cf  separate languages nav file
     new fd1970f  auto-copies of component language files in their new location
     new d442b71  update components index page generation
     new a320dae  yarn.lock update from adding gulp-filter

The 18 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.



[camel] 04/18: tooling generated update to eip pages, from correcting expected location

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 13b4a1a87ad183d6d0e8d327b2d2afb4ca39c91f
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 11:22:00 2020 -0700

    tooling generated update to eip pages, from correcting expected location
---
 .../docs/modules/eips/pages/aggregate-eip.adoc     | 22 ++++-----
 .../src/main/docs/modules/eips/pages/bean-eip.adoc |  4 +-
 .../modules/eips/pages/circuitBreaker-eip.adoc     |  6 +--
 .../docs/modules/eips/pages/claimCheck-eip.adoc    |  2 +-
 .../main/docs/modules/eips/pages/delay-eip.adoc    |  4 +-
 .../docs/modules/eips/pages/dynamicRouter-eip.adoc |  4 +-
 .../main/docs/modules/eips/pages/enrich-eip.adoc   | 10 ++--
 .../main/docs/modules/eips/pages/failover-eip.adoc |  6 +--
 .../eips/pages/hystrixConfiguration-eip.adoc       | 56 +++++++++++-----------
 .../modules/eips/pages/idempotentConsumer-eip.adoc |  8 ++--
 .../src/main/docs/modules/eips/pages/log-eip.adoc  |  2 +-
 .../src/main/docs/modules/eips/pages/loop-eip.adoc |  4 +-
 .../docs/modules/eips/pages/multicast-eip.adoc     | 16 +++----
 .../docs/modules/eips/pages/onFallback-eip.adoc    |  2 +-
 .../docs/modules/eips/pages/pollEnrich-eip.adoc    | 10 ++--
 .../docs/modules/eips/pages/recipientList-eip.adoc | 20 ++++----
 .../eips/pages/resilience4jConfiguration-eip.adoc  | 18 +++++++
 .../src/main/docs/modules/eips/pages/saga-eip.adoc |  8 ++--
 .../docs/modules/eips/pages/serviceCall-eip.adoc   | 10 ++--
 .../main/docs/modules/eips/pages/sticky-eip.adoc   |  2 +-
 .../main/docs/modules/eips/pages/threads-eip.adoc  |  4 +-
 .../main/docs/modules/eips/pages/throttle-eip.adoc |  2 +-
 .../src/main/docs/modules/eips/pages/to-eip.adoc   |  2 +-
 .../src/main/docs/modules/eips/pages/toD-eip.adoc  |  4 +-
 .../main/docs/modules/eips/pages/weighted-eip.adoc |  2 +-
 .../main/docs/modules/eips/pages/wireTap-eip.adoc  |  6 +--
 26 files changed, 125 insertions(+), 109 deletions(-)

diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
index 923517d..077725c 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
@@ -22,30 +22,30 @@ The Aggregate EIP supports 27 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *correlationExpression* | *Required* The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option. |  | NamespaceAware Expression
-| *completionPredicate* | A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate. |  | NamespaceAware Expression
-| *completionTimeoutExpression* | Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout c [...]
-| *completionSizeExpression* | Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. |  | NamespaceAware Expression
-| *optimisticLockRetryPolicy* | Allows to configure retry settings when using optimistic locking. |  | OptimisticLockRetry PolicyDefinition
+| *correlationExpression* | *Required* The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option. |  | ExpressionSubElementDefinition
+| *completionPredicate* | A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate. |  | ExpressionSubElementDefinition
+| *completionTimeoutExpression* | Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout c [...]
+| *completionSizeExpression* | Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. |  | ExpressionSubElementDefinition
+| *optimisticLockRetryPolicy* | Allows to configure retry settings when using optimistic locking. |  | OptimisticLockRetryPolicyDefinition
 | *parallelProcessing* | When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel creates a default pool with 10 concurrent threads. | false | Boolean
-| *optimisticLocking* | Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository. | false | Boolean
+| *optimisticLocking* | Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository . | false | Boolean
 | *executorServiceRef* | If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using parallelProcessing this custom thread pool is used to send out aggregated exchanges as well. |  | String
-| *timeoutCheckerExecutor ServiceRef* | If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator. |  | String
-| *aggregationRepositoryRef* | Sets the custom aggregate repository to use Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository |  | String
+| *timeoutCheckerExecutorService Ref* | If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator. |  | String
+| *aggregationRepositoryRef* | Sets the custom aggregate repository to use. Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository |  | String
 | *strategyRef* | A reference to lookup the AggregationStrategy in the Registry. Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains the merged exchanges and newExchange is of course the new incoming Exchange. |  | String
 | *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
 | *strategyMethodAllowNull* | If this option is false then the aggregate method is not used for the very first aggregation. If this option is true then null values is used as the oldExchange (at the very first aggregation), when using POJOs as the AggregationStrategy. | false | Boolean
 | *completionSize* | Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. |  | Integer
 | *completionInterval* | A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a background task which is triggered every period. You cannot use this option together with completionTimeout, only one of them can be used. |  | Long
 | *completionTimeout* | Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker run [...]
-| *completionTimeoutChecker Interval* | Interval in millis that is used by the background task that checks for timeouts (org.apache.camel.TimeoutMap). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals. | 1000 | Long
+| *completionTimeoutChecker Interval* | Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals. | 1000 | Long
 | *completionFromBatchConsumer* | Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with discardOnAggregationFailure. | false | Boolean
 | *completionOnNewCorrelation Group* | Enables completion on all previous groups when a new incoming correlation group. This can for example be used to complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1 correlation group can be in progress as when a new correlation group starts, then the previous groups is forced completed. | false | Boolean
 | *eagerCheckCompletion* | Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange. | false | Boolean
-| *ignoreInvalidCorrelation Keys* | If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange. | false | Boolean
+| *ignoreInvalidCorrelationKeys* | If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange. | false | Boolean
 | *closeCorrelationKeyOn Completion* | Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been closed, it will be defined and a ClosedCorrelationKeyException is thrown. |  | Integer
 | *discardOnCompletionTimeout* | Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not sent out of the aggregator. | false | Boolean
-| *discardOnAggregationFailure* | Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy. This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer. | false | Boolean
+| *discardOnAggregationFailure* | Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer. | false | Boolean
 | *forceCompletionOnStop* | Indicates to complete all current aggregated exchanges when the context is stopped | false | Boolean
 | *completeAllOnStop* | Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is [...]
 | *aggregateControllerRef* | To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator. |  | String
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
index 9b997493..6de8313 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
@@ -24,8 +24,8 @@ The Bean EIP supports 5 options which are listed below:
 | *ref* | Sets a reference to a bean to use |  | String
 | *method* | Sets the method name on the bean to use |  | String
 | *beanType* | Sets the Class of the bean |  | String
-| *cache* | *Deprecated* Use scope option instead. |  | Boolean
-| *scope* | Scope of bean. See below for more details. | Singleton | String |
+| *cache* | *Deprecated* Use singleton option instead | true | Boolean
+| *scope* | Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance multiple times while processing  [...]
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
index 46909dc..7c60200 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
@@ -1,5 +1,4 @@
-[[circuitBreaker-eip]]
-= CircuitBreaker EIP
+= Circuit Breaker EIP
 
 The Circuit Breaker pattern is inspired by the real-world electrical circuit breaker,
 which is used to detect excessive current draw and fail fast to protect electrical equipment.
@@ -57,5 +56,4 @@ And in XML DSL:
 Camel provides two implementations of this pattern:
 
 * xref:hystrix-eip.adoc[Hystrix] - Using the Netflix Hystrix implementation
-* xref:resilience4j-eip.adoc[Resilience4j] - Using the Resilience4j implementation
-
+* xref:resilience4j-eip.adoc[Resilience4j] - Using the Resilience4j implementation
\ No newline at end of file
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
index c7c238b..4f0d729 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
@@ -19,7 +19,7 @@ The Claim Check EIP supports 5 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *operation* | *Required* The claim check operation to use. The following operations is supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and remove the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key). |  | ClaimCheckOperation
+| *operation* | The claim check operation to use. The following operations is supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and remove the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key). |  | ClaimCheckOperation
 | *key* | To use a specific key for claim check id (for dynamic keys use simple language syntax as the key). |  | String
 | *filter* | Specified a filter to control what data gets merging data back from the claim check repository. The following syntax is supported: body - to aggregate the message body attachments - to aggregate all the message attachments headers - to aggregate all the message headers header:pattern - to aggregate all the message headers that matches the pattern. The pattern uses the following rules are applied in this order: exact match, returns true wildcard match (pattern ends with a and [...]
 | *strategyRef* | To use a custom AggregationStrategy instead of the default implementation. Notice you cannot use both custom aggregation strategy and configure data at the same time. |  | String
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc
index 8b0f273..58af86a 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc
@@ -11,8 +11,8 @@ The Delay EIP supports 3 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *executorServiceRef* | Refers to a custom Thread Pool if asyncDelay has been enabled. |  | String
-| *asyncDelayed* | Enables asynchronous delay which means the thread will not block while delaying. | true | Boolean
-| *callerRunsWhenRejected* | Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true | true | Boolean
+| *asyncDelayed* | Enables asynchronous delay which means the thread will not block while delaying. | true | String
+| *callerRunsWhenRejected* | Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true | true | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
index 70010e3..3453e72e 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
@@ -26,8 +26,8 @@ The Dynamic Router EIP supports 3 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *uriDelimiter* | Sets the uri delimiter to use | , | String
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
+| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint |  | String
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc
index 8f40c81..5a36c15 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc
@@ -15,11 +15,11 @@ The Enrich EIP supports 7 options which are listed below:
 | Name | Description | Default | Type
 | *strategyRef* | Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message. |  | String
 | *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. | false | Boolean
-| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. | false | Boolean
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduc [...]
-| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
+| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. |  | String
+| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. |  | String
+| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work. |  | String
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduc [...]
+| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc
index e1a7711..2abcd9f 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc
@@ -12,9 +12,9 @@ The Failover EIP supports 4 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *exception* | A list of class names for specific exceptions to monitor. If no exceptions is configured then all exceptions is monitored |  | List
-| *roundRobin* | Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use wh [...]
-| *sticky* | Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balanci [...]
-| *maximumFailoverAttempts* | A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. his option can be used whether or not roundRobin is enabled or not. | -1 | Integer
+| *roundRobin* | Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use wh [...]
+| *sticky* | Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balanci [...]
+| *maximumFailoverAttempts* | A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. his option can be used whether or not roundRobin is enabled or not. | -1 | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc
index 877b26b..9c6bef2 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc
@@ -10,34 +10,34 @@ The Hystrix Configuration EIP supports 31 options which are listed below:
 | Name | Description | Default | Type
 | *groupKey* | Sets the group key to use. The default value is CamelHystrix. | CamelHystrix | String
 | *threadPoolKey* | Sets the thread pool key to use. Will by default use the same value as groupKey has been configured to use. | CamelHystrix | String
-| *circuitBreakerEnabled* | Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic will be used and all requests permitted. This is similar in effect to circuitBreakerForceClosed() except that continues tracking metrics and knowing whether it should be open/closed, this property results in not even instantiating a circuit-breaker. | true | Boolean
-| *circuitBreakerError ThresholdPercentage* | Error percentage threshold (as whole number such as 50) at which point the circuit breaker will trip open and reject requests. It will stay tripped for the duration defined in circuitBreakerSleepWindowInMilliseconds; The error percentage this is compared against comes from HystrixCommandMetrics.getHealthCounts(). | 50 | Integer
-| *circuitBreakerForceClosed* | If true the HystrixCircuitBreaker#allowRequest() will always return true to allow requests regardless of the error percentage from HystrixCommandMetrics.getHealthCounts(). The circuitBreakerForceOpen() property takes precedence so if it set to true this property does nothing. | false | Boolean
-| *circuitBreakerForceOpen* | If true the HystrixCircuitBreaker.allowRequest() will always return false, causing the circuit to be open (tripped) and reject all requests. This property takes precedence over circuitBreakerForceClosed(); | false | Boolean
-| *circuitBreakerRequestVolume Threshold* | Minimum number of requests in the metricsRollingStatisticalWindowInMilliseconds() that must exist before the HystrixCircuitBreaker will trip. If below this number the circuit will not trip regardless of error percentage. | 20 | Integer
-| *circuitBreakerSleepWindow InMilliseconds* | The time in milliseconds after a HystrixCircuitBreaker trips open that it should wait before trying requests again. | 5000 | Integer
-| *executionIsolationSemaphore MaxConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.run(). Requests beyond the concurrent limit will be rejected. Applicable only when executionIsolationStrategy == SEMAPHORE. | 20 | Integer
+| *circuitBreakerEnabled* | Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic will be used and all requests permitted. This is similar in effect to circuitBreakerForceClosed() except that continues tracking metrics and knowing whether it should be open/closed, this property results in not even instantiating a circuit-breaker. | true | String
+| *circuitBreakerErrorThreshold Percentage* | Error percentage threshold (as whole number such as 50) at which point the circuit breaker will trip open and reject requests. It will stay tripped for the duration defined in circuitBreakerSleepWindowInMilliseconds; The error percentage this is compared against comes from HystrixCommandMetrics.getHealthCounts(). | 50 | String
+| *circuitBreakerForceClosed* | If true the HystrixCircuitBreaker#allowRequest() will always return true to allow requests regardless of the error percentage from HystrixCommandMetrics.getHealthCounts(). The circuitBreakerForceOpen() property takes precedence so if it set to true this property does nothing. | false | String
+| *circuitBreakerForceOpen* | If true the HystrixCircuitBreaker.allowRequest() will always return false, causing the circuit to be open (tripped) and reject all requests. This property takes precedence over circuitBreakerForceClosed(); | false | String
+| *circuitBreakerRequestVolume Threshold* | Minimum number of requests in the metricsRollingStatisticalWindowInMilliseconds() that must exist before the HystrixCircuitBreaker will trip. If below this number the circuit will not trip regardless of error percentage. | 20 | String
+| *circuitBreakerSleepWindowIn Milliseconds* | The time in milliseconds after a HystrixCircuitBreaker trips open that it should wait before trying requests again. | 5000 | String
+| *executionIsolationSemaphoreMax ConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.run(). Requests beyond the concurrent limit will be rejected. Applicable only when executionIsolationStrategy == SEMAPHORE. | 20 | String
 | *executionIsolationStrategy* | What isolation strategy HystrixCommand.run() will be executed with. If THREAD then it will be executed on a separate thread and concurrent requests limited by the number of threads in the thread-pool. If SEMAPHORE then it will be executed on the calling thread and concurrent requests limited by the semaphore count. | THREAD | String
-| *executionIsolationThread InterruptOnTimeout* | Whether the execution thread should attempt an interrupt (using Future#cancel) when a thread times out. Applicable only when executionIsolationStrategy() == THREAD. | true | Boolean
-| *executionTimeoutIn Milliseconds* | Time in milliseconds at which point the command will timeout and halt execution. If executionIsolationThreadInterruptOnTimeout == true and the command is thread-isolated, the executing thread will be interrupted. If the command is semaphore-isolated and a HystrixObservableCommand, that command will get unsubscribed. | 1000 | Integer
-| *executionTimeoutEnabled* | Whether the timeout mechanism is enabled for this command | true | Boolean
-| *fallbackIsolationSemaphore MaxConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.getFallback(). Requests beyond the concurrent limit will fail-fast and not attempt retrieving a fallback. | 10 | Integer
-| *fallbackEnabled* | Whether HystrixCommand.getFallback() should be attempted when failure occurs. | true | Boolean
-| *metricsHealthSnapshot IntervalInMilliseconds* | Time in milliseconds to wait between allowing health snapshots to be taken that calculate success and error percentages and affect HystrixCircuitBreaker.isOpen() status. On high-volume circuits the continual calculation of error percentage can become CPU intensive thus this controls how often it is calculated. | 500 | Integer
-| *metricsRollingPercentile BucketSize* | Maximum number of values stored in each bucket of the rolling percentile. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10 | Integer
-| *metricsRollingPercentile Enabled* | Whether percentile metrics should be captured using HystrixRollingPercentile inside HystrixCommandMetrics. | true | Boolean
-| *metricsRollingPercentile WindowInMilliseconds* | Duration of percentile rolling window in milliseconds. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10000 | Integer
-| *metricsRollingPercentile WindowBuckets* | Number of buckets the rolling percentile window is broken into. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 6 | Integer
-| *metricsRollingStatistical WindowInMilliseconds* | This property sets the duration of the statistical rolling window, in milliseconds. This is how long metrics are kept for the thread pool. The window is divided into buckets and rolls by those increments. | 10000 | Integer
-| *metricsRollingStatistical WindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside HystrixCommandMetrics. | 10 | Integer
-| *requestLogEnabled* | Whether HystrixCommand execution and events should be logged to HystrixRequestLog. | true | Boolean
-| *corePoolSize* | Core thread-pool size that gets passed to java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) | 10 | Integer
-| *maximumSize* | Maximum thread-pool size that gets passed to ThreadPoolExecutor#setMaximumPoolSize(int). This is the maximum amount of concurrency that can be supported without starting to reject HystrixCommands. Please note that this setting only takes effect if you also set allowMaximumSizeToDivergeFromCoreSize | 10 | Integer
-| *keepAliveTime* | Keep-alive time in minutes that gets passed to {link ThreadPoolExecutor#setKeepAliveTime(long, TimeUnit)} | 1 | Integer
-| *maxQueueSize* | Max queue size that gets passed to BlockingQueue in HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect the instantiation of a threadpool - it is not eliglible to change a queue size on the fly. For that, use queueSizeRejectionThreshold(). | -1 | Integer
-| *queueSizeRejectionThreshold* | Queue size rejection threshold is an artificial max size at which rejections will occur even if maxQueueSize has not been reached. This is done because the maxQueueSize of a BlockingQueue can not be dynamically changed and we want to support dynamically changing the queue size that affects rejections. This is used by HystrixCommand when queuing a thread for execution. | 5 | Integer
-| *threadPoolRollingNumber StatisticalWindowIn Milliseconds* | Duration of statistical rolling window in milliseconds. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10000 | Integer
-| *threadPoolRollingNumber StatisticalWindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10 | Integer
-| *allowMaximumSizeToDiverge FromCoreSize* | Allows the configuration for maximumSize to take effect. That value can then be equal to, or higher, than coreSize | false | Boolean
+| *executionIsolationThread InterruptOnTimeout* | Whether the execution thread should attempt an interrupt (using Future#cancel ) when a thread times out. Applicable only when executionIsolationStrategy() == THREAD. | true | String
+| *executionTimeoutInMilliseconds* | Time in milliseconds at which point the command will timeout and halt execution. If executionIsolationThreadInterruptOnTimeout == true and the command is thread-isolated, the executing thread will be interrupted. If the command is semaphore-isolated and a HystrixObservableCommand, that command will get unsubscribed. | 1000 | String
+| *executionTimeoutEnabled* | Whether the timeout mechanism is enabled for this command | true | String
+| *fallbackIsolationSemaphoreMax ConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.getFallback(). Requests beyond the concurrent limit will fail-fast and not attempt retrieving a fallback. | 10 | String
+| *fallbackEnabled* | Whether HystrixCommand.getFallback() should be attempted when failure occurs. | true | String
+| *metricsHealthSnapshotInterval InMilliseconds* | Time in milliseconds to wait between allowing health snapshots to be taken that calculate success and error percentages and affect HystrixCircuitBreaker.isOpen() status. On high-volume circuits the continual calculation of error percentage can become CPU intensive thus this controls how often it is calculated. | 500 | String
+| *metricsRollingPercentileBucket Size* | Maximum number of values stored in each bucket of the rolling percentile. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10 | String
+| *metricsRollingPercentile Enabled* | Whether percentile metrics should be captured using HystrixRollingPercentile inside HystrixCommandMetrics. | true | String
+| *metricsRollingPercentileWindow InMilliseconds* | Duration of percentile rolling window in milliseconds. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10000 | String
+| *metricsRollingPercentileWindow Buckets* | Number of buckets the rolling percentile window is broken into. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 6 | String
+| *metricsRollingStatistical WindowInMilliseconds* | This property sets the duration of the statistical rolling window, in milliseconds. This is how long metrics are kept for the thread pool. The window is divided into buckets and rolls by those increments. | 10000 | String
+| *metricsRollingStatistical WindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside HystrixCommandMetrics. | 10 | String
+| *requestLogEnabled* | Whether HystrixCommand execution and events should be logged to HystrixRequestLog. | true | String
+| *corePoolSize* | Core thread-pool size that gets passed to java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) | 10 | String
+| *maximumSize* | Maximum thread-pool size that gets passed to ThreadPoolExecutor#setMaximumPoolSize(int) . This is the maximum amount of concurrency that can be supported without starting to reject HystrixCommands. Please note that this setting only takes effect if you also set allowMaximumSizeToDivergeFromCoreSize | 10 | String
+| *keepAliveTime* | Keep-alive time in minutes that gets passed to ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) | 1 | String
+| *maxQueueSize* | Max queue size that gets passed to BlockingQueue in HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect the instantiation of a threadpool - it is not eliglible to change a queue size on the fly. For that, use queueSizeRejectionThreshold(). | -1 | String
+| *queueSizeRejectionThreshold* | Queue size rejection threshold is an artificial max size at which rejections will occur even if maxQueueSize has not been reached. This is done because the maxQueueSize of a BlockingQueue can not be dynamically changed and we want to support dynamically changing the queue size that affects rejections. This is used by HystrixCommand when queuing a thread for execution. | 5 | String
+| *threadPoolRollingNumber StatisticalWindowIn Milliseconds* | Duration of statistical rolling window in milliseconds. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10000 | String
+| *threadPoolRollingNumber StatisticalWindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10 | String
+| *allowMaximumSizeToDivergeFrom CoreSize* | Allows the configuration for maximumSize to take effect. That value can then be equal to, or higher, than coreSize | false | String
 |===
 // eip options: END
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
index 8878a5d..6835947 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
@@ -36,9 +36,9 @@ The Idempotent Consumer EIP supports 5 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *messageIdRepositoryRef* | *Required* Sets the reference name of the message id repository |  | String
-| *eager* | Sets whether to eagerly add the key to the idempotent repository or wait until the exchange is complete. Eager is default enabled. | true | Boolean
-| *completionEager* | Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not complete eager, then the idempotent consumer w [...]
-| *skipDuplicate* | Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set. | true | Boolean
-| *removeOnFailure* | Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure. | true | Boolean
+| *eager* | Sets whether to eagerly add the key to the idempotent repository or wait until the exchange is complete. Eager is default enabled. | true | String
+| *completionEager* | Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not complete eager, then the idempotent consumer w [...]
+| *skipDuplicate* | Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set. | true | String
+| *removeOnFailure* | Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure. | true | String
 |===
 // eip options: END
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
index 91b27d7..151fd43 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
@@ -18,7 +18,7 @@ The Log EIP supports 5 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *message* | *Required* Sets the log message (uses simple language) |  | String
-| *loggingLevel* | Sets the logging level. The default value is INFO | INFO | LoggingLevel
+| *loggingLevel* | Sets the logging level. The default value is INFO | INFO | String
 | *logName* | Sets the name of the logger |  | String
 | *marker* | To use slf4j marker |  | String
 | *loggerRef* | To refer to a custom logger instance to lookup from the registry. |  | String
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
index 088b8ff..dae1731 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
@@ -17,8 +17,8 @@ The Loop EIP supports 2 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *copy* | If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content. | false | Boolean
-| *doWhile* | Enables the while loop that loops until the predicate evaluates to false or null. | false | Boolean
+| *copy* | If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content. |  | String
+| *doWhile* | Enables the while loop that loops until the predicate evaluates to false or null. |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
index 55d2d57..3363680 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
@@ -14,18 +14,18 @@ The Multicast EIP supports 12 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *parallelProcessing* | If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently. | false | Boolean
+| *parallelProcessing* | If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently. |  | String
 | *strategyRef* | Refers to an AggregationStrategy to be used to assemble the replies from the multicasts, into a single outgoing message from the Multicast. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy |  | String
 | *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy | false | Boolean
+| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy |  | String
 | *executorServiceRef* | Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well. |  | String
-| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast. | false | Boolean
-| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The defau [...]
-| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in  [...]
+| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast. |  | String
+| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The defau [...]
+| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in  [...]
 | *onPrepareRef* | Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send. |  | String
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work. | false | Boolean
-| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. | false | Boolean
-| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. | false | Boolean
+| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work. |  | String
+| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. |  | String
+| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc
index bc083e4..04dc958 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc
@@ -13,7 +13,7 @@ The On Fallback EIP supports 1 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *fallbackViaNetwork* | Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool. | false | Boolean
+| *fallbackViaNetwork* | Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool. | false | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc
index 87d74c0..ebd5c87 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc
@@ -39,13 +39,13 @@ The Poll Enrich EIP supports 7 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *timeout* | Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts [...]
+| *timeout* | Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts [...]
 | *strategyRef* | Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message. |  | String
 | *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. | false | Boolean
-| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This redu [...]
-| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
+| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. |  | String
+| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. |  | String
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This redu [...]
+| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
index 0c91120..7c477c6 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
@@ -17,20 +17,20 @@ The Recipient List EIP supports 15 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *delimiter* | Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false. The default value is , | , | String
-| *parallelProcessing* | If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently. | false | Boolean
+| *parallelProcessing* | If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently. |  | String
 | *strategyRef* | Sets a reference to the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message from the RecipientList. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy |  | String
 | *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy | false | Boolean
+| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy |  | String
 | *executorServiceRef* | Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well. |  | String
-| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The  [...]
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list. | false | Boolean
-| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shu [...]
+| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The  [...]
+| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint |  | String
+| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list. |  | String
+| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shu [...]
 | *onPrepareRef* | Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send. |  | String
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
-| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. | false | Boolean
-| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. | false | Boolean
+| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work. |  | String
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
+| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. |  | String
+| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc
index 77f40f9..397fd62 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc
@@ -3,4 +3,22 @@
 
 
 // eip options: START
+The Resilience4j Configuration EIP supports 12 options which are listed below:
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *circuitBreakerRef* | Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use. |  | String
+| *configRef* | Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry. |  | String
+| *failureRateThreshold* | Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage. | 50 | Float
+| *permittedNumberOfCallsInHalf OpenState* | Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10. | 10 | Integer
+| *slidingWindowSize* | Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. The slidingWindow [...]
+| *slidingWindowType* | Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COUNT_BASED. | COUNT_BASED | String
+| *minimumNumberOfCalls* | Configures configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls is 100 | 100 | Integer
+| *writableStackTraceEnabled* | Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls). | true | Boolean
+| *waitDurationInOpenState* | Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds. | 60 | Integer
+| *automaticTransitionFromOpenTo HalfOpenEnabled* | Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed. | false | Boolean
+| *slowCallRateThreshold* | Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold(Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that all recorded calls must be slower than slowCallDurat [...]
+| *slowCallDurationThreshold* | Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds. | 60 | Integer
+|===
 // eip options: END
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc
index 0b2b49d..e217b8d 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc
@@ -21,7 +21,7 @@ with the purpose of restoring the status that was present before the flow execut
 Compensating actions can be declared in Camel routes using the Java or XML DSL and will be invoked by Camel only when needed (if the saga is cancelled due to an error).
 
 // eip options: START
-The Saga EIP supports 6 options which are listed below:
+The Saga EIP supports 7 options which are listed below:
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
@@ -29,10 +29,10 @@ The Saga EIP supports 6 options which are listed below:
 | *propagation* | Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER). | REQUIRED | SagaPropagation
 | *completionMode* | Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints. | AUTO | SagaCompletionMode
 | *timeoutInMilliseconds* | Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime). |  | Long
-| *compensation* | The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry. |  | SagaActionUri Definition
-| *completion* | The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry. |  | SagaActionUri Definition
+| *compensation* | The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry. |  | SagaActionUriDefinition
+| *completion* | The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry. |  | SagaActionUriDefinition
 | *option* | Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Options are usually helpful e.g. to store and retrieve identifiers of objects that should be deleted in compensating actions. Option values will be transformed into input headers of the compensation/completion exchange. |  | List
-| *sagaServiceRef* |  Refers to the id to lookup in the registry for the specific CamelSagaService to use. | | String
+| *sagaServiceRef* | Refers to the id to lookup in the registry for the specific CamelSagaService to use. |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc
index aece528..b38db15 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc
@@ -100,17 +100,17 @@ The Service Call EIP supports 14 options which are listed below:
 | *name* | *Required* Sets the name of the service to use |  | String
 | *uri* | The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression. |  | String
 | *component* | The component to use. | http | String
-| *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
+| *pattern* | *Required* Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
 | *configurationRef* | Refers to a ServiceCall configuration to use |  | String
 | *serviceDiscoveryRef* | Sets a reference to a custom ServiceDiscovery to use. |  | String
 | *serviceFilterRef* | Sets a reference to a custom ServiceFilter to use. |  | String
 | *serviceChooserRef* | Sets a reference to a custom ServiceChooser to use. |  | String
 | *loadBalancerRef* | Sets a reference to a custom ServiceLoadBalancer to use. |  | String
 | *expressionRef* | Set a reference to a custom Expression to use. |  | String
-| *serviceDiscovery Configuration* | *Required* Configures the ServiceDiscovery using the given configuration. |  | ServiceCallService DiscoveryConfiguration
-| *serviceFilterConfiguration* | *Required* Configures the ServiceFilter using the given configuration. |  | ServiceCallService FilterConfiguration
-| *loadBalancerConfiguration* | *Required* Configures the LoadBalancer using the given configuration. |  | ServiceCallServiceLoad BalancerConfiguration
-| *expressionConfiguration* | *Required* Configures the Expression using the given configuration. |  | ServiceCallExpression Configuration
+| *serviceDiscoveryConfiguration* | *Required* Configures the ServiceDiscovery using the given configuration. |  | ServiceCallServiceDiscoveryConfiguration
+| *serviceFilterConfiguration* | *Required* Configures the ServiceFilter using the given configuration. |  | ServiceCallServiceFilterConfiguration
+| *loadBalancerConfiguration* | *Required* Configures the LoadBalancer using the given configuration. |  | ServiceCallServiceLoadBalancerConfiguration
+| *expressionConfiguration* | *Required* Configures the Expression using the given configuration. |  | ServiceCallExpressionConfiguration
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc
index cd04f97..5e1910c 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc
@@ -11,7 +11,7 @@ The Sticky EIP supports 1 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *correlationExpression* | *Required* The correlation expression to use to calculate the correlation key |  | NamespaceAware Expression
+| *correlationExpression* | *Required* The correlation expression to use to calculate the correlation key |  | ExpressionSubElementDefinition
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc
index a12c023..b415dcf 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc
@@ -18,8 +18,8 @@ The Threads EIP supports 10 options which are listed below:
 | *maxQueueSize* | Sets the maximum number of tasks in the work queue. Use -1 or Integer.MAX_VALUE for an unbounded queue |  | Integer
 | *allowCoreThreadTimeOut* | Whether idle core threads is allowed to timeout and therefore can shrink the pool size below the core pool size Is by default false | false | Boolean
 | *threadName* | Sets the thread name to use. | Threads | String
-| *rejectedPolicy* | Sets the handler for tasks which cannot be executed by the thread pool. |  | ThreadPoolRejected Policy
-| *callerRunsWhenRejected* | Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true | true | Boolean
+| *rejectedPolicy* | Sets the handler for tasks which cannot be executed by the thread pool. |  | ThreadPoolRejectedPolicy
+| *callerRunsWhenRejected* | Whether or not to use as caller runs as fallback when a task is rejected being added to the thread pool (when its full). This is only used as fallback if no rejectedPolicy has been configured, or the thread pool has no configured rejection handler. Is by default true | true | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc
index 7d6c8d7..6d1a6b1 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc
@@ -11,7 +11,7 @@ The Throttle EIP supports 6 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *correlationExpression* | The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together. |  | NamespaceAware Expression
+| *correlationExpression* | The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together. |  | ExpressionSubElementDefinition
 | *executorServiceRef* | To use a custom thread pool (ScheduledExecutorService) by the throttler. |  | String
 | *timePeriodMillis* | Sets the time period during which the maximum request count is valid for | 1000 | Long
 | *asyncDelayed* | Enables asynchronous delay which means the thread will not block while delaying. | false | Boolean
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
index fb1c22c..f9ceb03 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
@@ -19,7 +19,7 @@ The To EIP supports 2 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *uri* | *Required* Sets the uri of the endpoint to send to. |  | String
-| *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
+| *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | String
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
index a52be0d..2b9aca7 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
@@ -17,9 +17,9 @@ The To D EIP supports 5 options which are listed below:
 | Name | Description | Default | Type
 | *uri* | *Required* The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression. |  | String
 | *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse producers. |  | Integer
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
 | *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *allowOptimisedComponents* | Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware. | true | Boolean
+| *allowOptimisedComponents* | Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware . | true | Boolean
 |===
 // eip options: END
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc
index ced6732..f3cf276 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc
@@ -11,7 +11,7 @@ The Weighted EIP supports 3 options which are listed below:
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
-| *roundRobin* | To enable round robin mode. By default the weighted distribution mode is used. The default value is false. | false | Boolean
+| *roundRobin* | To enable round robin mode. By default the weighted distribution mode is used. The default value is false. |  | String
 | *distributionRatio* | *Required* The distribution ratio is a delimited String consisting on integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list. |  | String
 | *distributionRatioDelimiter* | Delimiter used to specify the distribution ratio. The default value is , | , | String
 |===
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
index 7082de2..1aabcae 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
@@ -26,16 +26,16 @@ The Wire Tap EIP supports 11 options which are listed below:
 |===
 | Name | Description | Default | Type
 | *processorRef* | Reference to a Processor to use for creating a new body as the message to use for wire tapping |  | String
-| *body* | Uses the expression for creating a new body as the message to use for wire tapping |  | NamespaceAware Expression
+| *body* | Uses the expression for creating a new body as the message to use for wire tapping |  | ExpressionSubElementDefinition
 | *executorServiceRef* | Uses a custom thread pool |  | String
 | *copy* | Uses a copy of the original exchange | true | Boolean
 | *dynamicUri* | Whether the uri is dynamic or static. If the uri is dynamic then the simple language is used to evaluate a dynamic uri to use as the wire-tap destination, for each incoming message. This works similar to how the toD EIP pattern works. If static then the uri is used as-is as the wire-tap destination. | true | Boolean
 | *onPrepareRef* | Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send. |  | String
 | *uri* | *Required* The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression. |  | String
 | *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
+| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
 | *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *allowOptimisedComponents* | Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware. | true | Boolean
+| *allowOptimisedComponents* | Whether to allow components to optimise toD if they are org.apache.camel.spi.SendDynamicAware . | true | Boolean
 |===
 // eip options: END
 


[camel] 11/18: fix component eip xrefs

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4ab82aa05fb7921e3b65654a64ce3f5a07ed8bb3
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 13:09:38 2020 -0700

    fix component eip xrefs
---
 components/camel-bean/src/main/docs/bean-language.adoc                | 2 +-
 components/camel-disruptor/src/main/docs/disruptor-component.adoc     | 2 +-
 .../src/main/docs/elasticsearch-rest-component.adoc                   | 2 +-
 components/camel-groovy/src/main/docs/groovy-language.adoc            | 2 +-
 components/camel-jms/src/main/docs/jms-component.adoc                 | 2 +-
 components/camel-mvel/src/main/docs/mvel-language.adoc                | 2 +-
 components/camel-ognl/src/main/docs/ognl-language.adoc                | 2 +-
 components/camel-saxon/src/main/docs/xquery-component.adoc            | 2 +-
 components/camel-saxon/src/main/docs/xquery-language.adoc             | 2 +-
 components/camel-spring/src/main/docs/spel-language.adoc              | 4 ++--
 components/camel-spring/src/main/docs/spring-event-component.adoc     | 2 +-
 components/camel-xpath/src/main/docs/xpath-language.adoc              | 2 +-
 docs/components/modules/ROOT/pages/bean-language.adoc                 | 2 +-
 docs/components/modules/ROOT/pages/disruptor-component.adoc           | 2 +-
 docs/components/modules/ROOT/pages/elasticsearch-rest-component.adoc  | 2 +-
 docs/components/modules/ROOT/pages/groovy-language.adoc               | 2 +-
 docs/components/modules/ROOT/pages/jms-component.adoc                 | 2 +-
 docs/components/modules/ROOT/pages/mvel-language.adoc                 | 2 +-
 docs/components/modules/ROOT/pages/ognl-language.adoc                 | 2 +-
 docs/components/modules/ROOT/pages/spel-language.adoc                 | 4 ++--
 docs/components/modules/ROOT/pages/spring-event-component.adoc        | 2 +-
 docs/components/modules/ROOT/pages/xpath-language.adoc                | 2 +-
 docs/components/modules/ROOT/pages/xquery-component.adoc              | 2 +-
 docs/components/modules/ROOT/pages/xquery-language.adoc               | 2 +-
 24 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/components/camel-bean/src/main/docs/bean-language.adoc b/components/camel-bean/src/main/docs/bean-language.adoc
index 3dc250a..27ce338 100644
--- a/components/camel-bean/src/main/docs/bean-language.adoc
+++ b/components/camel-bean/src/main/docs/bean-language.adoc
@@ -177,7 +177,7 @@ We have some test cases you can look at if it'll help
 is a JUnit test case showing the Java xref:manual::dsl.adoc[DSL] use of the bean
 expression being used in a filter
 * https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml[aggregator.xml]
-is a Spring XML test case for the xref:manual::aggregate-eip.adoc[Aggregator] which
+is a Spring XML test case for the xref:manual:eips:aggregate-eip.adoc[Aggregator] which
 uses a bean method call to test for the completion of the aggregation.
 
 include::camel-spring-boot::page$bean-starter.adoc[]
diff --git a/components/camel-disruptor/src/main/docs/disruptor-component.adoc b/components/camel-disruptor/src/main/docs/disruptor-component.adoc
index c93540c..02a9e23 100644
--- a/components/camel-disruptor/src/main/docs/disruptor-component.adoc
+++ b/components/camel-disruptor/src/main/docs/disruptor-component.adoc
@@ -196,7 +196,7 @@ without incurring significant latency spikes.
 
 == Use of Request Reply
 
-The Disruptor component supports using xref:manual::requestReply-eip.adoc[Request
+The Disruptor component supports using xref:manual:eips:requestReply-eip.adoc[Request
 Reply], where the caller will wait for the Async route to complete. For
 instance:
 
diff --git a/components/camel-elasticsearch-rest/src/main/docs/elasticsearch-rest-component.adoc b/components/camel-elasticsearch-rest/src/main/docs/elasticsearch-rest-component.adoc
index e2aabca..fad0f99 100644
--- a/components/camel-elasticsearch-rest/src/main/docs/elasticsearch-rest-component.adoc
+++ b/components/camel-elasticsearch-rest/src/main/docs/elasticsearch-rest-component.adoc
@@ -275,7 +275,7 @@ try (ElasticsearchScrollRequestIterator response = template.requestBody("direct:
 }
 ----
 
-xref:manual::split-eip.adoc[Split EIP] can also be used.
+xref:manual:eips:split-eip.adoc[Split EIP] can also be used.
 
 [source,java]
 ----
diff --git a/components/camel-groovy/src/main/docs/groovy-language.adoc b/components/camel-groovy/src/main/docs/groovy-language.adoc
index f0cd1c7..edd06e5 100644
--- a/components/camel-groovy/src/main/docs/groovy-language.adoc
+++ b/components/camel-groovy/src/main/docs/groovy-language.adoc
@@ -17,7 +17,7 @@ To use a Groovy expression use the following Java code
 ---------------------------------------
 
 For example you could use the *groovy* function to create an
-Predicate in a xref:manual::filter-eip.adoc[Message Filter] or as an Expression for a
+Predicate in a xref:manual:eips:filter-eip.adoc[Message Filter] or as an Expression for a
 Recipient List
 
 == Groovy Options
diff --git a/components/camel-jms/src/main/docs/jms-component.adoc b/components/camel-jms/src/main/docs/jms-component.adoc
index 2a122b2..905c9cb 100644
--- a/components/camel-jms/src/main/docs/jms-component.adoc
+++ b/components/camel-jms/src/main/docs/jms-component.adoc
@@ -1207,7 +1207,7 @@ Transactions and [Request Reply] over JMS
 When using Request Reply over JMS you cannot
 use a single transaction; JMS will not send any messages until a commit
 is performed, so the server side won't receive anything at all until the
-transaction commits. Therefore to use xref:manual::requestReply-eip.adoc[Request
+transaction commits. Therefore to use xref:manual:eips:requestReply-eip.adoc[Request
 Reply] you must commit a transaction after sending the request and then
 use a separate transaction for receiving the response.
 
diff --git a/components/camel-mvel/src/main/docs/mvel-language.adoc b/components/camel-mvel/src/main/docs/mvel-language.adoc
index fff5070..3a4d44a 100644
--- a/components/camel-mvel/src/main/docs/mvel-language.adoc
+++ b/components/camel-mvel/src/main/docs/mvel-language.adoc
@@ -67,7 +67,7 @@ The MVEL language supports 1 options, which are listed below.
 
 == Samples
 
-For example you could use Mvel inside a xref:manual::filter-eip.adoc[Message
+For example you could use Mvel inside a xref:manual:eips:filter-eip.adoc[Message
 Filter] in XML
 
 [source,java]
diff --git a/components/camel-ognl/src/main/docs/ognl-language.adoc b/components/camel-ognl/src/main/docs/ognl-language.adoc
index fa4427a..9c78d45 100644
--- a/components/camel-ognl/src/main/docs/ognl-language.adoc
+++ b/components/camel-ognl/src/main/docs/ognl-language.adoc
@@ -71,7 +71,7 @@ The OGNL language supports 1 options, which are listed below.
 
 == Samples
 
-For example you could use OGNL inside a xref:manual::filter-eip.adoc[Message
+For example you could use OGNL inside a xref:manual:eips:filter-eip.adoc[Message
 Filter] in XML
 
 [source,java]
diff --git a/components/camel-saxon/src/main/docs/xquery-component.adoc b/components/camel-saxon/src/main/docs/xquery-component.adoc
index 7dbe8a7..8579381 100644
--- a/components/camel-saxon/src/main/docs/xquery-component.adoc
+++ b/components/camel-saxon/src/main/docs/xquery-component.adoc
@@ -11,7 +11,7 @@ Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XQuery to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a Recipient List.
 
 == Options
diff --git a/components/camel-saxon/src/main/docs/xquery-language.adoc b/components/camel-saxon/src/main/docs/xquery-language.adoc
index 6204943..30a7e7d 100644
--- a/components/camel-saxon/src/main/docs/xquery-language.adoc
+++ b/components/camel-saxon/src/main/docs/xquery-language.adoc
@@ -7,7 +7,7 @@ Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XQuery to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a
 Recipient List.
 
diff --git a/components/camel-spring/src/main/docs/spel-language.adoc b/components/camel-spring/src/main/docs/spel-language.adoc
index e0791c3..c78c0e9 100644
--- a/components/camel-spring/src/main/docs/spel-language.adoc
+++ b/components/camel-spring/src/main/docs/spel-language.adoc
@@ -118,8 +118,8 @@ can invoke the "bar" method on this bean like this:
 
 === SpEL in enterprise integration patterns
 
-You can use SpEL as an expression for xref:manual::recipientList-eip.adoc[Recipient
-List] or as a predicate inside a xref:manual::filter-eip.adoc[Message
+You can use SpEL as an expression for xref:manual:eips:recipientList-eip.adoc[Recipient
+List] or as a predicate inside a xref:manual:eips:filter-eip.adoc[Message
 Filter]:
 
 [source,xml]
diff --git a/components/camel-spring/src/main/docs/spring-event-component.adoc b/components/camel-spring/src/main/docs/spring-event-component.adoc
index fe00110..b44f1ca 100644
--- a/components/camel-spring/src/main/docs/spring-event-component.adoc
+++ b/components/camel-spring/src/main/docs/spring-event-component.adoc
@@ -12,7 +12,7 @@ The Spring Event component provides access to the Spring
 `ApplicationEvent` objects to a Spring `ApplicationContext` or to
 consume them. You can then use
 xref:manual::enterprise-integration-patterns.adoc[Enterprise Integration
-Patterns] to process them such as xref:manual::filter-eip.adoc[Message
+Patterns] to process them such as xref:manual:eips:filter-eip.adoc[Message
 Filter].
 
 == URI format
diff --git a/components/camel-xpath/src/main/docs/xpath-language.adoc b/components/camel-xpath/src/main/docs/xpath-language.adoc
index 5677f5c..7e44fbd 100644
--- a/components/camel-xpath/src/main/docs/xpath-language.adoc
+++ b/components/camel-xpath/src/main/docs/xpath-language.adoc
@@ -7,7 +7,7 @@ Camel supports http://www.w3.org/TR/xpath[XPath] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XPath to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a
 Recipient List.
 
diff --git a/docs/components/modules/ROOT/pages/bean-language.adoc b/docs/components/modules/ROOT/pages/bean-language.adoc
index 5a78c35..2866c5e 100644
--- a/docs/components/modules/ROOT/pages/bean-language.adoc
+++ b/docs/components/modules/ROOT/pages/bean-language.adoc
@@ -178,7 +178,7 @@ We have some test cases you can look at if it'll help
 is a JUnit test case showing the Java xref:manual::dsl.adoc[DSL] use of the bean
 expression being used in a filter
 * https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml[aggregator.xml]
-is a Spring XML test case for the xref:manual::aggregate-eip.adoc[Aggregator] which
+is a Spring XML test case for the xref:manual:eips:aggregate-eip.adoc[Aggregator] which
 uses a bean method call to test for the completion of the aggregation.
 
 include::camel-spring-boot::page$bean-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/disruptor-component.adoc b/docs/components/modules/ROOT/pages/disruptor-component.adoc
index 88c6ea4..398f433 100644
--- a/docs/components/modules/ROOT/pages/disruptor-component.adoc
+++ b/docs/components/modules/ROOT/pages/disruptor-component.adoc
@@ -197,7 +197,7 @@ without incurring significant latency spikes.
 
 == Use of Request Reply
 
-The Disruptor component supports using xref:manual::requestReply-eip.adoc[Request
+The Disruptor component supports using xref:manual:eips:requestReply-eip.adoc[Request
 Reply], where the caller will wait for the Async route to complete. For
 instance:
 
diff --git a/docs/components/modules/ROOT/pages/elasticsearch-rest-component.adoc b/docs/components/modules/ROOT/pages/elasticsearch-rest-component.adoc
index b670a66..264d9b4 100644
--- a/docs/components/modules/ROOT/pages/elasticsearch-rest-component.adoc
+++ b/docs/components/modules/ROOT/pages/elasticsearch-rest-component.adoc
@@ -276,7 +276,7 @@ try (ElasticsearchScrollRequestIterator response = template.requestBody("direct:
 }
 ----
 
-xref:manual::split-eip.adoc[Split EIP] can also be used.
+xref:manual:eips:split-eip.adoc[Split EIP] can also be used.
 
 [source,java]
 ----
diff --git a/docs/components/modules/ROOT/pages/groovy-language.adoc b/docs/components/modules/ROOT/pages/groovy-language.adoc
index 11cefac..7e177d4 100644
--- a/docs/components/modules/ROOT/pages/groovy-language.adoc
+++ b/docs/components/modules/ROOT/pages/groovy-language.adoc
@@ -18,7 +18,7 @@ To use a Groovy expression use the following Java code
 ---------------------------------------
 
 For example you could use the *groovy* function to create an
-Predicate in a xref:manual::filter-eip.adoc[Message Filter] or as an Expression for a
+Predicate in a xref:manual:eips:filter-eip.adoc[Message Filter] or as an Expression for a
 Recipient List
 
 == Groovy Options
diff --git a/docs/components/modules/ROOT/pages/jms-component.adoc b/docs/components/modules/ROOT/pages/jms-component.adoc
index bfce109..8128d22 100644
--- a/docs/components/modules/ROOT/pages/jms-component.adoc
+++ b/docs/components/modules/ROOT/pages/jms-component.adoc
@@ -1208,7 +1208,7 @@ Transactions and [Request Reply] over JMS
 When using Request Reply over JMS you cannot
 use a single transaction; JMS will not send any messages until a commit
 is performed, so the server side won't receive anything at all until the
-transaction commits. Therefore to use xref:manual::requestReply-eip.adoc[Request
+transaction commits. Therefore to use xref:manual:eips:requestReply-eip.adoc[Request
 Reply] you must commit a transaction after sending the request and then
 use a separate transaction for receiving the response.
 
diff --git a/docs/components/modules/ROOT/pages/mvel-language.adoc b/docs/components/modules/ROOT/pages/mvel-language.adoc
index c635c8f..642668e 100644
--- a/docs/components/modules/ROOT/pages/mvel-language.adoc
+++ b/docs/components/modules/ROOT/pages/mvel-language.adoc
@@ -68,7 +68,7 @@ The MVEL language supports 1 options, which are listed below.
 
 == Samples
 
-For example you could use Mvel inside a xref:manual::filter-eip.adoc[Message
+For example you could use Mvel inside a xref:manual:eips:filter-eip.adoc[Message
 Filter] in XML
 
 [source,java]
diff --git a/docs/components/modules/ROOT/pages/ognl-language.adoc b/docs/components/modules/ROOT/pages/ognl-language.adoc
index b968f84..30d9ba7 100644
--- a/docs/components/modules/ROOT/pages/ognl-language.adoc
+++ b/docs/components/modules/ROOT/pages/ognl-language.adoc
@@ -72,7 +72,7 @@ The OGNL language supports 1 options, which are listed below.
 
 == Samples
 
-For example you could use OGNL inside a xref:manual::filter-eip.adoc[Message
+For example you could use OGNL inside a xref:manual:eips:filter-eip.adoc[Message
 Filter] in XML
 
 [source,java]
diff --git a/docs/components/modules/ROOT/pages/spel-language.adoc b/docs/components/modules/ROOT/pages/spel-language.adoc
index f6c6268..f677b61 100644
--- a/docs/components/modules/ROOT/pages/spel-language.adoc
+++ b/docs/components/modules/ROOT/pages/spel-language.adoc
@@ -119,8 +119,8 @@ can invoke the "bar" method on this bean like this:
 
 === SpEL in enterprise integration patterns
 
-You can use SpEL as an expression for xref:manual::recipientList-eip.adoc[Recipient
-List] or as a predicate inside a xref:manual::filter-eip.adoc[Message
+You can use SpEL as an expression for xref:manual:eips:recipientList-eip.adoc[Recipient
+List] or as a predicate inside a xref:manual:eips:filter-eip.adoc[Message
 Filter]:
 
 [source,xml]
diff --git a/docs/components/modules/ROOT/pages/spring-event-component.adoc b/docs/components/modules/ROOT/pages/spring-event-component.adoc
index 774afc7..6e5fead 100644
--- a/docs/components/modules/ROOT/pages/spring-event-component.adoc
+++ b/docs/components/modules/ROOT/pages/spring-event-component.adoc
@@ -13,7 +13,7 @@ The Spring Event component provides access to the Spring
 `ApplicationEvent` objects to a Spring `ApplicationContext` or to
 consume them. You can then use
 xref:manual::enterprise-integration-patterns.adoc[Enterprise Integration
-Patterns] to process them such as xref:manual::filter-eip.adoc[Message
+Patterns] to process them such as xref:manual:eips:filter-eip.adoc[Message
 Filter].
 
 == URI format
diff --git a/docs/components/modules/ROOT/pages/xpath-language.adoc b/docs/components/modules/ROOT/pages/xpath-language.adoc
index bc06df8..830468c 100644
--- a/docs/components/modules/ROOT/pages/xpath-language.adoc
+++ b/docs/components/modules/ROOT/pages/xpath-language.adoc
@@ -8,7 +8,7 @@ Camel supports http://www.w3.org/TR/xpath[XPath] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XPath to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a
 Recipient List.
 
diff --git a/docs/components/modules/ROOT/pages/xquery-component.adoc b/docs/components/modules/ROOT/pages/xquery-component.adoc
index 03ce442..cb4a8e9 100644
--- a/docs/components/modules/ROOT/pages/xquery-component.adoc
+++ b/docs/components/modules/ROOT/pages/xquery-component.adoc
@@ -12,7 +12,7 @@ Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XQuery to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a Recipient List.
 
 == Options
diff --git a/docs/components/modules/ROOT/pages/xquery-language.adoc b/docs/components/modules/ROOT/pages/xquery-language.adoc
index ee8505b..fd41773 100644
--- a/docs/components/modules/ROOT/pages/xquery-language.adoc
+++ b/docs/components/modules/ROOT/pages/xquery-language.adoc
@@ -8,7 +8,7 @@ Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
 Expression or Predicate to be
 used in the DSL or xref:manual::xml-configuration.adoc[Xml
 Configuration]. For example you could use XQuery to create an
-Predicate in a xref:manual::filter-eip.adoc[Message
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
 Filter] or as an Expression for a
 Recipient List.
 


[camel] 09/18: fix user-manual eip xrefs

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 28ee3408842d2ee2dda4031087401989cf755801
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 12:44:05 2020 -0700

    fix user-manual eip xrefs
---
 ...configuration-of-camelcontext-using-spring.adoc |  4 +-
 .../modules/ROOT/pages/backlog-tracer.adoc         |  2 +-
 .../modules/ROOT/pages/bean-binding.adoc           |  6 +--
 .../modules/ROOT/pages/bean-integration.adoc       |  4 +-
 .../modules/ROOT/pages/competing-consumers.adoc    |  2 +-
 .../ROOT/pages/composed-message-processor.adoc     |  8 ++--
 .../modules/ROOT/pages/content-enricher.adoc       | 18 +++----
 .../modules/ROOT/pages/correlation-identifier.adoc |  4 +-
 .../modules/ROOT/pages/dead-letter-channel.adoc    |  2 +-
 .../pages/enterprise-integration-patterns.adoc     | 56 +++++++++++-----------
 ...om-processor-which-sends-multiple-messages.adoc |  2 +-
 .../faq/how-does-camel-work-with-activemq.adoc     |  2 +-
 ...end-the-same-message-to-multiple-endpoints.adoc |  8 ++--
 .../pages/faq/how-to-use-a-dynamic-uri-in-to.adoc  |  2 +-
 ...f-i-use-servicemix-when-should-i-use-camel.adoc |  2 +-
 .../modules/ROOT/pages/faq/what-is-a-router.adoc   |  4 +-
 ...se-when-or-otherwise-in-a-java-camel-route.adoc | 18 +++----
 ...ge-with-error-handler-not-work-as-expected.adoc |  8 ++--
 .../modules/ROOT/pages/message-dispatcher.adoc     |  2 +-
 .../modules/ROOT/pages/message-endpoint.adoc       |  2 +-
 docs/user-manual/modules/ROOT/pages/message.adoc   |  2 +-
 .../user-manual/modules/ROOT/pages/normalizer.adoc |  2 +-
 .../modules/ROOT/pages/polling-consumer.adoc       |  2 +-
 docs/user-manual/modules/ROOT/pages/predicate.adoc |  4 +-
 .../modules/ROOT/pages/process-manager.adoc        |  4 +-
 .../modules/ROOT/pages/route-policy.adoc           |  6 +--
 .../modules/ROOT/pages/scatter-gather.adoc         |  4 +-
 .../modules/ROOT/pages/selective-consumer.adoc     |  2 +-
 .../modules/ROOT/pages/servlet-tomcat-example.adoc |  2 +-
 .../modules/ROOT/pages/spring-remoting.adoc        |  6 +--
 .../modules/ROOT/pages/stream-caching.adoc         |  2 +-
 .../modules/ROOT/pages/threading-model.adoc        |  4 +-
 .../ROOT/pages/using-propertyplaceholder.adoc      |  2 +-
 .../ROOT/pages/walk-through-another-example.adoc   |  2 +-
 .../modules/ROOT/pages/writing-components.adoc     |  2 +-
 35 files changed, 101 insertions(+), 101 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/advanced-configuration-of-camelcontext-using-spring.adoc b/docs/user-manual/modules/ROOT/pages/advanced-configuration-of-camelcontext-using-spring.adoc
index cdd76de..9ddc2f8 100644
--- a/docs/user-manual/modules/ROOT/pages/advanced-configuration-of-camelcontext-using-spring.adoc
+++ b/docs/user-manual/modules/ROOT/pages/advanced-configuration-of-camelcontext-using-spring.adoc
@@ -53,7 +53,7 @@ configured.
 |HandleFault |0..1 |To use a 3rd part fault handler to handle FAULT
 messages.
 
-|Delayer |0..1 |To use a 3rd part xref:delay-eip.adoc[Delayer].
+|Delayer |0..1 |To use a 3rd part xref:eips:delay-eip.adoc[Delayer].
 
 |ManagementStrategy |0..1 |*Camel 2.1:* To use a 3rd part strategy for
 xref:jmx.adoc[management], for example JMX management.
@@ -101,7 +101,7 @@ xref:stream-caching.adoc[Stream caching] strategy.
 RuntimeEndpointRegistry implementation.
 
 |Logger |0..1 |*Camel 2.12.4/2.13.1:* To use provided org.slf4j.Logger
-for xref:components::log-component.adoc[Log] component and xref:log-eip.adoc[log() EIP].
+for xref:eips:components::log-component.adoc[Log] component and xref:eips:log-eip.adoc[log() EIP].
 
 |AsyncProcessorAwaitManager |0..1 |*Camel 2.15:* To use a 3rd part async
 process await manager.
diff --git a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
index f0bc92c..c59b9ac 100644
--- a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
@@ -26,7 +26,7 @@ xref:tracer.adoc[Tracer] is event based and logs the messages as they
 happen (or route to another Camel destination). Also the
 xref:tracer.adoc[Tracer] has more fine grained events where it dives
 into xref:enterprise-integration-patterns.adoc[EIP]s such as the
-xref:content-based-router-eip.adoc[Content Based Router] and traces the
+xref:eips:content-based-router-eip.adoc[Content Based Router] and traces the
 when/otherwise(s). Though the xref:tracer.adoc[Tracer] has much more
 complicated logic to handle this (there is some edge-cases where this
 may not work). The BacklogTracer allows you to pull the messages from
diff --git a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
index 643b856..6fd955c 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
@@ -174,7 +174,7 @@ the xref:message.adoc[Message]
 [[BeanBinding-Examples]]
 === Examples
 
-For example, a xref:bean-eip.adoc[Bean] such as:
+For example, a xref:eips:bean-eip.adoc[Bean] such as:
 
 [source,syntaxhighlighter-pre]
 ----
@@ -239,7 +239,7 @@ $\{ }.
 Any other value is consider to be a type declaration instead - see the
 next section about specifying types for overloaded methods.
 
-When invoking a xref:bean-eip.adoc[Bean] you can instruct Camel to invoke a
+When invoking a xref:eips:bean-eip.adoc[Bean] you can instruct Camel to invoke a
 specific method by providing the method name:
 
 [source,syntaxhighlighter-pre]
@@ -343,7 +343,7 @@ use `.to` instead as shown:
 
 *Since Camel 2.8*
 
-If you have a xref:bean-eip.adoc[Bean] with overloaded methods, you can now
+If you have a xref:eips:bean-eip.adoc[Bean] with overloaded methods, you can now
 specify parameter types in the method name so Camel can match the method
 you intend to use.
 
diff --git a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
index 1886a97..f85fd17 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
@@ -33,8 +33,8 @@ See more details at:
 * xref:pojo-consuming.adoc[POJO Consuming] to consume and possibly route messages from Camel
 * xref:pojo-producing.adoc[POJO Producing] to make it easy to produce camel messages from your POJOs
 * `@DynamicRouter` Annotation for creating a xref:dynamic-router.adoc[Dynamic Router] from a POJO method
-* `@RecipientList` Annotation for creating a xref:recipientList-eip.adoc[Recipient List] from a POJO method
-* `@RoutingSlip` Annotation for creating a xref:routingSlip-eip.adoc[Routing Slip] for a POJO method
+* `@RecipientList` Annotation for creating a xref:eips:recipientList-eip.adoc[Recipient List] from a POJO method
+* `@RoutingSlip` Annotation for creating a xref:eips:routingSlip-eip.adoc[Routing Slip] for a POJO method
 * xref:bean-injection.adoc[Bean Injection] to inject Camel related resources into your POJOs
 * xref:using-exchange-pattern-annotations.adoc[Using Exchange Pattern Annotations]
   describes how the pattern annotations can be used to change
diff --git a/docs/user-manual/modules/ROOT/pages/competing-consumers.adoc b/docs/user-manual/modules/ROOT/pages/competing-consumers.adoc
index 845b39e..615766a 100644
--- a/docs/user-manual/modules/ROOT/pages/competing-consumers.adoc
+++ b/docs/user-manual/modules/ROOT/pages/competing-consumers.adoc
@@ -73,7 +73,7 @@ And what if we need more, then we need to add a 3rd, a 4th and so on.
 What if the processing of the file itself is the bottleneck? That is the calculateBean is slow.
 So how can we process messages with this bean concurrently?
 
-Yeah we can use the xref:threads-eip.adoc[Threads EIP], so if we insert it in the route we get:
+Yeah we can use the xref:eips:threads-eip.adoc[Threads EIP], so if we insert it in the route we get:
 
 [source,java]
 ----
diff --git a/docs/user-manual/modules/ROOT/pages/composed-message-processor.adoc b/docs/user-manual/modules/ROOT/pages/composed-message-processor.adoc
index 7571b58..01aec49 100644
--- a/docs/user-manual/modules/ROOT/pages/composed-message-processor.adoc
+++ b/docs/user-manual/modules/ROOT/pages/composed-message-processor.adoc
@@ -13,15 +13,15 @@ Use Composed Message Processor to process a composite message.
 The Composed Message Processor splits the message up, routes the sub-messages to the appropriate destinations
 and re-aggregates the responses back into a single message.
 
-With Camel this pattern is implemented by the xref:split-eip.adoc[Splitter]
+With Camel this pattern is implemented by the xref:eips:split-eip.adoc[Splitter]
 which has built-in aggregation to re-aggregate the responses back into a single message.
 
 == Sample
 
-This sample uses the xref:split-eip.adoc[Splitter] as composed message processor to process each splitted message,
+This sample uses the xref:eips:split-eip.adoc[Splitter] as composed message processor to process each splitted message,
 aggregate and return a combined single response.
 
-The route and the code comments below explains how you can use the xref:split-eip.adoc[Splitter] to
+The route and the code comments below explains how you can use the xref:eips:split-eip.adoc[Splitter] to
 split each message to sub-message which are processed individuallay and then combined back into
 a single response message via the custom ``aggregationStrategy` (`MyOrderStategy`), which
 then are the output of the splitter, that are then further processed at the end of the route.
@@ -48,4 +48,4 @@ from("direct:start")
 
 == More details
 
-See the xref:split-eip.adoc[Splitter] EIP.
+See the xref:eips:split-eip.adoc[Splitter] EIP.
diff --git a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
index 386d700..2c7252d 100644
--- a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
+++ b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
@@ -108,9 +108,9 @@ xref:exchange.adoc[Exchange]. For example you cannot set a filename in
 the `Exchange.FILE_NAME` header and use `pollEnrich` to consume only
 that file. For that you *must* set the filename in the endpoint URI.
 
-Instead of using `enrich` you can use xref:recipientList-eip.adoc[Recipient
+Instead of using `enrich` you can use xref:eips:recipientList-eip.adoc[Recipient
 List] and have dynamic endpoints and define an `AggregationStrategy` on
-the xref:recipientList-eip.adoc[Recipient List] which then would work as a
+the xref:eips:recipientList-eip.adoc[Recipient List] which then would work as a
 `enrich` would do.
 
 pollEnrich only accept one message as response. That means that if you
@@ -160,18 +160,18 @@ to be used to merge the reply from the external service, into a single
 outgoing message. By default Camel will use the reply from the external
 service as outgoing message. From *Camel 2.12* onwards you can also use
 a POJO as the `AggregationStrategy`, see the
-xref:aggregate-eip.adoc[Aggregate] page for more details.
+xref:eips:aggregate-eip.adoc[Aggregate] page for more details.
 
 |`strategyMethodName` |  |*Camel 2.12:* This option can be used to
 explicit declare the method name to use, when using POJOs as the
-`AggregationStrategy`. See the xref:aggregate-eip.adoc[Aggregate] page for
+`AggregationStrategy`. See the xref:eips:aggregate-eip.adoc[Aggregate] page for
 more details.
 
 |`strategyMethodAllowNull` |`false` |*Camel 2.12:* If this option is
 `false` then the aggregate method is not used if there was no data to
 enrich. If this option is `true` then `null` values is used as the
 `oldExchange` (when no data to enrich), when using POJOs as the
-`AggregationStrategy`. See the xref:aggregate-eip.adoc[Aggregate] page for
+`AggregationStrategy`. See the xref:eips:aggregate-eip.adoc[Aggregate] page for
 more details.
 
 |`aggregateOnException` |`false` |*Camel 2.14:* If this option is
@@ -185,7 +185,7 @@ to suppress the exception or set a custom message body etc.
 the parent and the resource exchange. Enrich will by default not share
 unit of work between the parent exchange and the resource exchange. This
 means the resource exchange has its own individual unit of work. See
-xref:split-eip.adoc[Splitter] for more information and example.
+xref:eips:split-eip.adoc[Splitter] for more information and example.
 
 |`cacheSize` |  |*Camel 2.16:* Allows to configure the cache size for
 the `ProducerCache` which caches producers for reuse in the enrich. Will
@@ -373,18 +373,18 @@ to be used to merge the reply from the external service, into a single
 outgoing message. By default Camel will use the reply from the external
 service as outgoing message. From *Camel 2.12* onwards you can also use
 a POJO as the `AggregationStrategy`, see the
-xref:aggregate-eip.adoc[Aggregate] page for more details.
+xref:eips:aggregate-eip.adoc[Aggregate] page for more details.
 
 |`strategyMethodName` |  |*Camel 2.12:* This option can be used to
 explicit declare the method name to use, when using POJOs as the
-`AggregationStrategy`. See the xref:aggregate-eip.adoc[Aggregate] page for
+`AggregationStrategy`. See the xref:eips:aggregate-eip.adoc[Aggregate] page for
 more details.
 
 |`strategyMethodAllowNull` |`false` |*Camel 2.12:* If this option is
 `false` then the aggregate method is not used if there was no data to
 enrich. If this option is `true` then `null` values is used as the
 `oldExchange` (when no data to enrich), when using POJOs as the
-`AggregationStrategy`. See the xref:aggregate-eip.adoc[Aggregate] page for
+`AggregationStrategy`. See the xref:eips:aggregate-eip.adoc[Aggregate] page for
 more details.
 
 |`timeout` |`-1` |Timeout in millis when polling from the external
diff --git a/docs/user-manual/modules/ROOT/pages/correlation-identifier.adoc b/docs/user-manual/modules/ROOT/pages/correlation-identifier.adoc
index 5e79bf4..8cfcfaa 100644
--- a/docs/user-manual/modules/ROOT/pages/correlation-identifier.adoc
+++ b/docs/user-manual/modules/ROOT/pages/correlation-identifier.adoc
@@ -25,8 +25,8 @@ those cases, Camel will add a correlation id on the
 xref:exchange.adoc[Exchange] as a property with they key
 `Exchange.CORRELATION_ID`, which links back to the source
 xref:exchange.adoc[Exchange]. For example the
-xref:split-eip.adoc[Splitter], xref:multicast-eip.adoc[Multicast],
-xref:recipientList-eip.adoc[Recipient List], and xref:wireTap-eip.adoc[Wire
+xref:eips:split-eip.adoc[Splitter], xref:eips:multicast-eip.adoc[Multicast],
+xref:eips:recipientList-eip.adoc[Recipient List], and xref:eips:wireTap-eip.adoc[Wire
 Tap] EIP does this.
 
 The following example demonstrates using the Camel JMSMessageID as the
diff --git a/docs/user-manual/modules/ROOT/pages/dead-letter-channel.adoc b/docs/user-manual/modules/ROOT/pages/dead-letter-channel.adoc
index 79af0f5..a2a8863 100644
--- a/docs/user-manual/modules/ROOT/pages/dead-letter-channel.adoc
+++ b/docs/user-manual/modules/ROOT/pages/dead-letter-channel.adoc
@@ -332,7 +332,7 @@ The `Exchange.FAILURE_ENDPOINT` have the constant value
 This allows for example you to fetch this information in your dead
 letter queue and use that for error reporting. +
  This is useable if the Camel route is a bit dynamic such as the dynamic
-xref:recipientList-eip.adoc[Recipient List] so you know which endpoints
+xref:eips:recipientList-eip.adoc[Recipient List] so you know which endpoints
 failed.
 
 These information is kept on the Exchange even if the message
diff --git a/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc b/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
index 53faf62..a85f8ed 100644
--- a/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
+++ b/docs/user-manual/modules/ROOT/pages/enterprise-integration-patterns.adoc
@@ -22,7 +22,7 @@ a|image::eip/MessageIcon.gif[image]
 message channel exchange a piece of information?
 
 a|image::eip/PipesAndFiltersIcon.gif[image]
-|xref:pipeline-eip.adoc[Pipes and Filters] |How can we perform
+|xref:eips:pipeline-eip.adoc[Pipes and Filters] |How can we perform
 complex processing on a message while maintaining independence and
 flexibility?
 
@@ -116,35 +116,35 @@ when a message should be considered stale and thus shouldn’t be processed?
 [width="100%",cols="10%,10%,80%",]
 |=======================================================================
 a|image::eip/ContentBasedRouterIcon.gif[image]
-|xref:content-based-router-eip.adoc[Content Based Router] |How do we handle
+|xref:eips:content-based-router-eip.adoc[Content Based Router] |How do we handle
 a situation where the implementation of a single logical function (e.g.,
 inventory check) is spread across multiple physical systems?
 
 a|image::eip/MessageFilterIcon.gif[image]
-|xref:filter-eip.adoc[Message Filter] |How can a component avoid
+|xref:eips:filter-eip.adoc[Message Filter] |How can a component avoid
 receiving uninteresting messages?
 
 a|image::eip/DynamicRouterIcon.gif[image]
-|xref:dynamicRouter-eip.adoc[Dynamic Router] |How can you avoid the
+|xref:eips:dynamicRouter-eip.adoc[Dynamic Router] |How can you avoid the
 dependency of the router on all possible destinations while maintaining
 its efficiency?
 
 a|image::eip/RecipientListIcon.gif[image]
-|xref:recipientList-eip.adoc[Recipient List] |How do we route a message to
+|xref:eips:recipientList-eip.adoc[Recipient List] |How do we route a message to
 a list of (static or dynamically) specified recipients?
 
 a|image::eip/SplitterIcon.gif[image]
-|xref:split-eip.adoc[Splitter] |How can we process a message if it
+|xref:eips:split-eip.adoc[Splitter] |How can we process a message if it
 contains multiple elements, each of which may have to be processed in a
 different way?
 
 a|image::eip/AggregatorIcon.gif[image]
-|xref:aggregate-eip.adoc[Aggregator] |How do we combine the results of
+|xref:eips:aggregate-eip.adoc[Aggregator] |How do we combine the results of
 individual, but related messages so that they can be processed as a
 whole?
 
 a|image::eip/ResequencerIcon.gif[image]
-|xref:resequence-eip.adoc[Resequencer] |How can we get a stream of related
+|xref:eips:resequence-eip.adoc[Resequencer] |How can we get a stream of related
 but out-of-sequence messages back into the correct order?
 
 a|image::eip/DistributionAggregateIcon.gif[image]
@@ -159,7 +159,7 @@ overall message flow when a message needs to be sent to multiple
 recipients, each of which may send a reply?
 
 a|image::eip/RoutingTableIcon.gif[image]
-|xref:routingSlip-eip.adoc[Routing Slip] |How do we route a message
+|xref:eips:routingSlip-eip.adoc[Routing Slip] |How do we route a message
 consecutively through a series of processing steps when the sequence of
 steps is not known at design-time and may vary for each message?
 
@@ -174,38 +174,38 @@ destination of a message from the sender and maintain central control
 over the flow of messages?
 
 |
-|xref:throttle-eip.adoc[Throttler] |How can I throttle messages to ensure
+|xref:eips:throttle-eip.adoc[Throttler] |How can I throttle messages to ensure
 that a specific endpoint does not get overloaded, or we don't exceed an
 agreed SLA with some external service?
 
 |
-|xref:sample-eip.adoc[Sampling] |How can I sample one message out of many
+|xref:eips:sample-eip.adoc[Sampling] |How can I sample one message out of many
 in a given period to avoid downstream route does not get overloaded?
 
 |
-|xref:delay-eip.adoc[Delayer] |How can I delay the sending of a message?
+|xref:eips:delay-eip.adoc[Delayer] |How can I delay the sending of a message?
 
 |
-|xref:loadBalance-eip.adoc[Load Balancer] |How can I balance load across a
+|xref:eips:loadBalance-eip.adoc[Load Balancer] |How can I balance load across a
 number of endpoints?
 
 |
-|xref:circuitBreaker-eip.adoc[Circuit Breaker] |How can I stop to call an external service if the service is broken?
+|xref:eips:circuitBreaker-eip.adoc[Circuit Breaker] |How can I stop to call an external service if the service is broken?
 
 |
-|xref:serviceCall-eip.adoc[Service Call] |How can I call a remote service in a distributed system
+|xref:eips:serviceCall-eip.adoc[Service Call] |How can I call a remote service in a distributed system
 where the service is looked up from a service registry of some sorts?
 
 |
-|xref:saga-eip.adoc[Saga] |How can I define a series of related actions in a Camel route
+|xref:eips:saga-eip.adoc[Saga] |How can I define a series of related actions in a Camel route
 that should be either completed successfully (all of them) or not-executed/compensated?
 
 |
-|xref:multicast-eip.adoc[Multicast] |How can I route a message to a number
+|xref:eips:multicast-eip.adoc[Multicast] |How can I route a message to a number
 of endpoints at the same time?
 
 |
-|xref:loop-eip.adoc[Loop] |How can I repeat processing a message in a loop?
+|xref:eips:loop-eip.adoc[Loop] |How can I repeat processing a message in a loop?
 |=======================================================================
 
 [[EnterpriseIntegrationPatterns-MessageTransformation]]
@@ -219,11 +219,11 @@ with another system if the message originator does not have all the
 required data items available?
 
 a|image::eip/ContentFilterIcon.gif[image]
-|xref:content-filter-eip.adoc[Content Filter] |How do you simplify dealing
+|xref:eips:content-filter-eip.adoc[Content Filter] |How do you simplify dealing
 with a large message, when you are interested only in a few data items?
 
 a|image::eip/StoreInLibraryIcon.gif[image]
-|xref:claimCheck-eip.adoc[Claim Check] |How can we reduce the data volume
+|xref:eips:claimCheck-eip.adoc[Claim Check] |How can we reduce the data volume
 of message sent across the system without sacrificing information
 content?
 
@@ -232,13 +232,13 @@ a|image::eip/NormalizerIcon.gif[image]
 semantically equivalent, but arrive in a different format?
 
 |
-|xref:sort-eip.adoc[Sort] |How can I sort the body of a message?
+|xref:eips:sort-eip.adoc[Sort] |How can I sort the body of a message?
 
 |
-|xref:script-eip.adoc[Script] |How do I execute a script which may not change the message?
+|xref:eips:script-eip.adoc[Script] |How do I execute a script which may not change the message?
 
 |
-|xref:validate-eip.adoc[Validate] |How can I validate a message?
+|xref:eips:validate-eip.adoc[Validate] |How can I validate a message?
 |=======================================================================
 
 [[EnterpriseIntegrationPatterns-MessagingEndpoints]]
@@ -252,7 +252,7 @@ between domain objects and the messaging infrastructure while keeping
 the two independent of each other?
 
 a|image::eip/EventDrivenConsumerIcon.gif[image]
-|xref:eventDrivenConsumer-eip.adoc[Event Driven Consumer] |How can an
+|xref:eips:eventDrivenConsumer-eip.adoc[Event Driven Consumer] |How can an
 application automatically consume messages as they become available?
 
 a|image::eip/PollingConsumerIcon.gif[image]
@@ -276,7 +276,7 @@ a|image::eip/DurableSubscriptionIcon.gif[image]
 avoid missing messages while it's not listening for them?
 
 |
-|xref:idempotentConsumer-eip.adoc[Idempotent Consumer] |How can a message
+|xref:eips:idempotentConsumer-eip.adoc[Idempotent Consumer] |How can a message
 receiver deal with duplicate messages?
 
 a|image::eip/TransactionalClientIcon.gif[image]
@@ -309,7 +309,7 @@ intermediate steps to perform validation, testing or debugging
 functions?
 
 a|image::eip/WireTapIcon.gif[image]
-|xref:wireTap-eip.adoc[Wire Tap] |How do you inspect messages that travel
+|xref:eips:wireTap-eip.adoc[Wire Tap] |How do you inspect messages that travel
 on a point-to-point channel?
 
 |
@@ -317,10 +317,10 @@ on a point-to-point channel?
 analyze and debug the flow of messages in a loosely coupled system?
 
 |
-|xref:log-eip.adoc[Log] |How can I log processing a message?
+|xref:eips:log-eip.adoc[Log] |How can I log processing a message?
 
 |
-|xref:step-eip.adoc[Step] | Steps groups together a set of EIPs into a composite logical unit for metrics and monitoring. |
+|xref:eips:step-eip.adoc[Step] | Steps groups together a set of EIPs into a composite logical unit for metrics and monitoring. |
 
 |=======================================================================
 
diff --git a/docs/user-manual/modules/ROOT/pages/faq/how-do-i-write-a-custom-processor-which-sends-multiple-messages.adoc b/docs/user-manual/modules/ROOT/pages/faq/how-do-i-write-a-custom-processor-which-sends-multiple-messages.adoc
index cdad5a7..745952b 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/how-do-i-write-a-custom-processor-which-sends-multiple-messages.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/how-do-i-write-a-custom-processor-which-sends-multiple-messages.adoc
@@ -1,7 +1,7 @@
 [[HowdoIwriteacustomProcessorwhichsendsmultiplemessages-HowdoIwriteacustomProcessorwhichsendsmultiplemessages]]
 = How do I write a custom Processor which sends multiple messages?
 
-You could use a xref:split-eip.adoc[Splitter] or use multiple
+You could use a xref:eips:split-eip.adoc[Splitter] or use multiple
 xref:message-translator.adoc[Message Translator] instances in your
 route.
 
diff --git a/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-work-with-activemq.adoc b/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-work-with-activemq.adoc
index ce165b0..cd9e2d6 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-work-with-activemq.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-work-with-activemq.adoc
@@ -13,7 +13,7 @@ xref:components::file-component.adoc[File], xref:components::ftp-component.adoc[
 xref:components::xmpp-component.adoc[XMPP] other xref:components::jms-component.adoc[JMS] providers and any of the
 other Camel xref:component.adoc[Components] as well as implementating
 all of the xref:enterprise-integration-patterns.adoc[Enterprise
-Integration Patterns] such as xref:content-based-router-eip.adoc[Content
+Integration Patterns] such as xref:eips:content-based-router-eip.adoc[Content
 Based Router] or xref:message-translator.adoc[Message Translator].
 
 For more details see
diff --git a/docs/user-manual/modules/ROOT/pages/faq/how-to-send-the-same-message-to-multiple-endpoints.adoc b/docs/user-manual/modules/ROOT/pages/faq/how-to-send-the-same-message-to-multiple-endpoints.adoc
index 455f494..88664f3 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/how-to-send-the-same-message-to-multiple-endpoints.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/how-to-send-the-same-message-to-multiple-endpoints.adoc
@@ -2,12 +2,12 @@
 = How to send the same message to multiple endpoints?
 
 When you need to send the *same* message to multiple endpoints then you
-should use xref:multicast-eip.adoc[Multicast].
+should use xref:eips:multicast-eip.adoc[Multicast].
 
 In the sample below we consume messages from the activemq queue `foo`
 and want to send the *same message* to both `seda:foo` and `seda:bar`.
 Sending the same message requires that we use
-xref:multicast-eip.adoc[Multicast]. This is done by adding the `multicast()`
+xref:eips:multicast-eip.adoc[Multicast]. This is done by adding the `multicast()`
 before the to type:
 
 [source,java]
@@ -26,8 +26,8 @@ If you have a route such as:
 from("activemq:queue:foo").to("seda:foo", "seda:bar");
 ----
 
-It is by default a xref:pipeline-eip.adoc[pipeline] in Camel (that is
-the opposite to xref:multicast-eip.adoc[Multicast]). In the above example
+It is by default a xref:eips:pipeline-eip.adoc[pipeline] in Camel (that is
+the opposite to xref:eips:multicast-eip.adoc[Multicast]). In the above example
 using pipes and filters then the result from seda:foo is sent to
 seda:bar, ie. its not the *same* message sent to multiple destinations,
 but a sent through a chain (the pipes and the filters).
diff --git a/docs/user-manual/modules/ROOT/pages/faq/how-to-use-a-dynamic-uri-in-to.adoc b/docs/user-manual/modules/ROOT/pages/faq/how-to-use-a-dynamic-uri-in-to.adoc
index a1927ca..7ecca1b 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/how-to-use-a-dynamic-uri-in-to.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/how-to-use-a-dynamic-uri-in-to.adoc
@@ -24,7 +24,7 @@ This snippet is not valid code. Read on.
 In this case, you must use an EIP (Enterprise Integration Pattern) that
 is capable of computing a dynamic URI using
 an xref:expression.adoc[Expression], such as
-the xref:toD-eip.adoc[ToD] or xref:recipientList-eip.adoc[Recipient List] EIP pattern.
+the xref:eips:toD-eip.adoc[ToD] or xref:eips:recipientList-eip.adoc[Recipient List] EIP pattern.
 
 [TIP]
 ====
diff --git a/docs/user-manual/modules/ROOT/pages/faq/if-i-use-servicemix-when-should-i-use-camel.adoc b/docs/user-manual/modules/ROOT/pages/faq/if-i-use-servicemix-when-should-i-use-camel.adoc
index 93a7d6b..6b45011 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/if-i-use-servicemix-when-should-i-use-camel.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/if-i-use-servicemix-when-should-i-use-camel.adoc
@@ -7,7 +7,7 @@ So if you are already using http://servicemix.apache.org/[ServiceMix]
 then you can use Camel implement the
 xref:enterprise-integration-patterns.adoc[Enterprise Integration Patterns]
 inside JBI such as
-xref:content-based-router-eip.adoc[Content Based Router], routing messages
+xref:eips:content-based-router-eip.adoc[Content Based Router], routing messages
 between your existing JBI endpoints.
 
 You can also reuse any of the Camel xref:component.adoc[Components]
diff --git a/docs/user-manual/modules/ROOT/pages/faq/what-is-a-router.adoc b/docs/user-manual/modules/ROOT/pages/faq/what-is-a-router.adoc
index 988693b..19cf6af 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/what-is-a-router.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/what-is-a-router.adoc
@@ -11,12 +11,12 @@ xref:enterprise-integration-patterns.adoc[Enterprise Integration
 Patterns].
 
 For example a router could implement the
-xref:content-based-router-eip.adoc[Content Based Router] pattern, to route
+xref:eips:content-based-router-eip.adoc[Content Based Router] pattern, to route
 from an endpoint to one or more destination endpoints using a
 xref:predicate.adoc[Predicate] based on the message content.
 
 Typically a route or router consists of one or more consumers; either an
-xref:eventDrivenConsumer-eip.adoc[Event Driven Consumer] or a
+xref:eips:eventDrivenConsumer-eip.adoc[Event Driven Consumer] or a
 xref:polling-consumer.adoc[Polling Consumer] or possibly a
 xref:transactional-client.adoc[Transactional Client]. Then there are one
 or more xref:processor.adoc[Processor] instances which could send the
diff --git a/docs/user-manual/modules/ROOT/pages/faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc b/docs/user-manual/modules/ROOT/pages/faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc
index 7c22202..eff2fb7 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc
@@ -1,7 +1,7 @@
 [[WhycanInotusewhenorotherwiseinaJavaCamelroute-WhycanInotusewhenotherwiseinaJavaCamelroute]]
 = Why can I not use when/otherwise in a Java Camel route?
 
-When using the xref:content-based-router-eip.adoc[Content Based Router] in
+When using the xref:eips:content-based-router-eip.adoc[Content Based Router] in
 the Java DSL you may have a situation where the compiler will not accept
 the following `when()` or `otherwise()` statement.
 
@@ -10,12 +10,12 @@ the following `when()` or `otherwise()` statement.
 **Quick tip**
 
 Use `.endChoice()` to return "back" to the
-xref:content-based-router-eip.adoc[Content Based Router].
+xref:eips:content-based-router-eip.adoc[Content Based Router].
 ====
 
 For example as shown in the route below where we use the
-xref:loadBalance-eip.adoc[Load Balancer] inside the
-xref:content-based-router-eip.adoc[Content Based Router] in the first when:
+xref:eips:loadBalance-eip.adoc[Load Balancer] inside the
+xref:eips:content-based-router-eip.adoc[Content Based Router] in the first when:
 
 *Code will not compile*
 
@@ -29,7 +29,7 @@ from("direct:start")
             .to("mock:result");
 ----
 
-Well the first issue is that the xref:loadBalance-eip.adoc[Load Balancer]
+Well the first issue is that the xref:eips:loadBalance-eip.adoc[Load Balancer]
 uses the additional routing to know what to use in the load balancing.
 In this example that would be the:
 
@@ -59,10 +59,10 @@ xref:dsl.adoc[DSL]. In a more modern language such as
 Scala or Groovy you would be able
 to let it be stack based, so the `.end()` will pop the last type of the
 stack, and you would return back to the scope of the
-xref:content-based-router-eip.adoc[Content Based Router]. However that's not
+xref:eips:content-based-router-eip.adoc[Content Based Router]. However that's not
 easily doable in Java. So we need to help Java a bit, which you do by
 using `.endChoice()`, which tells Camel to "pop the stack" and return
-back to the scope of the xref:content-based-router-eip.adoc[Content Based
+back to the scope of the xref:eips:content-based-router-eip.adoc[Content Based
 Router].
 
 *Code compiles*
@@ -81,10 +81,10 @@ You only need to use `.endChoice()` when using certain
 xref:enterprise-integration-patterns.adoc[EIP]s which often have additional
 methods to configure or as part of the
 xref:enterprise-integration-patterns.adoc[EIP] itself. For example the
-xref:split-eip.adoc[Splitter] EIP has a sub-route which denotes the
+xref:eips:split-eip.adoc[Splitter] EIP has a sub-route which denotes the
 routing of each splitted message. You would also have to use
 `.endChoice()` to indicate the end of the sub-route and to return back
-to the xref:content-based-router-eip.adoc[Content Based Router]. Note
+to the xref:eips:content-based-router-eip.adoc[Content Based Router]. Note
 `.endChoice()` is *Since Camel 2.7*.
 
 [[WhycanInotusewhenorotherwiseinaJavaCamelroute-Stillproblems]]
diff --git a/docs/user-manual/modules/ROOT/pages/faq/why-does-useoriginalmessage-with-error-handler-not-work-as-expected.adoc b/docs/user-manual/modules/ROOT/pages/faq/why-does-useoriginalmessage-with-error-handler-not-work-as-expected.adoc
index 0a7a748..25b946c 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/why-does-useoriginalmessage-with-error-handler-not-work-as-expected.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/why-does-useoriginalmessage-with-error-handler-not-work-as-expected.adoc
@@ -5,12 +5,12 @@ If you use the xref:exception-clause.adoc[useOriginalMessage] option
 from the Camel xref:exception-clause.adoc[Error Handler] then it matters
 if you use this with xref:enterprise-integration-patterns.adoc[EIP]s such as:
 
-* xref:recipientList-eip.adoc[Recipient List]
-* xref:split-eip.adoc[Splitter]
-* xref:multicast-eip.adoc[Multicast]
+* xref:eips:recipientList-eip.adoc[Recipient List]
+* xref:eips:split-eip.adoc[Splitter]
+* xref:eips:multicast-eip.adoc[Multicast]
 
 Then the option `shareUnitOfWork` on these xref:enterprise-integration-patterns.adoc[EIP]s
 influence the message in use by the `useOriginalMessage` option.
 
-See more details at xref:split-eip.adoc[Splitter] and further below with
+See more details at xref:eips:split-eip.adoc[Splitter] and further below with
 the examples explaining this in more detail.
diff --git a/docs/user-manual/modules/ROOT/pages/message-dispatcher.adoc b/docs/user-manual/modules/ROOT/pages/message-dispatcher.adoc
index c858e0a..55515cd 100644
--- a/docs/user-manual/modules/ROOT/pages/message-dispatcher.adoc
+++ b/docs/user-manual/modules/ROOT/pages/message-dispatcher.adoc
@@ -11,5 +11,5 @@ image::eip/MessageDispatcher.gif[image]
 
 You can use a component like JMS with selectors to implement a xref:selective-consumer.adoc[Selective Consumer]
 as the Message Dispatcher implementation. Or you can use an xref:message-endpoint.adoc[Message Endpoint]
-as the Message Dispatcher itself and then use a xref:content-based-router-eip.adoc[Content Based Router]
+as the Message Dispatcher itself and then use a xref:eips:content-based-router-eip.adoc[Content Based Router]
 as the Message Dispatcher.
diff --git a/docs/user-manual/modules/ROOT/pages/message-endpoint.adoc b/docs/user-manual/modules/ROOT/pages/message-endpoint.adoc
index b7a9ce1..30f6d41 100644
--- a/docs/user-manual/modules/ROOT/pages/message-endpoint.adoc
+++ b/docs/user-manual/modules/ROOT/pages/message-endpoint.adoc
@@ -24,5 +24,5 @@ implementations.
 [[messageEndpoint-Example]]
 == Samples
 
-See first example in xref:to-eip.adoc[To EIP]
+See first example in xref:eips:to-eip.adoc[To EIP]
 
diff --git a/docs/user-manual/modules/ROOT/pages/message.adoc b/docs/user-manual/modules/ROOT/pages/message.adoc
index 708fc69..845e9ea 100644
--- a/docs/user-manual/modules/ROOT/pages/message.adoc
+++ b/docs/user-manual/modules/ROOT/pages/message.adoc
@@ -41,4 +41,4 @@ from("direct:startInOut")
   .inOut("bean:process");
 ----
 
-See xref:to-eip.adoc[to-eip with pattern]
+See xref:eips:to-eip.adoc[to-eip with pattern]
diff --git a/docs/user-manual/modules/ROOT/pages/normalizer.adoc b/docs/user-manual/modules/ROOT/pages/normalizer.adoc
index abf9333..0678570 100644
--- a/docs/user-manual/modules/ROOT/pages/normalizer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/normalizer.adoc
@@ -10,7 +10,7 @@ but arrive in different formats. The normalizer transforms the incoming messages
 
 image::eip/NormalizerDetail.gif[image]
 
-In Apache Camel, you can implement the normalizer pattern by combining a xref:content-based-router-eip.adoc[Content Based Router],
+In Apache Camel, you can implement the normalizer pattern by combining a xref:eips:content-based-router-eip.adoc[Content Based Router],
 which detects the incoming message's format, with a collection of different xref:message-translator.adoc[Message Translator]'s,
 which transform the different incoming formats into a common format.
 
diff --git a/docs/user-manual/modules/ROOT/pages/polling-consumer.adoc b/docs/user-manual/modules/ROOT/pages/polling-consumer.adoc
index fd28244..6af6737 100644
--- a/docs/user-manual/modules/ROOT/pages/polling-consumer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/polling-consumer.adoc
@@ -155,7 +155,7 @@ process the message and send them to the next queue.
 Quite a few inbound Camel endpoints use a scheduled poll pattern to
 receive messages and push them through the Camel processing routes. That
 is to say externally from the client the endpoint appears to use an
-xref:eventDrivenConsumer-eip.adoc[Event Driven Consumer] but internally a
+xref:eips:eventDrivenConsumer-eip.adoc[Event Driven Consumer] but internally a
 scheduled poll is used to monitor some kind of state or resource and
 then fire message exchanges.
 
diff --git a/docs/user-manual/modules/ROOT/pages/predicate.adoc b/docs/user-manual/modules/ROOT/pages/predicate.adoc
index 3217415..c9ba4cc 100644
--- a/docs/user-manual/modules/ROOT/pages/predicate.adoc
+++ b/docs/user-manual/modules/ROOT/pages/predicate.adoc
@@ -5,8 +5,8 @@ Camel supports a pluggable interface called
 https://www.javadoc.io/doc/org.apache.camel/camel-api/current/org/apache/camel/Predicate.html[Predicate]
 which can be used to integrate a dynamic predicate into
 xref:enterprise-integration-patterns.adoc[Enterprise Integration
-Patterns] such as when using the xref:filter-eip.adoc[Message Filter]
-or xref:content-based-router-eip.adoc[Content Based Router].
+Patterns] such as when using the xref:eips:filter-eip.adoc[Message Filter]
+or xref:eips:content-based-router-eip.adoc[Content Based Router].
 
 A Predicate is being evaluated to a boolean value so the result is
 either `true` or `false`. This makes xref:predicate.adoc[Predicate] so
diff --git a/docs/user-manual/modules/ROOT/pages/process-manager.adoc b/docs/user-manual/modules/ROOT/pages/process-manager.adoc
index e22086d..e25376e 100644
--- a/docs/user-manual/modules/ROOT/pages/process-manager.adoc
+++ b/docs/user-manual/modules/ROOT/pages/process-manager.adoc
@@ -5,7 +5,7 @@ Camel supports the
 https://www.enterpriseintegrationpatterns.com/patterns/messaging/ProcessManager.html[Process Manager]
 from the xref:enterprise-integration-patterns.adoc[EIP patterns] book.
 
-The xref:routingSlip-eip.adoc[Routing Slip] demonstrates how a message can be routed through a dynamic series of processing steps.
+The xref:eips:routingSlip-eip.adoc[Routing Slip] demonstrates how a message can be routed through a dynamic series of processing steps.
 The solution of the Routing Slip is based on two key assumptions: the sequence of processing steps has
 to be determined up-front and the sequence is linear. In many cases, these assumptions may not be fulfilled.
 For example, routing decisions might have to be made based on intermediate results.
@@ -19,7 +19,7 @@ image::eip/ProcessManager.gif[image]
 Use a central processing unit, a Process Manager, to maintain the state of the sequence and determine
 the next processing step based on intermediate results.
 
-With Camel this pattern is implemented by using the xref:dynamicRouter-eip.adoc[Dynamic Router] pattern.
+With Camel this pattern is implemented by using the xref:eips:dynamicRouter-eip.adoc[Dynamic Router] pattern.
 Camel's implementation of the dynamic router maintains the state of the sequence, and allows
 to determine the next processing step based dynamically.
 
diff --git a/docs/user-manual/modules/ROOT/pages/route-policy.adoc b/docs/user-manual/modules/ROOT/pages/route-policy.adoc
index 3c77f40..3f140eb 100644
--- a/docs/user-manual/modules/ROOT/pages/route-policy.adoc
+++ b/docs/user-manual/modules/ROOT/pages/route-policy.adoc
@@ -87,14 +87,14 @@ again in case it has been suspended.
 == ThrottlingInflightRoutePolicy compared to the Throttler EIP
 
 The *`ThrottlingInflightRoutePolicy`* compared to
-xref:throttle-eip.adoc[Throttler] is that it does *not* block during
+xref:eips:throttle-eip.adoc[Throttler] is that it does *not* block during
 throttling. It does throttling that is approximate based, meaning that
 its more coarse grained and not explicit precise as the
-xref:throttle-eip.adoc[Throttler]. The xref:throttle-eip.adoc[Throttler] can
+xref:eips:throttle-eip.adoc[Throttler]. The xref:eips:throttle-eip.adoc[Throttler] can
 be much more accurate and only allow a specific number of messages being
 passed per a given time unit. Also the *`ThrottlingInflightRoutePolicy`*
 is based its metrics on number of inflight exchanges where as
-xref:throttle-eip.adoc[Throttler] is based on number of messages per time
+xref:eips:throttle-eip.adoc[Throttler] is based on number of messages per time
 unit.
 
 == `ScheduledRoutePolicy` (Simple and Cron based) using camel Quartz
diff --git a/docs/user-manual/modules/ROOT/pages/scatter-gather.adoc b/docs/user-manual/modules/ROOT/pages/scatter-gather.adoc
index 3c1790f..58a6a1e 100644
--- a/docs/user-manual/modules/ROOT/pages/scatter-gather.adoc
+++ b/docs/user-manual/modules/ROOT/pages/scatter-gather.adoc
@@ -10,8 +10,8 @@ specified recipients and re-aggregate the responses back into a single message.
 
 image::eip/BroadcastAggregate.gif[image]
 
-With Camel this pattern is implemented by using the xref:recipientList-eip.adoc[Recipient List]
-and the xref:aggregate-eip.adoc[Aggregate] patterns.
+With Camel this pattern is implemented by using the xref:eips:recipientList-eip.adoc[Recipient List]
+and the xref:eips:aggregate-eip.adoc[Aggregate] patterns.
 
 == Sample
 
diff --git a/docs/user-manual/modules/ROOT/pages/selective-consumer.adoc b/docs/user-manual/modules/ROOT/pages/selective-consumer.adoc
index a1f8c5f..d193f48 100644
--- a/docs/user-manual/modules/ROOT/pages/selective-consumer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/selective-consumer.adoc
@@ -22,7 +22,7 @@ from("activemq:queue:hello?selector=color='red'")
 
 == Selective Consumer using Filter pattern
 
-The other approach is to use a xref:filter-eip.adoc[Message Filter] which is applied;
+The other approach is to use a xref:eips:filter-eip.adoc[Message Filter] which is applied;
 then if the filter matches the message your consumer is invoked as shown in the following example.
 
 [source,java]
diff --git a/docs/user-manual/modules/ROOT/pages/servlet-tomcat-example.adoc b/docs/user-manual/modules/ROOT/pages/servlet-tomcat-example.adoc
index db3241c..13a1c23 100644
--- a/docs/user-manual/modules/ROOT/pages/servlet-tomcat-example.adoc
+++ b/docs/user-manual/modules/ROOT/pages/servlet-tomcat-example.adoc
@@ -62,7 +62,7 @@ component.
 </web-app>
 ----
 
-The route is a simple xref:content-based-router-eip.adoc[Content Based Router] defined
+The route is a simple xref:eips:content-based-router-eip.adoc[Content Based Router] defined
 in the DSL XML as shown:
 
 [source,xml]
diff --git a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
index 08123af..bbb330f 100644
--- a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
+++ b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
@@ -6,7 +6,7 @@ the underlying transport mechanism. The nice thing about this approach
 is we can use any of the Camel transport
 xref:components::index.adoc[Components] to communicate between beans.
 
-It also means we can use xref:content-based-router-eip.adoc[Content Based
+It also means we can use xref:eips:content-based-router-eip.adoc[Content Based
 Router] and the other
 xref:enterprise-integration-patterns.adoc[Enterprise Integration
 Patterns] in between the beans; in particular we can use
@@ -359,7 +359,7 @@ $\{ }.
 Any other value is consider to be a type declaration instead - see the
 next section about specifying types for overloaded methods.
 
-When invoking a xref:bean-eip.adoc[Bean] you can instruct Camel to invoke a
+When invoking a xref:eips:bean-eip.adoc[Bean] you can instruct Camel to invoke a
 specific method by providing the method name:
 
 [source,syntaxhighlighter-pre]
@@ -465,7 +465,7 @@ use `.to` instead as shown:
 
 *Since Camel 2.8*
 
-If you have a xref:bean-eip.adoc[Bean] with overloaded methods, you can now
+If you have a xref:eips:bean-eip.adoc[Bean] with overloaded methods, you can now
 specify parameter types in the method name so Camel can match the method
 you intend to use.
 
diff --git a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
index ce69d9f..24852c9 100644
--- a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
+++ b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
@@ -13,7 +13,7 @@ Streams are caching in memory. In Camel 2.0, large stream messages (over 64 KB i
 *StreamCache Affects your payload object*
 
 The `StreamCache` will affect your payload object as it will replace the `Stream` payload with a `org.apache.camel.StreamCache` object.
-This `StreamCache` is capable of being re-readable and thus possible to better be routed within Camel using redelivery or xref:content-based-router-eip.adoc[Content Based Router] or the likes.
+This `StreamCache` is capable of being re-readable and thus possible to better be routed within Camel using redelivery or xref:eips:content-based-router-eip.adoc[Content Based Router] or the likes.
 
 However to not change the payload under the covers without the end user really knowing we changed the default in Camel 2.0 to *disabled*. So in Camel 2.0 you have to explicit enable it if you want to use it.
 ====
diff --git a/docs/user-manual/modules/ROOT/pages/threading-model.adoc b/docs/user-manual/modules/ROOT/pages/threading-model.adoc
index 6c5e5cb..32acbe4 100644
--- a/docs/user-manual/modules/ROOT/pages/threading-model.adoc
+++ b/docs/user-manual/modules/ROOT/pages/threading-model.adoc
@@ -29,7 +29,7 @@ default thread pool profile which is:
 --------------------------------------------------------------------------------------------------------
 
 What that means is that for example when you use
-xref:multicast-eip.adoc[Multicast] with `parallelProcessing=true` enabled,
+xref:eips:multicast-eip.adoc[Multicast] with `parallelProcessing=true` enabled,
 then it would create a thread pool based on the profile above. The
 `rejectedPolicy` has four options:
 `Abort, CallerRuns, Discard, DiscardOldest` which corresponds to the
@@ -79,7 +79,7 @@ xref:registry.adoc[Registry] for a `ExecutorService` with the id =
 fooProfile. If none found it will fallback and see if there is a
 `ThreadPoolProfile` defined with that id. And in this example there is
 and so the profile is used for creating a new `ExecutorService` which is
-handed back to the xref:multicast-eip.adoc[Multicast] EIP to use in the
+handed back to the xref:eips:multicast-eip.adoc[Multicast] EIP to use in the
 route.
 
 [[ThreadingModel-Createcustomthreadpool]]
diff --git a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
index cc8fabe..54cbe8d 100644
--- a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
+++ b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
@@ -384,7 +384,7 @@ placeholder namespace.
 In the example below we use the `prop` prefix for the namespace
 `\http://camel.apache.org/schema/placeholder` by which we can use the
 `prop` prefix in the attributes in the XML DSLs. Notice how we use
-that in the xref:multicast-eip.adoc[Multicast] to indicate that the option
+that in the xref:eips:multicast-eip.adoc[Multicast] to indicate that the option
 `stopOnException` should be the value of the placeholder with the key
 `stop`.
 
diff --git a/docs/user-manual/modules/ROOT/pages/walk-through-another-example.adoc b/docs/user-manual/modules/ROOT/pages/walk-through-another-example.adoc
index 951c656..ecc3c86 100644
--- a/docs/user-manual/modules/ROOT/pages/walk-through-another-example.adoc
+++ b/docs/user-manual/modules/ROOT/pages/walk-through-another-example.adoc
@@ -156,7 +156,7 @@ sendConfirmEmai bean
 
 What to notice here is that the `to` is not the end of the route (the
 world) in this example it's used in the middle of the
-xref:pipeline-eip.adoc[Pipes and filters]. In fact we can change
+xref:eips:pipeline-eip.adoc[Pipes and filters]. In fact we can change
 the `bean` types to `to` as well:
 
 [source,syntaxhighlighter-pre]
diff --git a/docs/user-manual/modules/ROOT/pages/writing-components.adoc b/docs/user-manual/modules/ROOT/pages/writing-components.adoc
index 333ccc8..9cca6df 100644
--- a/docs/user-manual/modules/ROOT/pages/writing-components.adoc
+++ b/docs/user-manual/modules/ROOT/pages/writing-components.adoc
@@ -27,7 +27,7 @@ When implementing an xref:endpoint.adoc[Endpoint] you typically may
 implement one or more of the following methods:
 
 * `createProducer` will create a producer for sending message exchanges to the endpoint
-* `createConsumer` implements the xref:eventDrivenConsumer-eip.adoc[Event Driven Consumer]
+* `createConsumer` implements the xref:eips:eventDrivenConsumer-eip.adoc[Event Driven Consumer]
 pattern for consuming message exchanges from the endpoint.
 
 Typically you just derive from `DefaultEndpoint`


[camel] 02/18: update UpdateReadmeMojo.java to new docs structure; set correct location of eip docs

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit e318725109fe7b3c96ab8b6eb46e108976973917
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 11:20:48 2020 -0700

    update UpdateReadmeMojo.java to new docs structure; set correct location of eip docs
---
 .../camel/maven/packaging/UpdateReadmeMojo.java    | 36 +++++++++++++++-------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java
index 6520d8b..9b09b3d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java
@@ -62,15 +62,27 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
     protected File buildDir;
 
     /**
-     * The documentation directory
+     * The component documentation directory
      */
     @Parameter(defaultValue = "${project.basedir}/src/main/docs")
-    protected File docDir;
+    protected File componentDocDir;
 
     /**
-     * The documentation EIP directory
+     * The dataformat documentation directory
      */
-    @Parameter(defaultValue = "${project.basedir}/src/main/docs/eips")
+    @Parameter(defaultValue = "${project.basedir}/src/main/docs")
+    protected File dataformatDocDir;
+
+    /**
+     * The language documentation directory
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/main/docs/modules/languages/pages")
+    protected File languageDocDir;
+
+    /**
+     * The EIP documentation directory
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/main/docs/modules/eips/pages")
     protected File eipDocDir;
 
     /**
@@ -82,8 +94,10 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
     @Override
     public void execute(MavenProject project, MavenProjectHelper projectHelper, BuildContext buildContext) throws MojoFailureException, MojoExecutionException {
         buildDir = new File(project.getBuild().getDirectory());
-        docDir = new File(project.getBasedir(), "src/main/docs");
-        eipDocDir = new File(project.getBasedir(), "src/main/docs/eips");
+        componentDocDir = new File(project.getBasedir(), "src/main/docs");
+        dataformatDocDir = new File(project.getBasedir(), "src/main/docs");
+        languageDocDir = new File(project.getBasedir(), "/src/main/docs/modules/languages/pages");
+        eipDocDir = new File(project.getBasedir(), "src/main/docs/modules/eips/pages");
         super.execute(project, projectHelper, buildContext);
     }
 
@@ -111,7 +125,7 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
                     // special for some components
                     componentName = asComponentName(componentName);
 
-                    File file = new File(docDir, componentName + "-component.adoc");
+                    File file = new File(componentDocDir, componentName + "-component.adoc");
 
                     ComponentModel model = generateComponentModel(json);
                     String title = asComponentTitle(model.getScheme(), model.getTitle());
@@ -190,7 +204,7 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
                     // special for some data formats
                     dataFormatName = asDataFormatName(dataFormatName);
 
-                    File file = new File(docDir, dataFormatName + "-dataformat.adoc");
+                    File file = new File(dataformatDocDir, dataFormatName + "-dataformat.adoc");
 
                     DataFormatModel model = generateDataFormatModel(json);
                     // Bindy has 3 derived dataformats, but only one doc, so
@@ -255,7 +269,7 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
             for (String languageName : languageNames) {
                 String json = loadJsonFrom(jsonFiles, "language", languageName);
                 if (json != null) {
-                    File file = new File(docDir, languageName + "-language.adoc");
+                    File file = new File(languageDocDir, languageName + "-language.adoc");
 
                     LanguageModel model = JsonMapper.generateLanguageModel(json);
                     // skip option named id
@@ -304,9 +318,9 @@ public class UpdateReadmeMojo extends AbstractGeneratorMojo {
     }
 
     private void executeEips() throws MojoExecutionException {
-        // only run if in camel-core
+        // only run if in camel-core-engine
         String currentDir = Paths.get(".").normalize().toAbsolutePath().toString();
-        if (!currentDir.endsWith("camel-core")) {
+        if (!currentDir.endsWith("camel-core-engine")) {
             return;
         }
 


[camel] 08/18: fix xrefs in eip pages

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ce69d8dac53193b3c1c8e40c22dd5981c70ed919
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 12:32:18 2020 -0700

    fix xrefs in eip pages
---
 .../docs/modules/eips/pages/aggregate-eip.adoc     | 20 ++++-----
 .../src/main/docs/modules/eips/pages/bean-eip.adoc | 12 ++---
 .../main/docs/modules/eips/pages/choice-eip.adoc   |  6 +--
 .../docs/modules/eips/pages/claimCheck-eip.adoc    |  2 +-
 .../eips/pages/content-based-router-eip.adoc       | 18 ++++----
 .../modules/eips/pages/content-filter-eip.adoc     | 26 +++++------
 .../docs/modules/eips/pages/dynamicRouter-eip.adoc |  2 +-
 .../eips/pages/eventDrivenConsumer-eip.adoc        | 24 +++++-----
 .../main/docs/modules/eips/pages/filter-eip.adoc   | 12 ++---
 .../modules/eips/pages/idempotentConsumer-eip.adoc |  4 +-
 .../src/main/docs/modules/eips/pages/log-eip.adoc  |  8 ++--
 .../main/docs/modules/eips/pages/marshal-eip.adoc  |  4 +-
 .../docs/modules/eips/pages/multicast-eip.adoc     |  2 +-
 .../docs/modules/eips/pages/otherwise-eip.adoc     |  4 +-
 .../main/docs/modules/eips/pages/pipeline-eip.adoc |  6 +--
 .../main/docs/modules/eips/pages/process-eip.adoc  | 10 ++---
 .../main/docs/modules/eips/pages/rollback-eip.adoc | 12 ++---
 .../main/docs/modules/eips/pages/script-eip.adoc   |  2 +-
 .../main/docs/modules/eips/pages/split-eip.adoc    |  2 +-
 .../src/main/docs/modules/eips/pages/step-eip.adoc |  2 +-
 .../src/main/docs/modules/eips/pages/to-eip.adoc   | 12 ++---
 .../src/main/docs/modules/eips/pages/toD-eip.adoc  | 12 ++---
 .../docs/modules/eips/pages/transform-eip.adoc     |  2 +-
 .../docs/modules/eips/pages/unmarshal-eip.adoc     |  4 +-
 .../src/main/docs/modules/eips/pages/when-eip.adoc |  4 +-
 .../main/docs/modules/eips/pages/wireTap-eip.adoc  | 52 +++++++++++-----------
 26 files changed, 132 insertions(+), 132 deletions(-)

diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
index 077725c..e0ff477 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
@@ -3,12 +3,12 @@
 
 The
 http://www.enterpriseintegrationpatterns.com/Aggregator.html[Aggregator]
-from the xref:enterprise-integration-patterns.adoc[EIP patterns] allows
+from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns] allows
 you to combine a number of messages together into a single message.
 
 image::eip/Aggregator.gif[image]
 
-A correlation xref:expression.adoc[Expression] is used to determine the
+A correlation xref:ROOT:expression.adoc[Expression] is used to determine the
 messages which should be aggregated together. If you want to aggregate
 all messages into a single message, just use a constant expression. An
 AggregationStrategy is used to combine all the message exchanges for a
@@ -111,7 +111,7 @@ class ArrayListAggregationStrategy implements AggregationStrategy {
 
 == About completion
 
-When aggregation xref:exchange.adoc[Exchange]s at some point you need to
+When aggregation xref:ROOT:exchange.adoc[Exchange]s at some point you need to
 indicate that the aggregated exchanges is complete, so they can be send
 out of the aggregator. Camel allows you to indicate completion in
 various ways as follows:
@@ -123,7 +123,7 @@ key within the period.
 exchanges are completed.
 * completionSize - Is a number indicating that after X aggregated
 exchanges it's complete.
-* completionPredicate - Runs a xref:predicate.adoc[Predicate] when a new
+* completionPredicate - Runs a xref:ROOT:predicate.adoc[Predicate] when a new
 exchange is aggregated to determine if we are complete or not.
 The configured aggregationStrategy can implement the
 Predicate interface and will be used as the completionPredicate if no
@@ -132,7 +132,7 @@ implement `PreCompletionAwareAggregationStrategy` and will be used as
 the completionPredicate in pre-complete check mode. See further below
 for more details.
 * completionFromBatchConsumer - Special option for
-xref:batch-consumer.adoc[Batch Consumer] which allows you to complete
+xref:ROOT:batch-consumer.adoc[Batch Consumer] which allows you to complete
 when all the messages from the batch has been aggregated.
 * forceCompletionOnStop - Indicates to complete all current
 aggregated exchanges when the context is stopped
@@ -152,9 +152,9 @@ aggregator. If not provided Camel will thrown an Exception on startup.
 == Pre-completion mode
 
 There can be use-cases where you want the incoming
-xref:exchange.adoc[Exchange] to determine if the correlation group
+xref:ROOT:exchange.adoc[Exchange] to determine if the correlation group
 should pre-complete, and then the incoming
-xref:exchange.adoc[Exchange] is starting a new group from scratch. To
+xref:ROOT:exchange.adoc[Exchange] is starting a new group from scratch. To
 determine this the `AggregationStrategy` can
 implement `PreCompletionAwareAggregationStrategy` which has
 a `preComplete` method:
@@ -558,7 +558,7 @@ without using POJOs then you may have `null` as `oldExchange` or
 Aggregate EIP will invoke the
 `AggregationStrategy` with `oldExchange` as null, for the first
 Exchange incoming to the aggregator. And then for
-subsequent xref:exchange.adoc[Exchange]s then `oldExchange` and
+subsequent xref:ROOT:exchange.adoc[Exchange]s then `oldExchange` and
 `newExchange` parameters are both not null.
 
 Example with Content Enricher EIP and no data
@@ -614,14 +614,14 @@ public class MyBodyAppender {
 }
 ----
 
-In the example above we use the xref:content-enricher.adoc[Content Enricher]
+In the example above we use the xref:ROOT:content-enricher.adoc[Content Enricher]
 EIP using `pollEnrich`. The `newExchange` will be null in the
 situation we could not get any data from the "seda:foo" endpoint, and
 therefore the timeout was hit after 1 second. So if we need to do some
 special merge logic we would need to set `setAllowNullNewExchange=true`,
 so the `append` method will be invoked. If we do not do that then when
 the timeout was hit, then the append method would normally not be
-invoked, meaning the xref:content-enricher.adoc[Content Enricher] did
+invoked, meaning the xref:ROOT:content-enricher.adoc[Content Enricher] did
 not merge/change the message.
 
 In XML DSL you would configure the `strategyMethodAllowNull` option and
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
index 6de8313..eee6fc0 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
@@ -11,7 +11,7 @@ bean:beanID[?options]
 ----
 
 Where *beanID* can be any string which is used to look up the bean in
-the xref:registry.adoc[Registry]
+the xref:ROOT:registry.adoc[Registry]
 
 == EIP options
 
@@ -46,10 +46,10 @@ Camel also supports invoking xref:components::bean-component.adoc[Bean] as an En
 route below:
 
 What happens is that when the exchange is routed to the `myBean` Camel
-will use the xref:bean-binding.adoc[Bean Binding] to invoke the bean. +
+will use the xref:ROOT:bean-binding.adoc[Bean Binding] to invoke the bean. +
  The source for the bean is just a plain POJO:
 
-Camel will use xref:bean-binding.adoc[Bean Binding] to invoke the
+Camel will use xref:ROOT:bean-binding.adoc[Bean Binding] to invoke the
 `sayHello` method, by converting the Exchange's In body to the `String`
 type and storing the output of the method on the Exchange Out body.
 
@@ -89,8 +89,8 @@ from("direct:start").bean(ExampleBean.class);
 
 How bean methods to be invoked are chosen (if they are not specified
 explicitly through the *method* parameter) and how parameter values are
-constructed from the xref:message.adoc[Message] are all defined by the
-xref:bean-binding.adoc[Bean Binding] mechanism which is used throughout
-all of the various xref:bean-integration.adoc[Bean Integration]
+constructed from the xref:ROOT:message.adoc[Message] are all defined by the
+xref:ROOT:bean-binding.adoc[Bean Binding] mechanism which is used throughout
+all of the various xref:ROOT:bean-integration.adoc[Bean Integration]
 mechanisms in Camel.
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc
index d1fdd27..c24766d 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc
@@ -3,7 +3,7 @@
 
 The
 http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
+Based Router] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP
 patterns] allows you to route messages to the correct destination based
 on the contents of the message exchanges.
 
@@ -26,7 +26,7 @@ The Choice EIP supports 2 options which are listed below:
 
 The following example shows how to route a request from an input
 *seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
+the evaluation of various xref:ROOT:predicate.adoc[Predicate] expressions
 
 [source,java]
 ----
@@ -46,7 +46,7 @@ RouteBuilder builder = new RouteBuilder() {
 
 [TIP]
 ====
-See xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
+See xref:ROOT:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
 can I not use when or otherwise in a Java Camel route] if you have
 problems with the Java DSL, accepting using `when` or `otherwise`.
 ====
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
index 4f0d729..d9077c3 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
@@ -1,7 +1,7 @@
 [[claimCheck-eip]]
 = Claim Check EIP
 
-The http://www.enterpriseintegrationpatterns.com/patterns/messaging/StoreInLibrary.html[Claim Check] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
+The http://www.enterpriseintegrationpatterns.com/patterns/messaging/StoreInLibrary.html[Claim Check] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns]
 allows you to replace message content with a claim check (a unique key), which can be used to retrieve the message content at a later time.
 
 image::eip/StoreInLibrary.gif[image]
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc
index 48ebb36..f4495de 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc
@@ -3,7 +3,7 @@
 
 The
 http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
+Based Router] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP
 patterns] allows you to route messages to the correct destination based
 on the contents of the message exchanges.
 
@@ -11,9 +11,9 @@ image::eip/ContentBasedRouter.gif[image]
 
 The following example shows how to route a request from an input
 *seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
+the evaluation of various xref:ROOT:predicate.adoc[Predicate] expressions
 
-== Using the xref:fluent-builders.adoc[Fluent Builders]
+== Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]
 
 [source,java]
 ----
@@ -36,12 +36,12 @@ RouteBuilder builder = new RouteBuilder() {
 [TIP]
 ====
 See
-xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
+xref:ROOT:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
 can I not use when or otherwise in a Java Camel route] if you have
 problems with the Java DSL, accepting using `when` or `otherwise`.
 ====
 
-== Using the xref:spring-xml-extensions.adoc[Spring XML Extensions]
+== Using the xref:ROOT:spring-xml-extensions.adoc[Spring XML Extensions]
 
 [source,java]
 ----
@@ -72,8 +72,8 @@ https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/ap
 == Using This Pattern
 
 If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started]. You may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
+xref:ROOT:getting-started.adoc[Getting Started]. You may also find the
+xref:ROOT:architecture.adoc[Architecture] useful particularly the description
+of xref:ROOT:endpoint.adoc[Endpoint] and xref:ROOT:uris.adoc[URIs]. Then you could
+try out some of the xref:ROOT:examples.adoc[Examples] first before trying
 this pattern out.
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
index 5d106e7..6adf9bc 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
@@ -4,26 +4,26 @@
 Camel supports the
 http://www.enterpriseintegrationpatterns.com/ContentFilter.html[Content
 Filter] from the
-xref:enterprise-integration-patterns.adoc[EIP patterns]
+xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns]
 using one of the following mechanisms in the routing logic to transform
 content from the inbound message.
 
-* xref:message-translator.adoc[Message Translator]
-* invoking a xref:bean-integration.adoc[Java bean]
-* xref:processor.adoc[Processor] object
+* xref:ROOT:message-translator.adoc[Message Translator]
+* invoking a xref:ROOT:bean-integration.adoc[Java bean]
+* xref:ROOT:processor.adoc[Processor] object
 
 image::eip/ContentFilter.gif[image]
 
 A common way to filter messages is to use an
-xref:expression.adoc[Expression] in the xref:dsl.adoc[DSL] like
+xref:ROOT:expression.adoc[Expression] in the xref:ROOT:dsl.adoc[DSL] like
 xref:components::xquery-language.adoc[XQuery] or one of the supported
-xref:scripting-languages.adoc[Scripting Languages].
+xref:ROOT:scripting-languages.adoc[Scripting Languages].
 
-== Using the xref:fluent-builders.adoc[Fluent Builders]
+== Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]
 
-Here is a simple example using the xref:dsl.adoc[DSL] directly
+Here is a simple example using the xref:ROOT:dsl.adoc[DSL] directly
 
-In this example we add our own xref:processor.adoc[Processor]
+In this example we add our own xref:ROOT:processor.adoc[Processor]
 
 For further examples of this pattern in use you could look at one of the
 JUnit tests
@@ -58,8 +58,8 @@ interested in:
 == Using This Pattern
 
 If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started], you may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
+xref:ROOT:getting-started.adoc[Getting Started], you may also find the
+xref:ROOT:architecture.adoc[Architecture] useful particularly the description
+of xref:ROOT:endpoint.adoc[Endpoint] and xref:ROOT:uris.adoc[URIs]. Then you could
+try out some of the xref:ROOT:examples.adoc[Examples] first before trying
 this pattern out.
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
index 3453e72e..e4cca6a 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
@@ -1,7 +1,7 @@
 [[dynamicRouter-eip]]
 = Dynamic Router EIP
 
-The http://www.enterpriseintegrationpatterns.com/DynamicRouter.html[Dynamic Router] from the xref:enterprise-integration-patterns.adoc[EIP patterns] allows you to route messages while avoiding the dependency of the router on all possible destinations while maintaining its efficiency.
+The http://www.enterpriseintegrationpatterns.com/DynamicRouter.html[Dynamic Router] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns] allows you to route messages while avoiding the dependency of the router on all possible destinations while maintaining its efficiency.
 
 image::eip/DynamicRouter.gif[image]
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc
index d6da362..371ff12 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc
@@ -4,7 +4,7 @@
 Camel supports the
 http://www.enterpriseintegrationpatterns.com/EventDrivenConsumer.html[Event Driven Consumer]
 from the
-xref:enterprise-integration-patterns.adoc[EIP patterns].
+xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns].
 The default consumer model is event based (i.e. asynchronous)
 as this means that the Camel container can then manage pooling,
 threading and concurrency for you in a declarative manner.
@@ -13,18 +13,18 @@ image::eip/EventDrivenConsumerSolution.gif[image]
 
 The Event Driven Consumer is implemented by consumers implementing the
 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
-interface which is invoked by the xref:message-endpoint.adoc[Message Endpoint]
-when a xref:message.adoc[Message] is available for processing.
+interface which is invoked by the xref:ROOT:message-endpoint.adoc[Message Endpoint]
+when a xref:ROOT:message.adoc[Message] is available for processing.
 
 [[eventDrivenConsumer-Example]]
 == Example
 
 The following demonstrates a
 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
-defined in the Camel xref:registry.adoc[Registry] which is
+defined in the Camel xref:ROOT:registry.adoc[Registry] which is
 invoked when an event occurs from a xref:components::jms-component.adoc[JMS] queue.
 
-*Using the xref:fluent-builders.adoc[Fluent Builders]*
+*Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]*
 
 [source,java]
 ----
@@ -32,7 +32,7 @@ from("jms:queue:foo")
     .processRef("processor");
 ----
 
-**Using the xref:spring-xml-extensions.adoc[Spring XML Extensions]**
+**Using the xref:ROOT:spring-xml-extensions.adoc[Spring XML Extensions]**
 
 [source,xml]
 ----
@@ -44,15 +44,15 @@ from("jms:queue:foo")
 
 For more details see:
 
-* xref:message.adoc[Message]
-* xref:message-endpoint.adoc[Message Endpoint]
+* xref:ROOT:message.adoc[Message]
+* xref:ROOT:message-endpoint.adoc[Message Endpoint]
 
 [[eventDrivenConsumer-UsingThisPattern]]
 == Using This Pattern
 
 If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started], you may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
+xref:ROOT:getting-started.adoc[Getting Started], you may also find the
+xref:ROOT:architecture.adoc[Architecture] useful particularly the description
+of xref:ROOT:endpoint.adoc[Endpoint] and xref:ROOT:uris.adoc[URIs]. Then you could
+try out some of the xref:ROOT:examples.adoc[Examples] first before trying
 this pattern out.
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc
index f7f9982..053abbc 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc
@@ -2,14 +2,14 @@
 = Filter EIP
 
 The http://www.enterpriseintegrationpatterns.com/Filter.html[Message
-Filter] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
+Filter] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns]
 allows you to filter messages
 
 image::eip/MessageFilter.gif[image]
 
 The following example shows how to create a Message Filter route
 consuming messages from an endpoint called *queue:a*, which if the
-xref:predicate.adoc[Predicate] is true will be dispatched to *queue:b*
+xref:ROOT:predicate.adoc[Predicate] is true will be dispatched to *queue:b*
 
 == EIP options
 
@@ -86,15 +86,15 @@ the when predicate by using the `.stop()`.
 == Knowing if Exchange was filtered or not
 
 The xref:filter-eip.adoc[Message Filter] EIP will add a property on
-the xref:exchange.adoc[Exchange] that states if it was filtered or not.
+the xref:ROOT:exchange.adoc[Exchange] that states if it was filtered or not.
 
 The property has the key `Exchange.FILTER_MATCHED`, which has the String
 value of `CamelFilterMatched`. Its value is a boolean indicating `true`
-or `false`. If the value is `true` then the xref:exchange.adoc[Exchange]
+or `false`. If the value is `true` then the xref:ROOT:exchange.adoc[Exchange]
 was routed in the filter block. This property will be visible within the
 xref:filter-eip.adoc[Message Filter] block who's
-xref:predicate.adoc[Predicate] matches (value set to `true`), and to the
+xref:ROOT:predicate.adoc[Predicate] matches (value set to `true`), and to the
 steps immediately following the xref:filter-eip.adoc[Message Filter]
 with the value set based on the results of the last
-xref:filter-eip.adoc[Message Filter] xref:predicate.adoc[Predicate]
+xref:filter-eip.adoc[Message Filter] xref:ROOT:predicate.adoc[Predicate]
 evaluated.
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
index 6835947..2492dd1 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
@@ -3,7 +3,7 @@
 
 The
 http://www.enterpriseintegrationpatterns.com/IdempotentReceiver.html[Idempotent
-Consumer] from the xref:enterprise-integration-patterns.adoc[EIP
+Consumer] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP
 patterns] is used to filter out duplicate messages.
 
 The Idempotent Consumer essentially acts like a
@@ -23,7 +23,7 @@ Camel provides the following Idempotent Consumer implementations:
 * xref:components::jpa-component.adoc[JpaMessageIdRepository]
 * xref:components::infinispan-component.adoc[InfinispanIdempotentRepository]
 * xref:components::jcache-component.adoc[JCacheIdempotentRepository]
-* xref:spring.adoc[SpringCacheIdempotentRepository]
+* xref:ROOT:spring.adoc[SpringCacheIdempotentRepository]
 * xref:components::ehcache-component.adoc[EhcacheIdempotentRepository]
 * xref:components::kafka-component.adoc[KafkaIdempotentRepository]
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
index 151fd43..d0e02b7 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
@@ -1,12 +1,12 @@
 [[log-eip]]
 = Log EIP
 
-How can I log the processing of a xref:message.adoc[Message]?
+How can I log the processing of a xref:ROOT:message.adoc[Message]?
 
 Camel provides many ways to log the fact that you are processing a message. Here are just a few examples:
 * You can use the xref:components::log-component.adoc[Log] component which logs the Message content.
-* You can use the xref:tracer.adoc[Tracer] which trace logs message flow.
-* You can also use a xref:processor.adoc[Processor] or xref:bean-binding.adoc[Bean] and log from Java code.
+* You can use the xref:ROOT:tracer.adoc[Tracer] which trace logs message flow.
+* You can also use a xref:ROOT:processor.adoc[Processor] or xref:ROOT:bean-binding.adoc[Bean] and log from Java code.
 * You can use the log DSL.
 
 == Options
@@ -31,7 +31,7 @@ The log DSL is much lighter and meant for logging human logs such as Starting to
 
 == Samples
 
-You can use the log DSL which allows you to use xref:simple-language.adoc[Simple] language to construct a dynamic message which gets logged.
+You can use the log DSL which allows you to use xref:languages:simple-language.adoc[Simple] language to construct a dynamic message which gets logged.
 
 For example you can do
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
index ddc53aa..8078e09 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
@@ -1,7 +1,7 @@
 [[marshal-eip]]
 = Marshal EIP
 
-Marshalling is the opposite of unmarshalling, where a bean is marshalled into some binary or textual format for transmission over some transport via a Camel xref:components::index.adoc[Components]. Marshalling is used in the same way as unmarshalling above; in the xref:dsl.adoc[DSL] you can use a DataFormat instance, you can configure the DataFormat dynamically using the DSL or you can refer to a named instance of the format in the xref:registry.adoc[Registry].
+Marshalling is the opposite of unmarshalling, where a bean is marshalled into some binary or textual format for transmission over some transport via a Camel xref:components::index.adoc[Components]. Marshalling is used in the same way as unmarshalling above; in the xref:ROOT:dsl.adoc[DSL] you can use a DataFormat instance, you can configure the DataFormat dynamically using the DSL or you can refer to a named instance of the format in the xref:ROOT:registry.adoc[Registry].
 
 == Options
 
@@ -17,7 +17,7 @@ The Marshal EIP supports 1 options which are listed below:
 
 == Samples
 
-The following example unmarshals via serialization then marshals using a named JAXB data format to perform a kind of xref:message-translator.adoc[Message Translator].
+The following example unmarshals via serialization then marshals using a named JAXB data format to perform a kind of xref:ROOT:message-translator.adoc[Message Translator].
 
 [source,java]
 ----
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
index 3363680..6f66b48 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
@@ -140,5 +140,5 @@ allows you to do this using the processor
 interface.
 
 Notice the `onPrepare` can be used for any kind of custom logic which
-you would like to execute before the xref:exchange.adoc[Exchange] is
+you would like to execute before the xref:ROOT:exchange.adoc[Exchange] is
 being multicasted.
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc
index 45d4547..5314c76 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc
@@ -2,7 +2,7 @@
 = Otherwise EIP
 
 The Otherwise EIP is related to http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
+Based Router] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP
 patterns]
 
 image::eip/ContentBasedRouter.gif[image]
@@ -17,7 +17,7 @@ The Otherwise EIP has no options.
 
 The following example shows how to route a request from an input
 *direct:a* endpoint to either *direct:b*, *direct:c* or *direct:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
+the evaluation of various xref:ROOT:predicate.adoc[Predicate] expressions
 
 [source,java]
 ----
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc
index 8396970..e949952 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc
@@ -1,12 +1,12 @@
 [[pipeline-eip]]
 = Pipeline EIP
 
-Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
+Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
 
 image::eip/PipesAndFilters.gif[image]
 
 With Camel you can split your processing across multiple independent
-xref:endpoint.adoc[Endpoint] instances which can then be chained
+xref:ROOT:endpoint.adoc[Endpoint] instances which can then be chained
 together.
 
 == Options
@@ -19,7 +19,7 @@ The Pipeline EIP has no options.
 == Examples
 
 You can create pipelines of logic using multiple
-xref:endpoint.adoc[Endpoint] or xref:message-translator.adoc[Message
+xref:ROOT:endpoint.adoc[Endpoint] or xref:ROOT:message-translator.adoc[Message
 Translator] instances as follows
 
 Though pipeline is the default mode of operation when you specify
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc
index c7c1c09..ca42f8b 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc
@@ -1,7 +1,7 @@
 [[process-eip]]
 = Process EIP
 
-The http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor] interface is used to implement consumers of message exchanges or to implement a xref:message-translator.adoc[Message Translator]
+The http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor] interface is used to implement consumers of message exchanges or to implement a xref:ROOT:message-translator.adoc[Message Translator]
 
 == Options
 
@@ -32,7 +32,7 @@ public class MyProcessor implements Processor {
 
 You can then easily use this inside a route by declaring the bean in
 Spring, say via the XML (or registering it in JNDI if that is your
-xref:registry.adoc[Registry])
+xref:ROOT:registry.adoc[Registry])
 
 [source,xml]
 --------------------------------------------------------
@@ -58,7 +58,7 @@ Processor myProcessor = new MyProcessor();
 from("activemq:myQueue").process(myProcessor);
 ----
 
-If you need to lookup the processor in the xref:registry.adoc[Registry]
+If you need to lookup the processor in the xref:ROOT:registry.adoc[Registry]
 then you should use the *processRef* DSL:
 
 [source,java]
@@ -89,12 +89,12 @@ refactor it into a separate class.
 
 There is a base class called
 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/ProcessorEndpoint.html[ProcessorEndpoint]
-which supports the full xref:endpoint.adoc[Endpoint] semantics given a
+which supports the full xref:ROOT:endpoint.adoc[Endpoint] semantics given a
 Processor instance.
 
 So you just need to create a https://github.com/apache/camel/tree/master/components[Component] class by
 deriving from
 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/DefaultComponent.html[DefaultComponent]
 which returns instances of ProcessorEndpoint. For more details see
-xref:writing-components.adoc[Writing Components]
+xref:ROOT:writing-components.adoc[Writing Components]
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc
index a16a732..2dff166 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc
@@ -4,7 +4,7 @@ Rollback might be needed if there is a transaction or transactional pieces in yo
 
 Camel recommends supporting the
 http://www.enterpriseintegrationpatterns.com/TransactionalClient.html[Transactional
-Client] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
+Client] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns]
 using spring transactions.
 
 image::eip/TransactionalClientSolution.gif[image]
@@ -115,7 +115,7 @@ from("activemq:queue:foo").policy(notsupported).to("activemq:queue:bar");
 
 === OSGi Blueprint
 
-If you are using xref:using-osgi-blueprint-with-camel.adoc[OSGi
+If you are using xref:ROOT:using-osgi-blueprint-with-camel.adoc[OSGi
 Blueprint] then you most likely have to explicit declare a policy and
 refer to the policy from the transacted in the route.
 
@@ -187,10 +187,10 @@ Transaction error handler
 
 When a route is marked as transacted using *transacted* Camel will
 automatic use the
-xref:transactionerrorhandler.adoc[TransactionErrorHandler] as
-xref:error-handler.adoc[Error Handler]. It supports basically the same
-feature set as the xref:defaulterrorhandler.adoc[DefaultErrorHandler],
-so you can for instance use xref:exception-clause.adoc[Exception Clause]
+xref:ROOT:transactionerrorhandler.adoc[TransactionErrorHandler] as
+xref:ROOT:error-handler.adoc[Error Handler]. It supports basically the same
+feature set as the xref:ROOT:defaulterrorhandler.adoc[DefaultErrorHandler],
+so you can for instance use xref:ROOT:exception-clause.adoc[Exception Clause]
 as well.
 
 == Integration Testing with Spring
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc
index a336093..9e52240 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc
@@ -6,7 +6,7 @@ This is useful when you need to invoke some logic that are not in Java code such
 Groovy or any of the other Languages. The message body is not changed (by default) however the scripting
 context has access to the current Exchange and can essentially change the message or headers directly.
 But the return value from the script is discarded and not used.
-If the return value should be used as a changed message body then use xref:message-translator.adoc[Message Translator] EIP instead.
+If the return value should be used as a changed message body then use xref:ROOT:message-translator.adoc[Message Translator] EIP instead.
 
 == Options
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
index 784510b..5771109 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
@@ -1,7 +1,7 @@
 [[split-eip]]
 = Split EIP
 
-The http://www.enterpriseintegrationpatterns.com/patterns/messaging/Sequencer.html[Splitter] from the xref:enterprise-integration-patterns.adoc[EIP patterns] allows you split a message into a number of pieces and process them individually.
+The http://www.enterpriseintegrationpatterns.com/patterns/messaging/Sequencer.html[Splitter] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns] allows you split a message into a number of pieces and process them individually.
 
 image::eip/Sequencer.gif[image]
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc
index d95fa00..c44b88c 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc
@@ -1,7 +1,7 @@
 [[step-eip]]
 = Step EIP
 
-Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
+Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
 
 image::eip/PipesAndFilters.gif[image]
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
index f9ceb03..e6351ea 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
@@ -3,12 +3,12 @@
 
 See message related documentation
 
-* xref:message.adoc[Message]
-* xref:message-bus.adoc[Message Bus]
-* xref:message-channel.adoc[Message Channel]
-* xref:message-endpoint.adoc[Message Endpoint]
-* xref:message-router.adoc[Message Router]
-* xref:message-translator.adoc[Message Translator]
+* xref:ROOT:message.adoc[Message]
+* xref:ROOT:message-bus.adoc[Message Bus]
+* xref:ROOT:message-channel.adoc[Message Channel]
+* xref:ROOT:message-endpoint.adoc[Message Endpoint]
+* xref:ROOT:message-router.adoc[Message Router]
+* xref:ROOT:message-translator.adoc[Message Translator]
 
 == Options
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
index 2b9aca7..e024a25 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
@@ -2,9 +2,9 @@
 = To D EIP
 
 There is a new `.toD` / `<toD>` that allows to send a message to a dynamic
-computed xref:endpoint.adoc[Endpoint] using one or
-more xref:expression.adoc[Expression] that are concat together. By
-default the xref:simple-language.adoc[Simple] language is used to compute
+computed xref:ROOT:endpoint.adoc[Endpoint] using one or
+more xref:ROOT:expression.adoc[Expression] that are concat together. By
+default the xref:languages:simple-language.adoc[Simple] language is used to compute
 the endpoint.
 
 == Options
@@ -45,7 +45,7 @@ And in XML:
 ----
 
 You can also prefix the uri with a value because by default the uri is
-evaluated using the xref:simple-language.adoc[Simple] language
+evaluated using the xref:languages:simple-language.adoc[Simple] language
 
 [source,java]
 ----
@@ -67,7 +67,7 @@ In the example above we compute an endpoint that has prefix "mock:" and
 then the header foo is appended. So for example if the header foo has
 value order, then the endpoint is computed as "mock:order".
 
-You can also use other languages than xref:simple-language.adoc[Simple] such
+You can also use other languages than xref:languages:simple-language.adoc[Simple] such
 as xref:components::xpath-language.adoc[XPath] - this requires to prefix with language: as
 shown below (simple language is the default language). If you do not
 specify language: then the endpoint is a component name. And in some
@@ -102,7 +102,7 @@ using the plus sign `+` such as shown below:
 ----
 
 In the example above the uri is a combination
-of xref:simple-language.adoc[Simple] language and xref:simple-language.adoc[XPath] where
+of xref:languages:simple-language.adoc[Simple] language and xref:languages:simple-language.adoc[XPath] where
 the first part is simple (simple is default language). And then the plus
 sign separate to another language, where we specify the language name
 followed by a colon
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc
index 687d16c..5d1503f 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc
@@ -3,7 +3,7 @@
 
 See below for details
 
-* xref:message-translator.adoc[Message Translator]
+* xref:ROOT:message-translator.adoc[Message Translator]
 
 == Options
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
index c4e2816..7306998 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
@@ -1,7 +1,7 @@
 [[unmarshal-eip]]
 = Unmarshal EIP
 
-If you receive a message from one of the Camel xref:components::index.adoc[Components] such as xref:components::file-component.adoc[File], xref:components::http-component.adoc[HTTP] or xref:components::jms-component.adoc[JMS] you often want to unmarshal the payload into some bean so that you can process it using some xref:bean-integration.adoc[Bean Integration] or perform xref:predicate.adoc[Predicate] evaluation and so forth. To do this use the *unmarshal* word in the xref:dsl.adoc[DSL] [...]
+If you receive a message from one of the Camel xref:components::index.adoc[Components] such as xref:components::file-component.adoc[File], xref:components::http-component.adoc[HTTP] or xref:components::jms-component.adoc[JMS] you often want to unmarshal the payload into some bean so that you can process it using some xref:ROOT:bean-integration.adoc[Bean Integration] or perform xref:ROOT:predicate.adoc[Predicate] evaluation and so forth. To do this use the *unmarshal* word in the xref:ROO [...]
 
 == Options
 
@@ -28,7 +28,7 @@ from("activemq:My.Queue").
   to("mqseries:Another.Queue");
 ----
 
-The above uses a named DataFormat of _jaxb_ which is configured with a number of Java package names. You can if you prefer use a named reference to a data format which can then be defined in your xref:registry.adoc[Registry] such as via your xref:components::spring.adoc[Spring] XML file.
+The above uses a named DataFormat of _jaxb_ which is configured with a number of Java package names. You can if you prefer use a named reference to a data format which can then be defined in your xref:ROOT:registry.adoc[Registry] such as via your xref:components::spring.adoc[Spring] XML file.
 
 You can also use the DSL itself to define the data format as you use it.
 For example the following uses Java serialization to unmarshal a binary
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc
index 5070c54..f659281 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc
@@ -2,7 +2,7 @@
 = When EIP
 
 The When EIP is related to http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
+Based Router] from the xref:ROOT:enterprise-integration-patterns.adoc[EIP
 patterns]
 
 image::eip/ContentBasedRouter.gif[image]
@@ -17,7 +17,7 @@ The When EIP has no options.
 
 The following example shows how to route a request from an input
 *direct:a* endpoint to either *direct:b*, *direct:c* or *direct:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
+the evaluation of various xref:ROOT:predicate.adoc[Predicate] expressions
 
 [source,java]
 ----
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
index 1aabcae..e3c6427 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
@@ -2,7 +2,7 @@
 = Wire Tap EIP
 
 http://www.enterpriseintegrationpatterns.com/WireTap.html[Wire Tap]
-(from the xref:enterprise-integration-patterns.adoc[EIP patterns])
+(from the xref:ROOT:enterprise-integration-patterns.adoc[EIP patterns])
 allows you to route messages to a separate location while they are being
 forwarded to the ultimate destination.
 
@@ -11,9 +11,9 @@ image::eip/WireTap.gif[image]
 == Streams
 
 If you xref:wireTap-eip.adoc[Wire Tap] a stream message body then you
-should consider enabling xref:stream-caching.adoc[Stream caching] to
+should consider enabling xref:ROOT:stream-caching.adoc[Stream caching] to
 ensure the message body can be read at each endpoint. See more details
-at xref:stream-caching.adoc[Stream caching].
+at xref:ROOT:stream-caching.adoc[Stream caching].
 
 TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
 
@@ -43,7 +43,7 @@ The Wire Tap EIP supports 11 options which are listed below:
 
 The WireTap uses a thread pool to process the
 tapped messages. This thread pool will by default use the settings
-detailed at xref:threading-model.adoc[Threading Model]. In particular,
+detailed at xref:ROOT:threading-model.adoc[Threading Model]. In particular,
 when the pool is exhausted (with all threads utilized), further wiretaps
 will be executed synchronously by the calling thread. To remedy this,
 you can configure an explicit thread pool on the xref:wireTap-eip.adoc[Wire
@@ -53,24 +53,24 @@ or more worker threads.
 == WireTap Node
 
 Camel's Wire Tap node supports two flavors when tapping an
-xref:exchange.adoc[Exchange]:
+xref:ROOT:exchange.adoc[Exchange]:
 
 - With the traditional Wire Tap, Camel will copy the original
-xref:exchange.adoc[Exchange] and set its
-xref:exchange-pattern.adoc[Exchange Pattern] to *`InOnly`*, as we want
-the tapped xref:exchange.adoc[Exchange] to be sent in a fire and forget
-style. The tapped xref:exchange.adoc[Exchange] is then sent in a
+xref:ROOT:exchange.adoc[Exchange] and set its
+xref:ROOT:exchange-pattern.adoc[Exchange Pattern] to *`InOnly`*, as we want
+the tapped xref:ROOT:exchange.adoc[Exchange] to be sent in a fire and forget
+style. The tapped xref:ROOT:exchange.adoc[Exchange] is then sent in a
 separate thread so it can run in parallel with the original. Beware that
 only the Exchange is copied - Wire Tap won't do a deep clone (unless you
 specify a custom processor via *`onPrepareRef`* which does that). So all
 copies could share objects from the original Exchange.
 - Camel also provides an option of sending a new
-xref:exchange.adoc[Exchange] allowing you to populate it with new
+xref:ROOT:exchange.adoc[Exchange] allowing you to populate it with new
 values.
 
 == Sending a Copy (traditional wiretap)
 
-* Using the xref:fluent-builders.adoc[Fluent Builders]
+* Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]
 
 [source,java]
 ----
@@ -95,27 +95,27 @@ values.
     }
 ----
 
-== Sending a New xref:exchange.adoc[Exchange]
+== Sending a New xref:ROOT:exchange.adoc[Exchange]
 
-*Using the xref:fluent-builders.adoc[Fluent Builders]*
+*Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]*
 
 Camel supports either a processor or an
-xref:expression.adoc[Expression] to populate the new
-xref:exchange.adoc[Exchange]. Using a processor gives you full power
-over how the xref:exchange.adoc[Exchange] is populated as you can set
-properties, headers, etc. An xref:expression.adoc[Expression] can only
+xref:ROOT:expression.adoc[Expression] to populate the new
+xref:ROOT:exchange.adoc[Exchange]. Using a processor gives you full power
+over how the xref:ROOT:exchange.adoc[Exchange] is populated as you can set
+properties, headers, etc. An xref:ROOT:expression.adoc[Expression] can only
 be used to set the *`IN`* body.
 
-The xref:expression.adoc[Expression] or
-xref:processor.adoc[Processor] is pre-populated with a copy of the
-original xref:exchange.adoc[Exchange], which allows you to access the
-original message when you prepare a new xref:exchange.adoc[Exchange] to
+The xref:ROOT:expression.adoc[Expression] or
+xref:ROOT:processor.adoc[Processor] is pre-populated with a copy of the
+original xref:ROOT:exchange.adoc[Exchange], which allows you to access the
+original message when you prepare a new xref:ROOT:exchange.adoc[Exchange] to
 be sent. You can use the *`copy`* option (enabled by default) to
 indicate whether you want this.
 
 Below is the processor variation,
 where we disable *`copy`* by passing in *`false`* to create a new, empty
-xref:exchange.adoc[Exchange]
+xref:ROOT:exchange.adoc[Exchange]
 
 [source,java]
 ----
@@ -144,7 +144,7 @@ xref:exchange.adoc[Exchange]
 == Using Dynamic URIs
 
 For example to wire tap to a dynamic URI, then it supports the same
-dynamic URIs as documented in xref:message-endpoint.adoc[Message
+dynamic URIs as documented in xref:ROOT:message-endpoint.adoc[Message
 Endpoint]. For example to wire tap to a JMS queue where the header ID is
 part of the queue name:
 
@@ -158,8 +158,8 @@ part of the queue name:
 
 If you send a new message using xref:wireTap-eip.adoc[Wire Tap], then you
 could only set the message body using an
-xref:expression.adoc[Expression] from the DSL. If you also need to set
-headers, you would have to use a xref:processor.adoc[Processor]. From
+xref:ROOT:expression.adoc[Expression] from the DSL. If you also need to set
+headers, you would have to use a xref:ROOT:processor.adoc[Processor]. From
 It's possible to set headers as well using the DSL.
 
 The following example sends a new message which has
@@ -204,4 +204,4 @@ The following example sends a new message which has
 
 See details at xref:multicast-eip.adoc[Multicast]
 
-xref:using-this-pattern.adoc[Using This Pattern]
+xref:ROOT:using-this-pattern.adoc[Using This Pattern]


[camel] 05/18: use antora xref-checker

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b142a201360dbf720c8fa456ee139a2812492a00
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 11:23:52 2020 -0700

    use antora xref-checker
---
 docs/{site.yml => antora-playbook-local-xref-check.yml} |  9 +++++++++
 docs/pom.xml                                            | 16 +++++++---------
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/docs/site.yml b/docs/antora-playbook-local-xref-check.yml
similarity index 78%
rename from docs/site.yml
rename to docs/antora-playbook-local-xref-check.yml
index 2d3808d..416c5cf 100644
--- a/docs/site.yml
+++ b/docs/antora-playbook-local-xref-check.yml
@@ -25,6 +25,15 @@ content:
       start_path: docs/user-manual
     - url: ../
       branches: HEAD
+      start_path: core/camel-core-engine/src/main/docs
+    - url: ../
+      branches: HEAD
+      start_path: core/camel-core-languages/src/main/docs
+    - url: ../
+      branches: HEAD
+      start_path: core/camel-xml-jaxp/src/main/docs
+    - url: ../
+      branches: HEAD
       start_path: docs/components
 
 ui:
diff --git a/docs/pom.xml b/docs/pom.xml
index f80c458..bf94ca1 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -89,18 +89,16 @@
                             <commandlineArgs>${project.basedir}/node/yarn/dist/bin/yarn.js --non-interactive gulp</commandlineArgs>
                         </configuration>
                     </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.camel</groupId>
-                <artifactId>camel-package-maven-plugin</artifactId>
-                <executions>
                     <execution>
-                        <id>xref-check</id>
+                        <id>antora-check-xref</id>
                         <goals>
-                            <goal>xref-check</goal>
+                            <goal>exec</goal>
                         </goals>
-                        <phase>verify</phase>
+                        <phase>generate-resources</phase>
+                        <configuration>
+                            <executable>${project.basedir}/node/node</executable>
+                            <commandlineArgs>${project.basedir}/node_modules/@antora/cli/bin/antora --generator @antora/xref-validator antora-playbook-local-xref-check.yml</commandlineArgs>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>


[camel] 12/18: fix fixable language xrefs in component. Generated broken xrefs remain in index.adoc

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit f8aec1625becc10c73649a50e9e50323e6997277
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 13:21:34 2020 -0700

    fix fixable language xrefs in component.  Generated broken xrefs remain in index.adoc
---
 .../src/main/docs/controlbus-component.adoc        |  4 ++--
 .../camel-elsql/src/main/docs/elsql-component.adoc |  2 +-
 .../camel-file/src/main/docs/file-component.adoc   | 24 +++++++++++-----------
 .../camel-jetty/src/main/docs/jetty-component.adoc |  2 +-
 .../src/main/docs/language-component.adoc          |  2 +-
 .../camel-xpath/src/main/docs/xpath-language.adoc  |  2 +-
 .../modules/ROOT/pages/controlbus-component.adoc   |  4 ++--
 .../modules/ROOT/pages/elsql-component.adoc        |  2 +-
 .../modules/ROOT/pages/file-component.adoc         | 24 +++++++++++-----------
 .../modules/ROOT/pages/jetty-component.adoc        |  2 +-
 .../modules/ROOT/pages/language-component.adoc     |  2 +-
 .../modules/ROOT/pages/xpath-language.adoc         |  2 +-
 12 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/components/camel-controlbus/src/main/docs/controlbus-component.adoc b/components/camel-controlbus/src/main/docs/controlbus-component.adoc
index 382cd41..4ebc599 100644
--- a/components/camel-controlbus/src/main/docs/controlbus-component.adoc
+++ b/components/camel-controlbus/src/main/docs/controlbus-component.adoc
@@ -161,7 +161,7 @@ String xml = template.requestBody("controlbus:route?action=stats", null, String.
 
 == Using Simple language
 
-You can use the xref:manual::simple-language.adoc[Simple] language with the control bus,
+You can use the xref:manual:languages:simple-language.adoc[Simple] language with the control bus,
 for example to stop a specific route, you can send a message to the
 `"controlbus:language:simple"` endpoint containing the following
 message:
@@ -182,7 +182,7 @@ String status = template.requestBody("controlbus:language:simple", "${camelConte
 It's easier to use the `route` command to control lifecycle of
 routes. The `language` command allows you to execute a language script
 that has stronger powers such as xref:groovy-language.adoc[Groovy] or to some
-extend the xref:manual::simple-language.adoc[Simple] language.
+extend the xref:manual:languages:simple-language.adoc[Simple] language.
 
 For example to shutdown Camel itself you can do:
 
diff --git a/components/camel-elsql/src/main/docs/elsql-component.adoc b/components/camel-elsql/src/main/docs/elsql-component.adoc
index 550057d..59c018c 100644
--- a/components/camel-elsql/src/main/docs/elsql-component.adoc
+++ b/components/camel-elsql/src/main/docs/elsql-component.adoc
@@ -44,7 +44,7 @@ The parameters to the SQL queries are named parameters in the elsql
 mapping files, and maps to corresponding keys from the Camel message, in
 the given precedence:
 
-1. from message body if xref:manual::simple-language.adoc[Simple]
+1. from message body if xref:manual:languages:simple-language.adoc[Simple]
 expression.
 
 2. from message body if its a `java.util.Map`
diff --git a/components/camel-file/src/main/docs/file-component.adoc b/components/camel-file/src/main/docs/file-component.adoc
index 926a244..a49fd00 100644
--- a/components/camel-file/src/main/docs/file-component.adoc
+++ b/components/camel-file/src/main/docs/file-component.adoc
@@ -220,7 +220,7 @@ bean completes, and thus the route is completed, the file consumer will
 perform the move operation and move the file to the `.done` sub-folder.
 
 The *move* and the *preMove* options are considered as a directory name
-(though if you use an expression such as xref:manual::file-language.adoc[File Language], or xref:manual::simple-language.adoc[Simple] then the result of the expression
+(though if you use an expression such as xref:manual:languages:file-language.adoc[File Language], or xref:manual:languages:simple-language.adoc[Simple] then the result of the expression
 evaluation is the file name to be used - eg if you set
 
 [source]
@@ -228,7 +228,7 @@ evaluation is the file name to be used - eg if you set
 move=../backup/copy-of-${file:name}
 ----
 
-then that's using the xref:manual::file-language.adoc[File Language] which we
+then that's using the xref:manual:languages:file-language.adoc[File Language] which we
 use return the file name to be used), which can be either relative or
 absolute. If relative, the directory is created as a sub-folder from
 within the folder where the file was consumed.
@@ -266,10 +266,10 @@ processed and after it's processed, it's moved to the `.done` folder.
 
 The *move* and *preMove* options
 are Expression-based, so we have the full power of
-the xref:manual::file-language.adoc[File Language] to do advanced configuration
+the xref:manual:languages:file-language.adoc[File Language] to do advanced configuration
 of the directory and name pattern. +
  Camel will, in fact, internally convert the directory name you enter
-into a xref:manual::file-language.adoc[File Language] expression. So when we
+into a xref:manual:languages:file-language.adoc[File Language] expression. So when we
 enter `move=.done` Camel will convert this into:
 `\${file:parent}/.done/${file:onlyname}`. This is only done if
 Camel detects that you have not provided a $\{ } in the option value
@@ -292,7 +292,7 @@ choice. For example to move the files in an error folder with a
 timestamp you can use
 `moveFailed=/error/${``file:name.noext``}-${date:now:yyyyMMddHHmmssSSS}.${``file:ext`}.
 
-See more examples at xref:manual::file-language.adoc[File Language]
+See more examples at xref:manual:languages:file-language.adoc[File Language]
 
 == Message Headers
 
@@ -306,7 +306,7 @@ The following headers are supported by this component:
 
 |`CamelFileName` |Specifies the name of the file to write (relative to the endpoint
 directory). This name can be a `String`; a `String` with a
-xref:manual::file-language.adoc[File Language] or xref:manual::simple-language.adoc[Simple]
+xref:manual:languages:file-language.adoc[File Language] or xref:manual:languages:simple-language.adoc[Simple]
 expression; or an Expression object. If it's
 `null` then Camel will auto-generate a filename based on the message
 unique ID.
@@ -513,8 +513,8 @@ from("direct:report").to("file:target/reports/?fileName=report.txt");
 == Filename Expression
 
 Filename can be set either using the *expression* option or as a
-string-based xref:manual::file-language.adoc[File Language] expression in the
-`CamelFileName` header. See the xref:manual::file-language.adoc[File Language]
+string-based xref:manual:languages:file-language.adoc[File Language] expression in the
+`CamelFileName` header. See the xref:manual:languages:file-language.adoc[File Language]
 for syntax and samples.
 
 [[File2-Consumingfilesfromfolderswhereothersdropfilesdirectly]]
@@ -797,7 +797,7 @@ today's date as a sub-folder name:
 from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
 ----
 
-See xref:manual::file-language.adoc[File Language] for more samples.
+See xref:manual:languages:file-language.adoc[File Language] for more samples.
 
 == Avoiding reading the same file more than once (idempotent consumer)
 
@@ -998,7 +998,7 @@ Registry for a bean with the ID, `mySorter`.
 === Sorting using sortBy
 
 Camel supports pluggable sorting strategies. This strategy it to use the
-xref:manual::file-language.adoc[File Language] to configure the sorting. The
+xref:manual:languages:file-language.adoc[File Language] to configure the sorting. The
 `sortBy` option is configured as follows:
 
 [source]
@@ -1022,7 +1022,7 @@ This will sort by file name, you can reverse the order by prefixing
 sortBy=reverse:file:name
 ----
 
-As we have the full power of xref:manual::file-language.adoc[File Language] we
+As we have the full power of xref:manual:languages:file-language.adoc[File Language] we
 can use some of the other parameters, so if we want to sort by file size
 we do:
 
@@ -1066,7 +1066,7 @@ sortBy=file:modified;file:name
 Now there is an issue here, can you spot it? Well the modified timestamp
 of the file is too fine as it will be in milliseconds, but what if we
 want to sort by date only and then subgroup by name? +
- Well as we have the true power of xref:manual::file-language.adoc[File Language] we can use its date command that supports patterns. So this
+ Well as we have the true power of xref:manual:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
 can be solved as:
 
 [source]
diff --git a/components/camel-jetty/src/main/docs/jetty-component.adoc b/components/camel-jetty/src/main/docs/jetty-component.adoc
index 51ab58c..63e30cb 100644
--- a/components/camel-jetty/src/main/docs/jetty-component.adoc
+++ b/components/camel-jetty/src/main/docs/jetty-component.adoc
@@ -225,7 +225,7 @@ Jetty component will copy the HTTP request parameter, `one` to the
 exchange's `in.header`. We can then use the `simple` language to route
 exchanges that contain this header to a specific endpoint and all others
 to another. If we used a language more powerful than
-xref:manual::simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
+xref:manual:languages:simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
 we could also test for the parameter value and do routing based on the
 header value as well.
 
diff --git a/components/camel-language/src/main/docs/language-component.adoc b/components/camel-language/src/main/docs/language-component.adoc
index a3b75cc..1bce7ce 100644
--- a/components/camel-language/src/main/docs/language-component.adoc
+++ b/components/camel-language/src/main/docs/language-component.adoc
@@ -108,7 +108,7 @@ script configured on the endpoint.
 
 == Examples
 
-For example you can use the xref:manual::simple-language.adoc[Simple] language to
+For example you can use the xref:manual:languages:simple-language.adoc[Simple] language to
 Message Translator a message:
 
 In case you want to convert the message body type you can do this as
diff --git a/components/camel-xpath/src/main/docs/xpath-language.adoc b/components/camel-xpath/src/main/docs/xpath-language.adoc
index 7e44fbd..0730b0c 100644
--- a/components/camel-xpath/src/main/docs/xpath-language.adoc
+++ b/components/camel-xpath/src/main/docs/xpath-language.adoc
@@ -128,7 +128,7 @@ exchange:
 |function:properties |key for property |String |To lookup a property using the
 xref:properties-component.adoc[Properties] component (property placeholders).
 
-|function:simple |simple expression |Object |To evaluate a xref:manual::simple-language.adoc[Simple] expression.
+|function:simple |simple expression |Object |To evaluate a xref:manual:languages:simple-language.adoc[Simple] expression.
 |===
 
 CAUTION: `function:properties` and `function:simple` is not supported
diff --git a/docs/components/modules/ROOT/pages/controlbus-component.adoc b/docs/components/modules/ROOT/pages/controlbus-component.adoc
index d951d23..5f09e59 100644
--- a/docs/components/modules/ROOT/pages/controlbus-component.adoc
+++ b/docs/components/modules/ROOT/pages/controlbus-component.adoc
@@ -162,7 +162,7 @@ String xml = template.requestBody("controlbus:route?action=stats", null, String.
 
 == Using Simple language
 
-You can use the xref:manual::simple-language.adoc[Simple] language with the control bus,
+You can use the xref:manual:languages:simple-language.adoc[Simple] language with the control bus,
 for example to stop a specific route, you can send a message to the
 `"controlbus:language:simple"` endpoint containing the following
 message:
@@ -183,7 +183,7 @@ String status = template.requestBody("controlbus:language:simple", "${camelConte
 It's easier to use the `route` command to control lifecycle of
 routes. The `language` command allows you to execute a language script
 that has stronger powers such as xref:groovy-language.adoc[Groovy] or to some
-extend the xref:manual::simple-language.adoc[Simple] language.
+extend the xref:manual:languages:simple-language.adoc[Simple] language.
 
 For example to shutdown Camel itself you can do:
 
diff --git a/docs/components/modules/ROOT/pages/elsql-component.adoc b/docs/components/modules/ROOT/pages/elsql-component.adoc
index 9248949..c842c36 100644
--- a/docs/components/modules/ROOT/pages/elsql-component.adoc
+++ b/docs/components/modules/ROOT/pages/elsql-component.adoc
@@ -45,7 +45,7 @@ The parameters to the SQL queries are named parameters in the elsql
 mapping files, and maps to corresponding keys from the Camel message, in
 the given precedence:
 
-1. from message body if xref:manual::simple-language.adoc[Simple]
+1. from message body if xref:manual:languages:simple-language.adoc[Simple]
 expression.
 
 2. from message body if its a `java.util.Map`
diff --git a/docs/components/modules/ROOT/pages/file-component.adoc b/docs/components/modules/ROOT/pages/file-component.adoc
index b1cab97..2a58d76 100644
--- a/docs/components/modules/ROOT/pages/file-component.adoc
+++ b/docs/components/modules/ROOT/pages/file-component.adoc
@@ -221,7 +221,7 @@ bean completes, and thus the route is completed, the file consumer will
 perform the move operation and move the file to the `.done` sub-folder.
 
 The *move* and the *preMove* options are considered as a directory name
-(though if you use an expression such as xref:manual::file-language.adoc[File Language], or xref:manual::simple-language.adoc[Simple] then the result of the expression
+(though if you use an expression such as xref:manual:languages:file-language.adoc[File Language], or xref:manual:languages:simple-language.adoc[Simple] then the result of the expression
 evaluation is the file name to be used - eg if you set
 
 [source]
@@ -229,7 +229,7 @@ evaluation is the file name to be used - eg if you set
 move=../backup/copy-of-${file:name}
 ----
 
-then that's using the xref:manual::file-language.adoc[File Language] which we
+then that's using the xref:manual:languages:file-language.adoc[File Language] which we
 use return the file name to be used), which can be either relative or
 absolute. If relative, the directory is created as a sub-folder from
 within the folder where the file was consumed.
@@ -267,10 +267,10 @@ processed and after it's processed, it's moved to the `.done` folder.
 
 The *move* and *preMove* options
 are Expression-based, so we have the full power of
-the xref:manual::file-language.adoc[File Language] to do advanced configuration
+the xref:manual:languages:file-language.adoc[File Language] to do advanced configuration
 of the directory and name pattern. +
  Camel will, in fact, internally convert the directory name you enter
-into a xref:manual::file-language.adoc[File Language] expression. So when we
+into a xref:manual:languages:file-language.adoc[File Language] expression. So when we
 enter `move=.done` Camel will convert this into:
 `\${file:parent}/.done/${file:onlyname}`. This is only done if
 Camel detects that you have not provided a $\{ } in the option value
@@ -293,7 +293,7 @@ choice. For example to move the files in an error folder with a
 timestamp you can use
 `moveFailed=/error/${``file:name.noext``}-${date:now:yyyyMMddHHmmssSSS}.${``file:ext`}.
 
-See more examples at xref:manual::file-language.adoc[File Language]
+See more examples at xref:manual:languages:file-language.adoc[File Language]
 
 == Message Headers
 
@@ -307,7 +307,7 @@ The following headers are supported by this component:
 
 |`CamelFileName` |Specifies the name of the file to write (relative to the endpoint
 directory). This name can be a `String`; a `String` with a
-xref:manual::file-language.adoc[File Language] or xref:manual::simple-language.adoc[Simple]
+xref:manual:languages:file-language.adoc[File Language] or xref:manual:languages:simple-language.adoc[Simple]
 expression; or an Expression object. If it's
 `null` then Camel will auto-generate a filename based on the message
 unique ID.
@@ -514,8 +514,8 @@ from("direct:report").to("file:target/reports/?fileName=report.txt");
 == Filename Expression
 
 Filename can be set either using the *expression* option or as a
-string-based xref:manual::file-language.adoc[File Language] expression in the
-`CamelFileName` header. See the xref:manual::file-language.adoc[File Language]
+string-based xref:manual:languages:file-language.adoc[File Language] expression in the
+`CamelFileName` header. See the xref:manual:languages:file-language.adoc[File Language]
 for syntax and samples.
 
 [[File2-Consumingfilesfromfolderswhereothersdropfilesdirectly]]
@@ -798,7 +798,7 @@ today's date as a sub-folder name:
 from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
 ----
 
-See xref:manual::file-language.adoc[File Language] for more samples.
+See xref:manual:languages:file-language.adoc[File Language] for more samples.
 
 == Avoiding reading the same file more than once (idempotent consumer)
 
@@ -999,7 +999,7 @@ Registry for a bean with the ID, `mySorter`.
 === Sorting using sortBy
 
 Camel supports pluggable sorting strategies. This strategy it to use the
-xref:manual::file-language.adoc[File Language] to configure the sorting. The
+xref:manual:languages:file-language.adoc[File Language] to configure the sorting. The
 `sortBy` option is configured as follows:
 
 [source]
@@ -1023,7 +1023,7 @@ This will sort by file name, you can reverse the order by prefixing
 sortBy=reverse:file:name
 ----
 
-As we have the full power of xref:manual::file-language.adoc[File Language] we
+As we have the full power of xref:manual:languages:file-language.adoc[File Language] we
 can use some of the other parameters, so if we want to sort by file size
 we do:
 
@@ -1067,7 +1067,7 @@ sortBy=file:modified;file:name
 Now there is an issue here, can you spot it? Well the modified timestamp
 of the file is too fine as it will be in milliseconds, but what if we
 want to sort by date only and then subgroup by name? +
- Well as we have the true power of xref:manual::file-language.adoc[File Language] we can use its date command that supports patterns. So this
+ Well as we have the true power of xref:manual:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
 can be solved as:
 
 [source]
diff --git a/docs/components/modules/ROOT/pages/jetty-component.adoc b/docs/components/modules/ROOT/pages/jetty-component.adoc
index 87f0bb5..e4a6918 100644
--- a/docs/components/modules/ROOT/pages/jetty-component.adoc
+++ b/docs/components/modules/ROOT/pages/jetty-component.adoc
@@ -226,7 +226,7 @@ Jetty component will copy the HTTP request parameter, `one` to the
 exchange's `in.header`. We can then use the `simple` language to route
 exchanges that contain this header to a specific endpoint and all others
 to another. If we used a language more powerful than
-xref:manual::simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
+xref:manual:languages:simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
 we could also test for the parameter value and do routing based on the
 header value as well.
 
diff --git a/docs/components/modules/ROOT/pages/language-component.adoc b/docs/components/modules/ROOT/pages/language-component.adoc
index 476c9f0..92aa1a7 100644
--- a/docs/components/modules/ROOT/pages/language-component.adoc
+++ b/docs/components/modules/ROOT/pages/language-component.adoc
@@ -109,7 +109,7 @@ script configured on the endpoint.
 
 == Examples
 
-For example you can use the xref:manual::simple-language.adoc[Simple] language to
+For example you can use the xref:manual:languages:simple-language.adoc[Simple] language to
 Message Translator a message:
 
 In case you want to convert the message body type you can do this as
diff --git a/docs/components/modules/ROOT/pages/xpath-language.adoc b/docs/components/modules/ROOT/pages/xpath-language.adoc
index 830468c..f5ca7c8 100644
--- a/docs/components/modules/ROOT/pages/xpath-language.adoc
+++ b/docs/components/modules/ROOT/pages/xpath-language.adoc
@@ -129,7 +129,7 @@ exchange:
 |function:properties |key for property |String |To lookup a property using the
 xref:properties-component.adoc[Properties] component (property placeholders).
 
-|function:simple |simple expression |Object |To evaluate a xref:manual::simple-language.adoc[Simple] expression.
+|function:simple |simple expression |Object |To evaluate a xref:manual:languages:simple-language.adoc[Simple] expression.
 |===
 
 CAUTION: `function:properties` and `function:simple` is not supported


[camel] 14/18: move all languages under components:languages

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 5a23033d9a165c1e0d33c6327c03f3db44fc35af
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:09:40 2020 -0700

    move all languages under components:languages
---
 .../camel-bean/src/main/docs/bean-language.adoc    |   4 +-
 .../src/main/docs/controlbus-component.adoc        |   8 +-
 .../camel-elsql/src/main/docs/elsql-component.adoc |   2 +-
 .../camel-file/src/main/docs/file-component.adoc   |  24 +-
 .../src/main/docs/groovy-language.adoc             |   4 +-
 .../camel-jetty/src/main/docs/jetty-component.adoc |   2 +-
 .../src/main/docs/language-component.adoc          |  10 +-
 .../camel-mock/src/main/docs/mock-component.adoc   |   2 +-
 .../src/main/docs/salesforce-component.adoc        |   2 +-
 .../camel-xpath/src/main/docs/xpath-language.adoc  |   4 +-
 .../src/main/docs/properties-component.adoc        |   8 +-
 .../modules/eips/pages/content-filter-eip.adoc     |   2 +-
 .../docs/modules/eips/pages/dynamic-router.adoc    |   2 +-
 .../src/main/docs/modules/eips/pages/log-eip.adoc  |   2 +-
 .../src/main/docs/modules/eips/pages/toD-eip.adoc  |  10 +-
 core/camel-core-languages/src/main/docs/antora.yml |   2 +-
 .../modules/languages/pages/simple-language.adoc   |  10 +-
 core/camel-xml-jaxp/src/main/docs/antora.yml       |   2 +-
 docs/components/antora.yml                         |   3 +-
 docs/components/modules/ROOT/nav.adoc              | 847 ++++++++++-----------
 .../modules/ROOT/pages/bean-language.adoc          | 184 -----
 .../modules/ROOT/pages/controlbus-component.adoc   |   8 +-
 .../modules/ROOT/pages/elsql-component.adoc        |   2 +-
 .../modules/ROOT/pages/file-component.adoc         |  24 +-
 .../modules/ROOT/pages/groovy-language.adoc        | 198 -----
 .../modules/ROOT/pages/hl7terser-language.adoc     | 136 ----
 docs/components/modules/ROOT/pages/index.adoc      |  34 +-
 .../modules/ROOT/pages/jetty-component.adoc        |   2 +-
 .../modules/ROOT/pages/jsonpath-language.adoc      | 341 ---------
 .../modules/ROOT/pages/language-component.adoc     |  10 +-
 .../modules/ROOT/pages/mock-component.adoc         |   2 +-
 .../modules/ROOT/pages/mvel-language.adoc          | 124 ---
 .../modules/ROOT/pages/ognl-language.adoc          | 131 ----
 .../modules/ROOT/pages/properties-component.adoc   |   8 +-
 .../modules/ROOT/pages/salesforce-component.adoc   |   2 +-
 .../modules/ROOT/pages/spel-language.adoc          | 161 ----
 .../modules/ROOT/pages/xpath-language.adoc         | 496 ------------
 .../modules/ROOT/pages/xquery-language.adoc        | 159 ----
 38 files changed, 518 insertions(+), 2454 deletions(-)

diff --git a/components/camel-bean/src/main/docs/bean-language.adoc b/components/camel-bean/src/main/docs/bean-language.adoc
index 27ce338..3b47c41 100644
--- a/components/camel-bean/src/main/docs/bean-language.adoc
+++ b/components/camel-bean/src/main/docs/bean-language.adoc
@@ -16,7 +16,7 @@ methods.
 The xref:manual::bean-binding.adoc[Bean Binding] rules are used to bind the
 xref:manual::message.adoc[Message] Exchange to the method parameters; so you can
 annotate the bean to extract headers or other expressions such as
-xref:components::xpath-language.adoc[XPath] or xref:components::xquery-language.adoc[XQuery] from the message.
+xref:xpath-language.adoc[XPath] or xref:xquery-language.adoc[XQuery] from the message.
 
 == Bean Language options
 
@@ -116,7 +116,7 @@ The xref:bean-language.adoc[Bean Language] also supports invoking beans
 that isn't registered in the xref:manual::registry.adoc[Registry]. This is
 usable for quickly to invoke a bean from Java DSL where you don't need
 to register the bean in the xref:manual::registry.adoc[Registry] such as the
-xref:spring.adoc[Spring] *`ApplicationContext`*. Camel can instantiate
+xref:ROOT:spring.adoc[Spring] *`ApplicationContext`*. Camel can instantiate
 the bean and invoke the method if given a class or invoke an already
 existing instance.
 
diff --git a/components/camel-controlbus/src/main/docs/controlbus-component.adoc b/components/camel-controlbus/src/main/docs/controlbus-component.adoc
index 4ebc599..c14935a 100644
--- a/components/camel-controlbus/src/main/docs/controlbus-component.adoc
+++ b/components/camel-controlbus/src/main/docs/controlbus-component.adoc
@@ -161,7 +161,7 @@ String xml = template.requestBody("controlbus:route?action=stats", null, String.
 
 == Using Simple language
 
-You can use the xref:manual:languages:simple-language.adoc[Simple] language with the control bus,
+You can use the xref:languages:simple-language.adoc[Simple] language with the control bus,
 for example to stop a specific route, you can send a message to the
 `"controlbus:language:simple"` endpoint containing the following
 message:
@@ -181,8 +181,8 @@ String status = template.requestBody("controlbus:language:simple", "${camelConte
 
 It's easier to use the `route` command to control lifecycle of
 routes. The `language` command allows you to execute a language script
-that has stronger powers such as xref:groovy-language.adoc[Groovy] or to some
-extend the xref:manual:languages:simple-language.adoc[Simple] language.
+that has stronger powers such as xref:languages:groovy-language.adoc[Groovy] or to some
+extend the xref:languages:simple-language.adoc[Simple] language.
 
 For example to shutdown Camel itself you can do:
 
@@ -197,7 +197,7 @@ message we sent to the control bus component.
 
 [TIP]
 ====
-You can also use other languages such as xref:groovy-language.adoc[Groovy], etc.
+You can also use other languages such as xref:languages:groovy-language.adoc[Groovy], etc.
 ====
 
 include::camel-spring-boot::page$controlbus-starter.adoc[]
diff --git a/components/camel-elsql/src/main/docs/elsql-component.adoc b/components/camel-elsql/src/main/docs/elsql-component.adoc
index 59c018c..d3066f3 100644
--- a/components/camel-elsql/src/main/docs/elsql-component.adoc
+++ b/components/camel-elsql/src/main/docs/elsql-component.adoc
@@ -44,7 +44,7 @@ The parameters to the SQL queries are named parameters in the elsql
 mapping files, and maps to corresponding keys from the Camel message, in
 the given precedence:
 
-1. from message body if xref:manual:languages:simple-language.adoc[Simple]
+1. from message body if xref:components:languages:simple-language.adoc[Simple]
 expression.
 
 2. from message body if its a `java.util.Map`
diff --git a/components/camel-file/src/main/docs/file-component.adoc b/components/camel-file/src/main/docs/file-component.adoc
index a49fd00..60776ab 100644
--- a/components/camel-file/src/main/docs/file-component.adoc
+++ b/components/camel-file/src/main/docs/file-component.adoc
@@ -220,7 +220,7 @@ bean completes, and thus the route is completed, the file consumer will
 perform the move operation and move the file to the `.done` sub-folder.
 
 The *move* and the *preMove* options are considered as a directory name
-(though if you use an expression such as xref:manual:languages:file-language.adoc[File Language], or xref:manual:languages:simple-language.adoc[Simple] then the result of the expression
+(though if you use an expression such as xref:components:languages:file-language.adoc[File Language], or xref:components:languages:simple-language.adoc[Simple] then the result of the expression
 evaluation is the file name to be used - eg if you set
 
 [source]
@@ -228,7 +228,7 @@ evaluation is the file name to be used - eg if you set
 move=../backup/copy-of-${file:name}
 ----
 
-then that's using the xref:manual:languages:file-language.adoc[File Language] which we
+then that's using the xref:components:languages:file-language.adoc[File Language] which we
 use return the file name to be used), which can be either relative or
 absolute. If relative, the directory is created as a sub-folder from
 within the folder where the file was consumed.
@@ -266,10 +266,10 @@ processed and after it's processed, it's moved to the `.done` folder.
 
 The *move* and *preMove* options
 are Expression-based, so we have the full power of
-the xref:manual:languages:file-language.adoc[File Language] to do advanced configuration
+the xref:components:languages:file-language.adoc[File Language] to do advanced configuration
 of the directory and name pattern. +
  Camel will, in fact, internally convert the directory name you enter
-into a xref:manual:languages:file-language.adoc[File Language] expression. So when we
+into a xref:components:languages:file-language.adoc[File Language] expression. So when we
 enter `move=.done` Camel will convert this into:
 `\${file:parent}/.done/${file:onlyname}`. This is only done if
 Camel detects that you have not provided a $\{ } in the option value
@@ -292,7 +292,7 @@ choice. For example to move the files in an error folder with a
 timestamp you can use
 `moveFailed=/error/${``file:name.noext``}-${date:now:yyyyMMddHHmmssSSS}.${``file:ext`}.
 
-See more examples at xref:manual:languages:file-language.adoc[File Language]
+See more examples at xref:components:languages:file-language.adoc[File Language]
 
 == Message Headers
 
@@ -306,7 +306,7 @@ The following headers are supported by this component:
 
 |`CamelFileName` |Specifies the name of the file to write (relative to the endpoint
 directory). This name can be a `String`; a `String` with a
-xref:manual:languages:file-language.adoc[File Language] or xref:manual:languages:simple-language.adoc[Simple]
+xref:components:languages:file-language.adoc[File Language] or xref:components:languages:simple-language.adoc[Simple]
 expression; or an Expression object. If it's
 `null` then Camel will auto-generate a filename based on the message
 unique ID.
@@ -513,8 +513,8 @@ from("direct:report").to("file:target/reports/?fileName=report.txt");
 == Filename Expression
 
 Filename can be set either using the *expression* option or as a
-string-based xref:manual:languages:file-language.adoc[File Language] expression in the
-`CamelFileName` header. See the xref:manual:languages:file-language.adoc[File Language]
+string-based xref:components:languages:file-language.adoc[File Language] expression in the
+`CamelFileName` header. See the xref:components:languages:file-language.adoc[File Language]
 for syntax and samples.
 
 [[File2-Consumingfilesfromfolderswhereothersdropfilesdirectly]]
@@ -797,7 +797,7 @@ today's date as a sub-folder name:
 from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
 ----
 
-See xref:manual:languages:file-language.adoc[File Language] for more samples.
+See xref:components:languages:file-language.adoc[File Language] for more samples.
 
 == Avoiding reading the same file more than once (idempotent consumer)
 
@@ -998,7 +998,7 @@ Registry for a bean with the ID, `mySorter`.
 === Sorting using sortBy
 
 Camel supports pluggable sorting strategies. This strategy it to use the
-xref:manual:languages:file-language.adoc[File Language] to configure the sorting. The
+xref:components:languages:file-language.adoc[File Language] to configure the sorting. The
 `sortBy` option is configured as follows:
 
 [source]
@@ -1022,7 +1022,7 @@ This will sort by file name, you can reverse the order by prefixing
 sortBy=reverse:file:name
 ----
 
-As we have the full power of xref:manual:languages:file-language.adoc[File Language] we
+As we have the full power of xref:components:languages:file-language.adoc[File Language] we
 can use some of the other parameters, so if we want to sort by file size
 we do:
 
@@ -1066,7 +1066,7 @@ sortBy=file:modified;file:name
 Now there is an issue here, can you spot it? Well the modified timestamp
 of the file is too fine as it will be in milliseconds, but what if we
 want to sort by date only and then subgroup by name? +
- Well as we have the true power of xref:manual:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
+ Well as we have the true power of xref:components:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
 can be solved as:
 
 [source]
diff --git a/components/camel-groovy/src/main/docs/groovy-language.adoc b/components/camel-groovy/src/main/docs/groovy-language.adoc
index edd06e5..9248b41 100644
--- a/components/camel-groovy/src/main/docs/groovy-language.adoc
+++ b/components/camel-groovy/src/main/docs/groovy-language.adoc
@@ -107,7 +107,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |Function with a `resolve` method to make it easier to use
-Camels xref:properties-component.adoc[Properties] component from scripts. See
+Camels xref:ROOT:properties-component.adoc[Properties] component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -126,7 +126,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Since Camel 2.9*
 
-If you need to use the xref:properties-component.adoc[Properties] component from a
+If you need to use the xref:ROOT:properties-component.adoc[Properties] component from a
 script to lookup property placeholders, then its a bit cumbersome to do
 so. 
 For example to set a header name myHeader with a value from a property
diff --git a/components/camel-jetty/src/main/docs/jetty-component.adoc b/components/camel-jetty/src/main/docs/jetty-component.adoc
index 63e30cb..d5a34d5 100644
--- a/components/camel-jetty/src/main/docs/jetty-component.adoc
+++ b/components/camel-jetty/src/main/docs/jetty-component.adoc
@@ -225,7 +225,7 @@ Jetty component will copy the HTTP request parameter, `one` to the
 exchange's `in.header`. We can then use the `simple` language to route
 exchanges that contain this header to a specific endpoint and all others
 to another. If we used a language more powerful than
-xref:manual:languages:simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
+xref:languages:simple-language.adoc[Simple] (such as xref:languages:ognl-language.adoc[OGNL])
 we could also test for the parameter value and do routing based on the
 header value as well.
 
diff --git a/components/camel-language/src/main/docs/language-component.adoc b/components/camel-language/src/main/docs/language-component.adoc
index 1bce7ce..040a1bd 100644
--- a/components/camel-language/src/main/docs/language-component.adoc
+++ b/components/camel-language/src/main/docs/language-component.adoc
@@ -12,14 +12,14 @@ to an endpoint which executes a script by any of the supported
 Languages in Camel. +
  By having a component to execute language scripts, it allows more
 dynamic routing capabilities. For example by using the
-Routing Slip or xref:manual::dynamic-router.adoc[Dynamic
+Routing Slip or xref:manual:eips:dynamic-router.adoc[Dynamic
 Router] EIPs you can send messages to `language` endpoints where the
 script is dynamic defined as well.
 
 This component is provided out of the box in `camel-core` and hence no
 additional JARs is needed. You only have to include additional Camel
 components if the language of choice mandates it, such as using
-xref:groovy-language.adoc[Groovy] or xref:groovy-language.adoc[JavaScript] languages.
+xref:languages:groovy-language.adoc[Groovy] or xref:languages:groovy-language.adoc[JavaScript] languages.
 
 == URI format
 
@@ -108,17 +108,17 @@ script configured on the endpoint.
 
 == Examples
 
-For example you can use the xref:manual:languages:simple-language.adoc[Simple] language to
+For example you can use the xref:languages:simple-language.adoc[Simple] language to
 Message Translator a message:
 
 In case you want to convert the message body type you can do this as
 well:
 
-You can also use the xref:groovy-language.adoc[Groovy] language, such as this
+You can also use the xref:languages:groovy-language.adoc[Groovy] language, such as this
 example where the input message will by multiplied with 2:
 
 You can also provide the script as a header as shown below. Here we use
-xref:xpath-language.adoc[XPath] language to extract the text from the `<foo>`
+xref:languages:xpath-language.adoc[XPath] language to extract the text from the `<foo>`
 tag.
 
 [source,java]
diff --git a/components/camel-mock/src/main/docs/mock-component.adoc b/components/camel-mock/src/main/docs/mock-component.adoc
index 901842a..b90f944 100644
--- a/components/camel-mock/src/main/docs/mock-component.adoc
+++ b/components/camel-mock/src/main/docs/mock-component.adoc
@@ -32,7 +32,7 @@ Expression to create an order testing function,
 * Messages arrive match some kind of Predicate such
 as that specific headers have certain values, or that parts of the
 messages match some predicate, such as by evaluating an
-xref:xpath-language.adoc[XPath] or xref:xpath-language.adoc[XQuery]
+xref:languages:xpath-language.adoc[XPath] or xref:languages:xpath-language.adoc[XQuery]
 Expression.
 
 [NOTE]
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
index 76b707a..58a1a87 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
@@ -365,7 +365,7 @@ For instance, consider that you need to limit the API usage of Salesforce so tha
 other routes. The body of output message contains an instance of
 `org.apache.camel.component.salesforce.api.dto.Limits` object that can be used in conjunction with
 Content Based Router and Content Based Router and 
-xref:spel-language.adoc[Spring Expression Language (SpEL)] to choose when to perform queries.
+xref:languages:spel-language.adoc[Spring Expression Language (SpEL)] to choose when to perform queries.
 
 Notice how multiplying `1.0` with the integer value held in `body.dailyApiRequests.remaining` makes the expression
 evaluate as with floating point arithmetic, without it - it would end up making integral division which would result
diff --git a/components/camel-xpath/src/main/docs/xpath-language.adoc b/components/camel-xpath/src/main/docs/xpath-language.adoc
index 0730b0c..d401190 100644
--- a/components/camel-xpath/src/main/docs/xpath-language.adoc
+++ b/components/camel-xpath/src/main/docs/xpath-language.adoc
@@ -126,9 +126,9 @@ exchange:
 |out:header |the header name |Object |Will return the *out* message header.
 
 |function:properties |key for property |String |To lookup a property using the
-xref:properties-component.adoc[Properties] component (property placeholders).
+xref:ROOT:properties-component.adoc[Properties] component (property placeholders).
 
-|function:simple |simple expression |Object |To evaluate a xref:manual:languages:simple-language.adoc[Simple] expression.
+|function:simple |simple expression |Object |To evaluate a xref:simple-language.adoc[Simple] expression.
 |===
 
 CAUTION: `function:properties` and `function:simple` is not supported
diff --git a/core/camel-base/src/main/docs/properties-component.adoc b/core/camel-base/src/main/docs/properties-component.adoc
index b708e32..14d8525 100644
--- a/core/camel-base/src/main/docs/properties-component.adoc
+++ b/core/camel-base/src/main/docs/properties-component.adoc
@@ -287,9 +287,9 @@ ProducerTemplate for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-== Example with xref:manual:languages:simple-language.adoc[Simple] language
+== Example with xref:languages:simple-language.adoc[Simple] language
 
-The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
+The xref:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -546,7 +546,7 @@ placeholder notation with `{{` and `}}`.
 == Clashing Spring property placeholders with Camels Simple language
 
 Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
+syntax clashes with the xref:languages:simple-language.adoc[Simple] in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -557,7 +557,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
+to indicate using the xref:languages:simple-language.adoc[Simple] language in Camel.
 
 [source,xml]
 ----
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
index 6adf9bc..93b810c 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
@@ -16,7 +16,7 @@ image::eip/ContentFilter.gif[image]
 
 A common way to filter messages is to use an
 xref:ROOT:expression.adoc[Expression] in the xref:ROOT:dsl.adoc[DSL] like
-xref:components::xquery-language.adoc[XQuery] or one of the supported
+xref:components:languages:xquery-language.adoc[XQuery] or one of the supported
 xref:ROOT:scripting-languages.adoc[Scripting Languages].
 
 == Using the xref:ROOT:fluent-builders.adoc[Fluent Builders]
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc
index f99f2e0..6bd839f 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc
@@ -187,7 +187,7 @@ In the above we can use the
 Parameter Binding Annotations
 to bind different parts of the Message to method
 parameters or use an Expression such as using
-xref:components::xpath-language.adoc[XPath] or xref:components::xpath-language.adoc[XQuery].
+xref:components:languages:xpath-language.adoc[XPath] or xref:components:languages:xpath-language.adoc[XQuery].
 
 The method can be invoked in a number of ways as described in the
 Bean Integration such as
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
index d0e02b7..3383ab2 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
@@ -31,7 +31,7 @@ The log DSL is much lighter and meant for logging human logs such as Starting to
 
 == Samples
 
-You can use the log DSL which allows you to use xref:languages:simple-language.adoc[Simple] language to construct a dynamic message which gets logged.
+You can use the log DSL which allows you to use xref:components:languages:simple-language.adoc[Simple] language to construct a dynamic message which gets logged.
 
 For example you can do
 
diff --git a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
index e024a25..0402f0e 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
@@ -4,7 +4,7 @@
 There is a new `.toD` / `<toD>` that allows to send a message to a dynamic
 computed xref:ROOT:endpoint.adoc[Endpoint] using one or
 more xref:ROOT:expression.adoc[Expression] that are concat together. By
-default the xref:languages:simple-language.adoc[Simple] language is used to compute
+default the xref:components:languages:simple-language.adoc[Simple] language is used to compute
 the endpoint.
 
 == Options
@@ -45,7 +45,7 @@ And in XML:
 ----
 
 You can also prefix the uri with a value because by default the uri is
-evaluated using the xref:languages:simple-language.adoc[Simple] language
+evaluated using the xref:components:languages:simple-language.adoc[Simple] language
 
 [source,java]
 ----
@@ -67,8 +67,8 @@ In the example above we compute an endpoint that has prefix "mock:" and
 then the header foo is appended. So for example if the header foo has
 value order, then the endpoint is computed as "mock:order".
 
-You can also use other languages than xref:languages:simple-language.adoc[Simple] such
-as xref:components::xpath-language.adoc[XPath] - this requires to prefix with language: as
+You can also use other languages than xref:components:languages:simple-language.adoc[Simple] such
+as xref:components:languages:xpath-language.adoc[XPath] - this requires to prefix with language: as
 shown below (simple language is the default language). If you do not
 specify language: then the endpoint is a component name. And in some
 cases there is both a component and language with the same name such as
@@ -102,7 +102,7 @@ using the plus sign `+` such as shown below:
 ----
 
 In the example above the uri is a combination
-of xref:languages:simple-language.adoc[Simple] language and xref:languages:simple-language.adoc[XPath] where
+of xref:components:languages:simple-language.adoc[Simple] language and xref:components:languages:simple-language.adoc[XPath] where
 the first part is simple (simple is default language). And then the plus
 sign separate to another language, where we specify the language name
 followed by a colon
diff --git a/core/camel-core-languages/src/main/docs/antora.yml b/core/camel-core-languages/src/main/docs/antora.yml
index 18fe9ae..88b7eba 100644
--- a/core/camel-core-languages/src/main/docs/antora.yml
+++ b/core/camel-core-languages/src/main/docs/antora.yml
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-name: manual
+name: components
 version: latest
diff --git a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
index c5acb3e..42456b7 100644
--- a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
+++ b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
@@ -8,17 +8,17 @@ created, but has since grown more powerful. It is primarily intended for
 being a really small and simple language for evaluating
 Expressions and Predicates
 without requiring any new dependencies or knowledge of
-xref:components::xpath-language.adoc[XPath]; so it is ideal for testing in camel-core. The
+xref:xpath-language.adoc[XPath]; so it is ideal for testing in camel-core. The
 idea was to cover 95% of the common use cases when you need a little bit
 of expression based script in your Camel routes.
 
 However for much more complex use cases you are generally recommended to
 choose a more expressive and powerful language such as:
 
-* xref:components::groovy-language.adoc[Groovy]
-* xref:components::spel-language.adoc[SpEL]
-* xref:components::mvel-component.adoc[MVEL]
-* xref:components::ognl-language.adoc[OGNL]
+* xref:groovy-language.adoc[Groovy]
+* xref:spel-language.adoc[SpEL]
+* xref:mvel-language.adoc[MVEL]
+* xref:ognl-language.adoc[OGNL]
 
 The simple language uses `${body`} placeholders for complex expressions
 where the expression contains constant literals. The $\{ } placeholders
diff --git a/core/camel-xml-jaxp/src/main/docs/antora.yml b/core/camel-xml-jaxp/src/main/docs/antora.yml
index 18fe9ae..88b7eba 100644
--- a/core/camel-xml-jaxp/src/main/docs/antora.yml
+++ b/core/camel-xml-jaxp/src/main/docs/antora.yml
@@ -15,5 +15,5 @@
 # limitations under the License.
 #
 
-name: manual
+name: components
 version: latest
diff --git a/docs/components/antora.yml b/docs/components/antora.yml
index b1f6bd8..d37c65b 100644
--- a/docs/components/antora.yml
+++ b/docs/components/antora.yml
@@ -19,4 +19,5 @@ name: components
 title: Component reference
 version: latest
 nav:
-- modules/ROOT/nav.adoc
+  - modules/ROOT/nav.adoc
+  - modules/languages/nav.adoc
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index a076f6a..c9a59f1 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -1,430 +1,423 @@
 // this file is auto generated and changes to it will be overwritten
 // make edits in docs/*nav.adoc.template files instead
 
-* xref:activemq-component.adoc[ActiveMQ Component]
-* xref:ahc-ws-component.adoc[AHC Websocket Component]
-* xref:ahc-component.adoc[AHC Component]
-* xref:amqp-component.adoc[AMQP Component]
-* xref:any23-dataformat.adoc[Any23 DataFormat]
-* xref:apns-component.adoc[APNS Component]
-* xref:as2-component.adoc[AS2 Component]
-* xref:asn1-dataformat.adoc[ASN.1 File DataFormat]
-* xref:asterisk-component.adoc[Asterisk Component]
-* xref:atmos-component.adoc[Atmos Component]
-* xref:atmosphere-websocket-component.adoc[Atmosphere Websocket Component]
-* xref:atom-component.adoc[Atom Component]
-* xref:atomix-map-component.adoc[Atomix Map Component]
-* xref:atomix-messaging-component.adoc[Atomix Messaging Component]
-* xref:atomix-multimap-component.adoc[Atomix MultiMap Component]
-* xref:atomix-queue-component.adoc[Atomix Queue Component]
-* xref:atomix-set-component.adoc[Atomix Set Component]
-* xref:atomix-value-component.adoc[Atomix Value Component]
-* xref:attachments.adoc[Attachments Component]
-* xref:avro-component.adoc[Avro Component]
-* xref:avro-dataformat.adoc[Avro DataFormat]
-* xref:aws-cw-component.adoc[AWS CloudWatch Component]
-* xref:aws-ddb-component.adoc[AWS DynamoDB Component]
-* xref:aws-ddbstream-component.adoc[AWS DynamoDB Streams Component]
-* xref:aws-ec2-component.adoc[AWS EC2 Component]
-* xref:aws-ecs-component.adoc[AWS ECS Component]
-* xref:aws-eks-component.adoc[AWS EKS Component]
-* xref:aws-iam-component.adoc[AWS IAM Component]
-* xref:aws-kinesis-component.adoc[AWS Kinesis Component]
-* xref:aws-kinesis-firehose-component.adoc[AWS Kinesis Firehose Component]
-* xref:aws-kms-component.adoc[AWS KMS Component]
-* xref:aws-lambda-component.adoc[AWS Lambda Component]
-* xref:aws-mq-component.adoc[AWS MQ Component]
-* xref:aws-msk-component.adoc[AWS MSK Component]
-* xref:aws-s3-component.adoc[AWS S3 Storage Service Component]
-* xref:aws-sdb-component.adoc[AWS SimpleDB Component]
-* xref:aws-ses-component.adoc[AWS Simple Email Service Component]
-* xref:aws-sns-component.adoc[AWS Simple Notification System Component]
-* xref:aws-sqs-component.adoc[AWS Simple Queue Service Component]
-* xref:aws-swf-component.adoc[AWS Simple Workflow Component]
-* xref:aws-translate-component.adoc[AWS Translate Component]
-* xref:aws-xray.adoc[AWS XRay Component]
-* xref:aws2-cw-component.adoc[AWS 2 CloudWatch Component]
-* xref:aws2-ddb-component.adoc[AWS 2 DynamoDB Component]
-* xref:aws2-ddbstream-component.adoc[AWS 2 DynamoDB Streams Component]
-* xref:aws2-ec2-component.adoc[AWS 2 EC2 Component]
-* xref:aws2-ecs-component.adoc[AWS 2 ECS Component]
-* xref:aws2-eks-component.adoc[AWS 2 EKS Component]
-* xref:aws2-iam-component.adoc[AWS 2 IAM Component]
-* xref:aws2-kinesis-component.adoc[AWS 2 Kinesis Component]
-* xref:aws2-kinesis-firehose-component.adoc[AWS 2 Kinesis Firehose Component]
-* xref:aws2-kms-component.adoc[AWS 2 KMS Component]
-* xref:aws2-lambda-component.adoc[AWS Lambda Component]
-* xref:aws2-mq-component.adoc[AWS 2 MQ Component]
-* xref:aws2-msk-component.adoc[AWS 2 MSK Component]
-* xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
-* xref:aws2-ses-component.adoc[AWS 2 Simple Email Service Component]
-* xref:aws2-sns-component.adoc[AWS 2 Simple Notification System Component]
-* xref:aws2-sqs-component.adoc[AWS 2 Simple Queue Service Component]
-* xref:aws2-translate-component.adoc[AWS 2 Translate Component]
-* xref:azure-blob-component.adoc[Azure Storage Blob Service Component]
-* xref:azure-queue-component.adoc[Azure Storage Queue Service Component]
-* xref:azure.adoc[Camel Components for Windows Azure Services]
-* xref:barcode-dataformat.adoc[Barcode DataFormat]
-* xref:base64-dataformat.adoc[Base64 DataFormat]
-* xref:bean-validator-component.adoc[Bean Validator Component]
-* xref:bean-component.adoc[Bean Component]
-* xref:bean-language.adoc[Bean method Language]
-* xref:class-component.adoc[Class Component]
-* xref:beanio-dataformat.adoc[BeanIO DataFormat]
-* xref:beanstalk-component.adoc[Beanstalk Component]
-* xref:bindy-dataformat.adoc[Bindy DataFormat]
-* xref:blueprint.adoc[Using OSGi blueprint with Camel]
-* xref:bonita-component.adoc[Bonita Component]
-* xref:box-component.adoc[Box Component]
-* xref:braintree-component.adoc[Braintree Component]
-* xref:browse-component.adoc[Browse Component]
-* xref:caffeine-cache-component.adoc[Caffeine Cache Component]
-* xref:caffeine-loadcache-component.adoc[Caffeine LoadCache Component]
-* xref:cql-component.adoc[Cassandra CQL Component]
-* xref:cbor-dataformat.adoc[CBOR DataFormat]
-* xref:cdi.adoc[Camel CDI]
-* xref:chatscript-component.adoc[ChatScript Component]
-* xref:chunk-component.adoc[Chunk Component]
-* xref:cm-sms-component.adoc[CM SMS Gateway Component]
-* xref:cmis-component.adoc[CMIS Component]
-* xref:coap-component.adoc[CoAP Component]
-* xref:cometd-component.adoc[CometD Component]
-* xref:consul-component.adoc[Consul Component]
-* xref:controlbus-component.adoc[Control Bus Component]
-* xref:corda-component.adoc[Corda Component]
-* xref:couchbase-component.adoc[Couchbase Component]
-* xref:couchdb-component.adoc[CouchDB Component]
-* xref:cron-component.adoc[Cron Component]
-* xref:crypto-cms-component.adoc[Crypto CMS Component (deprecated)]
-* xref:crypto-component.adoc[Crypto (JCE) Component]
-* xref:crypto-dataformat.adoc[Crypto (Java Cryptographic Extension) DataFormat]
-* xref:pgp-dataformat.adoc[PGP DataFormat]
-* xref:csv-dataformat.adoc[CSV DataFormat]
-* xref:cxf-transport.adoc[CXF Transport Component]
-* xref:cxf-component.adoc[CXF Component]
-* xref:cxfrs-component.adoc[CXF-RS Component]
-* xref:dataformat-component.adoc[Data Format Component]
-* xref:dataset-component.adoc[Dataset Component]
-* xref:dataset-test-component.adoc[DataSet Test Component]
-* xref:debezium-mongodb-component.adoc[Debezium MongoDB Connector Component]
-* xref:debezium-mysql-component.adoc[Debezium MySQL Connector Component]
-* xref:debezium-postgres-component.adoc[Debezium PostgresSQL Connector Component]
-* xref:debezium-sqlserver-component.adoc[Debezium SQL Server Connector Component]
-* xref:digitalocean-component.adoc[DigitalOcean Component]
-* xref:direct-component.adoc[Direct Component]
-* xref:direct-vm-component.adoc[Direct VM Component]
-* xref:disruptor-component.adoc[Disruptor Component]
-* xref:dns-component.adoc[DNS Component]
-* xref:docker-component.adoc[Docker Component]
-* xref:dozer-component.adoc[Dozer Component]
-* xref:drill-component.adoc[Drill Component]
-* xref:dropbox-component.adoc[Dropbox Component]
-* xref:ehcache-component.adoc[Ehcache Component]
-* xref:elasticsearch-rest-component.adoc[Elastichsearch Rest Component]
-* xref:elsql-component.adoc[ElSQL Component]
-* xref:elytron-component.adoc[Elytron Component]
-* xref:etcd-keys-component.adoc[Etcd Keys Component]
-* xref:etcd-stats-component.adoc[Etcd Stats Component]
-* xref:etcd-watch-component.adoc[Etcd Watch Component]
-* xref:eventadmin-component.adoc[OSGi EventAdmin Component]
-* xref:exec-component.adoc[Exec Component]
-* xref:facebook-component.adoc[Facebook Component]
-* xref:json-fastjson-dataformat.adoc[JSon Fastjson DataFormat]
-* xref:fhir-component.adoc[FHIR Component]
-* xref:fhirJson-dataformat.adoc[FHIR JSon DataFormat]
-* xref:fhirXml-dataformat.adoc[FHIR XML DataFormat]
-* xref:file-watch-component.adoc[File Watch Component]
-* xref:file-component.adoc[File Component]
-* xref:flatpack-component.adoc[Flatpack Component]
-* xref:flatpack-dataformat.adoc[Flatpack DataFormat]
-* xref:flink-component.adoc[Flink Component]
-* xref:fop-component.adoc[FOP Component]
-* xref:freemarker-component.adoc[Freemarker Component]
-* xref:ftp-component.adoc[FTP Component]
-* xref:ftps-component.adoc[FTPS Component]
-* xref:sftp-component.adoc[SFTP Component]
-* xref:ganglia-component.adoc[Ganglia Component]
-* xref:geocoder-component.adoc[Geocoder Component]
-* xref:git-component.adoc[Git Component]
-* xref:github-component.adoc[GitHub Component]
-* xref:google-bigquery-component.adoc[Google BigQuery Component]
-* xref:google-bigquery-sql-component.adoc[Google BigQuery Standard SQL Component]
-* xref:google-calendar-component.adoc[Google Calendar Component]
-* xref:google-calendar-stream-component.adoc[Google Calendar Stream Component]
-* xref:google-drive-component.adoc[Google Drive Component]
-* xref:google-mail-component.adoc[Google Mail Component]
-* xref:google-mail-stream-component.adoc[Google Mail Stream Component]
-* xref:google-pubsub-component.adoc[Google Pubsub Component]
-* xref:google-sheets-component.adoc[Google Sheets Component]
-* xref:google-sheets-stream-component.adoc[Google Sheets Stream Component]
-* xref:gora-component.adoc[Gora Component]
-* xref:grape-component.adoc[Grape Component]
-* xref:graphql-component.adoc[GraphQL Component]
-* xref:grok-dataformat.adoc[Grok DataFormat]
-* xref:groovy-language.adoc[Groovy Language]
-* xref:grpc-component.adoc[gRPC Component]
-* xref:json-gson-dataformat.adoc[JSon GSon DataFormat]
-* xref:guava-eventbus-component.adoc[Guava EventBus Component]
-* xref:hazelcast-atomicvalue-component.adoc[Hazelcast Atomic Number Component]
-* xref:hazelcast-instance-component.adoc[Hazelcast Instance Component]
-* xref:hazelcast-list-component.adoc[Hazelcast List Component]
-* xref:hazelcast-map-component.adoc[Hazelcast Map Component]
-* xref:hazelcast-multimap-component.adoc[Hazelcast Multimap Component]
-* xref:hazelcast-queue-component.adoc[Hazelcast Queue Component]
-* xref:hazelcast-replicatedmap-component.adoc[Hazelcast Replicated Map Component]
-* xref:hazelcast-ringbuffer-component.adoc[Hazelcast Ringbuffer Component]
-* xref:hazelcast-seda-component.adoc[Hazelcast SEDA Component]
-* xref:hazelcast-set-component.adoc[Hazelcast Set Component]
-* xref:hazelcast-topic-component.adoc[Hazelcast Topic Component]
-* xref:hazelcast.adoc[Hazelcast Component]
-* xref:hbase-component.adoc[HBase Component]
-* xref:hdfs-component.adoc[HDFS Component]
-* xref:hipchat-component.adoc[Hipchat Component]
-* xref:hl7-dataformat.adoc[HL7 DataFormat]
-* xref:hl7terser-language.adoc[HL7 Terser Language]
-* xref:http-component.adoc[HTTP Component]
-* xref:hystrix.adoc[Hystrix Component]
-* xref:ical-dataformat.adoc[iCal DataFormat]
-* xref:iec60870-client-component.adoc[IEC 60870 Client Component]
-* xref:iec60870-server-component.adoc[IEC 60870 Server Component]
-* xref:ignite-cache-component.adoc[Ignite Cache Component]
-* xref:ignite-compute-component.adoc[Ignite Compute Component]
-* xref:ignite-events-component.adoc[Ignite Events Component]
-* xref:ignite-idgen-component.adoc[Ignite ID Generator Component]
-* xref:ignite-messaging-component.adoc[Ignite Messaging Component]
-* xref:ignite-queue-component.adoc[Ignite Queues Component]
-* xref:ignite-set-component.adoc[Ignite Sets Component]
-* xref:ignite.adoc[Ignite endpoints Component]
-* xref:infinispan-component.adoc[Infinispan Component]
-* xref:influxdb-component.adoc[InfluxDB Component]
-* xref:iota-component.adoc[IOTA Component]
-* xref:ipfs-component.adoc[IPFS Component]
-* xref:irc-component.adoc[IRC Component]
-* xref:ironmq-component.adoc[IronMQ Component]
-* xref:json-jackson-dataformat.adoc[JSon Jackson DataFormat]
-* xref:jacksonxml-dataformat.adoc[JacksonXML DataFormat]
-* xref:jasypt.adoc[Jasypt component]
-* xref:jaxb-dataformat.adoc[JAXB DataFormat]
-* xref:jbpm-component.adoc[JBPM Component]
-* xref:jcache-component.adoc[JCache Component]
-* xref:jclouds-component.adoc[JClouds Component]
-* xref:jcr-component.adoc[JCR Component]
-* xref:jdbc-component.adoc[JDBC Component]
-* xref:jetty-component.adoc[Jetty Component]
-* xref:jgroups-raft-component.adoc[JGroups raft Component]
-* xref:jgroups-component.adoc[JGroups Component]
-* xref:jing-component.adoc[Jing Component]
-* xref:jira-component.adoc[Jira Component]
-* xref:jms-component.adoc[JMS Component]
-* xref:jmx-component.adoc[JMX Component]
-* xref:json-johnzon-dataformat.adoc[JSon Johnzon DataFormat]
-* xref:jolt-component.adoc[JOLT Component]
-* xref:jooq-component.adoc[JOOQ Component]
-* xref:jpa-component.adoc[JPA Component]
-* xref:scp-component.adoc[SCP Component]
-* xref:jslt-component.adoc[JSLT Component]
-* xref:json-validator-component.adoc[JSON Schema Validator Component]
-* xref:jsonApi-dataformat.adoc[JSonApi DataFormat]
-* xref:jsonpath-language.adoc[JsonPath Language]
-* xref:jt400-component.adoc[JT400 Component]
-* xref:kafka-component.adoc[Kafka Component]
-* xref:kubernetes-config-maps-component.adoc[Kubernetes ConfigMap Component]
-* xref:kubernetes-deployments-component.adoc[Kubernetes Deployments Component]
-* xref:kubernetes-hpa-component.adoc[Kubernetes HPA Component]
-* xref:kubernetes-job-component.adoc[Kubernetes Job Component]
-* xref:kubernetes-namespaces-component.adoc[Kubernetes Namespaces Component]
-* xref:kubernetes-nodes-component.adoc[Kubernetes Nodes Component]
-* xref:kubernetes-persistent-volumes-claims-component.adoc[Kubernetes Persistent Volume Claim Component]
-* xref:kubernetes-persistent-volumes-component.adoc[Kubernetes Persistent Volume Component]
-* xref:kubernetes-pods-component.adoc[Kubernetes Pods Component]
-* xref:kubernetes-replication-controllers-component.adoc[Kubernetes Replication Controller Component]
-* xref:kubernetes-resources-quota-component.adoc[Kubernetes Resources Quota Component]
-* xref:kubernetes-secrets-component.adoc[Kubernetes Secrets Component]
-* xref:kubernetes-service-accounts-component.adoc[Kubernetes Service Account Component]
-* xref:kubernetes-services-component.adoc[Kubernetes Services Component]
-* xref:kubernetes.adoc[Kubernetes Components]
-* xref:openshift-build-configs-component.adoc[Openshift Build Config Component]
-* xref:openshift-builds-component.adoc[Openshift Builds Component]
-* xref:kudu-component.adoc[Kudu Component]
-* xref:kura.adoc[Eclipse Kura component]
-* xref:language-component.adoc[Language Component]
-* xref:ldap-component.adoc[LDAP Component]
-* xref:ldif-component.adoc[LDIF Component]
-* xref:leveldb.adoc[LevelDB]
-* xref:log-component.adoc[Log Component]
-* xref:lra.adoc[LRA Component]
-* xref:lucene-component.adoc[Lucene Component]
-* xref:lumberjack-component.adoc[Lumberjack Component]
-* xref:lzf-dataformat.adoc[LZF Deflate Compression DataFormat]
-* xref:mail-component.adoc[Mail Component]
-* xref:mime-multipart-dataformat.adoc[MIME Multipart DataFormat]
-* xref:master-component.adoc[Master Component]
-* xref:metrics-component.adoc[Metrics Component]
-* xref:micrometer-component.adoc[Micrometer Component]
-* xref:microprofile-config.adoc[MicroProfile Config]
-* xref:microprofile-health.adoc[MicroProfile Health]
-* xref:microprofile-metrics-component.adoc[MicroProfile Metrics Component]
-* xref:milo-client-component.adoc[OPC UA Client Component]
-* xref:milo-server-component.adoc[OPC UA Server Component]
-* xref:mina-component.adoc[Mina Component]
-* xref:mllp-component.adoc[MLLP Component]
-* xref:mock-component.adoc[Mock Component]
-* xref:mongodb-gridfs-component.adoc[MongoDB GridFS Component]
-* xref:mongodb-component.adoc[MongoDB Component]
-* xref:msv-component.adoc[MSV Component]
-* xref:mustache-component.adoc[Mustache Component]
-* xref:mvel-component.adoc[MVEL Component]
-* xref:mvel-language.adoc[MVEL Language]
-* xref:mybatis-bean-component.adoc[MyBatis Bean Component]
-* xref:mybatis-component.adoc[MyBatis Component]
-* xref:nagios-component.adoc[Nagios Component]
-* xref:nats-component.adoc[Nats Component]
-* xref:netty-http-component.adoc[Netty HTTP Component]
-* xref:netty-component.adoc[Netty Component]
-* xref:nitrite-component.adoc[Nitrite Component]
-* xref:nsq-component.adoc[NSQ Component]
-* xref:ognl-language.adoc[OGNL Language]
-* xref:olingo2-component.adoc[Olingo2 Component]
-* xref:olingo4-component.adoc[Olingo4 Component]
-* xref:openapi-java.adoc[OpenApi Java Component]
-* xref:openstack-cinder-component.adoc[OpenStack Cinder Component]
-* xref:openstack-glance-component.adoc[OpenStack Glance Component]
-* xref:openstack-keystone-component.adoc[OpenStack Keystone Component]
-* xref:openstack-neutron-component.adoc[OpenStack Neutron Component]
-* xref:openstack-nova-component.adoc[OpenStack Nova Component]
-* xref:openstack-swift-component.adoc[OpenStack Swift Component]
-* xref:openstack.adoc[Openstack Component]
-* xref:opentracing.adoc[OpenTracing Component]
-* xref:optaplanner-component.adoc[OptaPlanner Component]
-* xref:osgi-activator.adoc[OSGi Camel Routes Activator]
-* xref:paho-component.adoc[Paho Component]
-* xref:paxlogging-component.adoc[OSGi PAX Logging Component]
-* xref:pdf-component.adoc[PDF Component]
-* xref:pg-replication-slot-component.adoc[PostgresSQL Replication Slot Component]
-* xref:pgevent-component.adoc[PostgresSQL Event Component]
-* xref:platform-http-component.adoc[Platform HTTP Component]
-* xref:lpr-component.adoc[Printer Component]
-* xref:protobuf-dataformat.adoc[Protobuf DataFormat]
-* xref:pubnub-component.adoc[PubNub Component]
-* xref:pulsar-component.adoc[Pulsar Component]
-* xref:quartz-component.adoc[Quartz Component]
-* xref:quickfix-component.adoc[QuickFix Component]
-* xref:rabbitmq-component.adoc[RabbitMQ Component]
-* xref:reactive-executor-vertx.adoc[ReactiveExecutor VertX]
-* xref:reactive-streams-component.adoc[Reactive Streams Component]
-* xref:reactor.adoc[Reactor Component]
-* xref:ref-component.adoc[Ref Component]
-* xref:resilience4j.adoc[Resilience4j Component]
-* xref:rest-openapi-component.adoc[REST OpenApi Component]
-* xref:rest-swagger-component.adoc[REST Swagger Component]
-* xref:rest-api-component.adoc[REST API Component]
-* xref:rest-component.adoc[REST Component]
-* xref:ribbon.adoc[Ribbon Component]
-* xref:robotframework-component.adoc[Robot Framework Component]
-* xref:rss-component.adoc[RSS Component]
-* xref:rss-dataformat.adoc[RSS DataFormat]
-* xref:rxjava.adoc[RxJava Component]
-* xref:saga-component.adoc[Saga Component]
-* xref:salesforce-component.adoc[Salesforce Component]
-* xref:sap-netweaver-component.adoc[SAP NetWeaver Component]
-* xref:xquery-component.adoc[XQuery Component]
-* xref:xquery-language.adoc[XQuery Language]
-* xref:scheduler-component.adoc[Scheduler Component]
-* xref:schematron-component.adoc[Schematron Component]
-* xref:seda-component.adoc[SEDA Component]
-* xref:service-component.adoc[Service Component]
-* xref:servicenow-component.adoc[ServiceNow Component]
-* xref:servlet-component.adoc[Servlet Component]
-* xref:shiro.adoc[Shiro Security Component]
-* xref:sip-component.adoc[SIP Component]
-* xref:sjms-batch-component.adoc[Simple JMS Batch Component]
-* xref:sjms-component.adoc[Simple JMS Component]
-* xref:sjms2-component.adoc[Simple JMS2 Component]
-* xref:slack-component.adoc[Slack Component]
-* xref:smpp-component.adoc[SMPP Component]
-* xref:yaml-snakeyaml-dataformat.adoc[YAML SnakeYAML DataFormat]
-* xref:snmp-component.adoc[SNMP Component]
-* xref:soapjaxb-dataformat.adoc[SOAP DataFormat]
-* xref:solr-component.adoc[Solr Component]
-* xref:soroush-component.adoc[Soroush Component]
-* xref:spark-rest-component.adoc[Spark Rest Component]
-* xref:spark-component.adoc[Spark Component]
-* xref:splunk-component.adoc[Splunk Component]
-* xref:spring-batch-component.adoc[Spring Batch Component]
-* xref:spring-integration-component.adoc[Spring Integration Component]
-* xref:spring-javaconfig.adoc[Spring Java Config]
-* xref:spring-ldap-component.adoc[Spring LDAP Component]
-* xref:spring-redis-component.adoc[Spring Redis Component]
-* xref:spring-security.adoc[Spring Security]
-* xref:spring-ws-component.adoc[Spring WebService Component]
-* xref:spel-language.adoc[SpEL Language]
-* xref:spring-event-component.adoc[Spring Event Component]
-* xref:spring.adoc[Spring Support]
-* xref:sql-component.adoc[SQL Component]
-* xref:sql-stored-component.adoc[SQL Stored Procedure Component]
-* xref:ssh-component.adoc[SSH Component]
-* xref:stax-component.adoc[StAX Component]
-* xref:stomp-component.adoc[Stomp Component]
-* xref:stream-component.adoc[Stream Component]
-* xref:string-template-component.adoc[String Template Component]
-* xref:stub-component.adoc[Stub Component]
-* xref:swagger-java.adoc[Swagger Java Component]
-* xref:syslog-dataformat.adoc[Syslog DataFormat]
-* xref:tidyMarkup-dataformat.adoc[TidyMarkup DataFormat]
-* xref:tarfile-dataformat.adoc[Tar File DataFormat]
-* xref:telegram-component.adoc[Telegram Component]
-* xref:test-blueprint.adoc[Blueprint Testing]
-* xref:test-cdi.adoc[CDI Testing]
-* xref:test-junit5.adoc[Test Module]
-* xref:test-karaf.adoc[Test Karaf]
-* xref:test-spring-junit5.adoc[Camel Test Spring JUnit 5]
-* xref:test-spring.adoc[Test Spring]
-* xref:test.adoc[Test Module]
-* xref:testcontainers-junit5.adoc[Testcontainers]
-* xref:testcontainers-spring-junit5.adoc[Testcontainers Spring]
-* xref:testcontainers-spring.adoc[Testcontainers Spring]
-* xref:testcontainers.adoc[Testcontainers]
-* xref:thrift-component.adoc[Thrift Component]
-* xref:thrift-dataformat.adoc[Thrift DataFormat]
-* xref:tika-component.adoc[Tika Component]
-* xref:timer-component.adoc[Timer Component]
-* xref:twilio-component.adoc[Twilio Component]
-* xref:twitter-directmessage-component.adoc[Twitter Direct Message Component]
-* xref:twitter-search-component.adoc[Twitter Search Component]
-* xref:twitter-timeline-component.adoc[Twitter Timeline Component]
-* xref:undertow-component.adoc[Undertow Component]
-* xref:univocity-csv-dataformat.adoc[uniVocity CSV DataFormat]
-* xref:univocity-fixed-dataformat.adoc[uniVocity Fixed Length DataFormat]
-* xref:univocity-tsv-dataformat.adoc[uniVocity TSV DataFormat]
-* xref:validator-component.adoc[Validator Component]
-* xref:velocity-component.adoc[Velocity Component]
-* xref:vertx-component.adoc[Vert.x Component]
-* xref:vm-component.adoc[VM Component]
-* xref:weather-component.adoc[Weather Component]
-* xref:web3j-component.adoc[Web3j Ethereum Blockchain Component]
-* xref:webhook-component.adoc[Webhook Component]
-* xref:websocket-jsr356-component.adoc[Javax Websocket Component]
-* xref:websocket-component.adoc[Jetty Websocket Component]
-* xref:weka-component.adoc[Weka Component]
-* xref:wordpress-component.adoc[Wordpress Component]
-* xref:workday-component.adoc[Workday Component]
-* xref:xchange-component.adoc[XChange Component]
-* xref:xj-component.adoc[XJ Component]
-* xref:secureXML-dataformat.adoc[XML Security DataFormat]
-* xref:xmlsecurity-sign-component.adoc[XML Security Sign Component]
-* xref:xmlsecurity-verify-component.adoc[XML Security Verify Component]
-* xref:xmpp-component.adoc[XMPP Component]
-* xref:xpath-language.adoc[XPath Language]
-* xref:xslt-saxon-component.adoc[XSLT Saxon Component]
-* xref:xslt-component.adoc[XSLT Component]
-* xref:json-xstream-dataformat.adoc[JSon XStream DataFormat]
-* xref:xstream-dataformat.adoc[XStream DataFormat]
-* xref:yammer-component.adoc[Yammer Component]
-* xref:zendesk-component.adoc[Zendesk Component]
-* xref:gzipdeflater-dataformat.adoc[GZip Deflater DataFormat]
-* xref:zipdeflater-dataformat.adoc[Zip Deflate Compression DataFormat]
-* xref:zipfile-dataformat.adoc[Zip File DataFormat]
-* xref:zipkin.adoc[Zipkin Component]
-* xref:zookeeper-master-component.adoc[ZooKeeper Master Component]
-* xref:zookeeper-component.adoc[ZooKeeper Component]
-* xref:properties-component.adoc[Properties Component]
+* Components and Data Formats
+** xref:activemq-component.adoc[ActiveMQ Component]
+** xref:ahc-component.adoc[AHC Component]
+** xref:ahc-ws-component.adoc[AHC Websocket Component]
+** xref:amqp-component.adoc[AMQP Component]
+** xref:any23-dataformat.adoc[Any23 DataFormat]
+** xref:apns-component.adoc[APNS Component]
+** xref:as2-component.adoc[AS2 Component]
+** xref:asn1-dataformat.adoc[ASN.1 File DataFormat]
+** xref:asterisk-component.adoc[Asterisk Component]
+** xref:atmos-component.adoc[Atmos Component]
+** xref:atmosphere-websocket-component.adoc[Atmosphere Websocket Component]
+** xref:atom-component.adoc[Atom Component]
+** xref:atomix-map-component.adoc[Atomix Map Component]
+** xref:atomix-messaging-component.adoc[Atomix Messaging Component]
+** xref:atomix-multimap-component.adoc[Atomix MultiMap Component]
+** xref:atomix-queue-component.adoc[Atomix Queue Component]
+** xref:atomix-set-component.adoc[Atomix Set Component]
+** xref:atomix-value-component.adoc[Atomix Value Component]
+** xref:attachments.adoc[Attachments Component]
+** xref:avro-component.adoc[Avro Component]
+** xref:avro-dataformat.adoc[Avro DataFormat]
+** xref:aws-cw-component.adoc[AWS CloudWatch Component]
+** xref:aws-ddb-component.adoc[AWS DynamoDB Component]
+** xref:aws-ddbstream-component.adoc[AWS DynamoDB Streams Component]
+** xref:aws-ec2-component.adoc[AWS EC2 Component]
+** xref:aws-ecs-component.adoc[AWS ECS Component]
+** xref:aws-eks-component.adoc[AWS EKS Component]
+** xref:aws-iam-component.adoc[AWS IAM Component]
+** xref:aws-kinesis-component.adoc[AWS Kinesis Component]
+** xref:aws-kinesis-firehose-component.adoc[AWS Kinesis Firehose Component]
+** xref:aws-kms-component.adoc[AWS KMS Component]
+** xref:aws-lambda-component.adoc[AWS Lambda Component]
+** xref:aws-mq-component.adoc[AWS MQ Component]
+** xref:aws-msk-component.adoc[AWS MSK Component]
+** xref:aws-s3-component.adoc[AWS S3 Storage Service Component]
+** xref:aws-sdb-component.adoc[AWS SimpleDB Component]
+** xref:aws-ses-component.adoc[AWS Simple Email Service Component]
+** xref:aws-sns-component.adoc[AWS Simple Notification System Component]
+** xref:aws-sqs-component.adoc[AWS Simple Queue Service Component]
+** xref:aws-swf-component.adoc[AWS Simple Workflow Component]
+** xref:aws-translate-component.adoc[AWS Translate Component]
+** xref:aws-xray.adoc[AWS XRay Component]
+** xref:aws2-cw-component.adoc[AWS 2 CloudWatch Component]
+** xref:aws2-ddb-component.adoc[AWS 2 DynamoDB Component]
+** xref:aws2-ddbstream-component.adoc[AWS 2 DynamoDB Streams Component]
+** xref:aws2-ec2-component.adoc[AWS 2 EC2 Component]
+** xref:aws2-ecs-component.adoc[AWS 2 ECS Component]
+** xref:aws2-eks-component.adoc[AWS 2 EKS Component]
+** xref:aws2-iam-component.adoc[AWS 2 IAM Component]
+** xref:aws2-kinesis-component.adoc[AWS 2 Kinesis Component]
+** xref:aws2-kinesis-firehose-component.adoc[AWS 2 Kinesis Firehose Component]
+** xref:aws2-kms-component.adoc[AWS 2 KMS Component]
+** xref:aws2-lambda-component.adoc[AWS Lambda Component]
+** xref:aws2-mq-component.adoc[AWS 2 MQ Component]
+** xref:aws2-msk-component.adoc[AWS 2 MSK Component]
+** xref:aws2-s3-component.adoc[AWS2 S3 Storage Service Component]
+** xref:aws2-ses-component.adoc[AWS 2 Simple Email Service Component]
+** xref:aws2-sns-component.adoc[AWS 2 Simple Notification System Component]
+** xref:aws2-sqs-component.adoc[AWS 2 Simple Queue Service Component]
+** xref:aws2-translate-component.adoc[AWS 2 Translate Component]
+** xref:azure-blob-component.adoc[Azure Storage Blob Service Component]
+** xref:azure-queue-component.adoc[Azure Storage Queue Service Component]
+** xref:azure.adoc[Camel Components for Windows Azure Services]
+** xref:barcode-dataformat.adoc[Barcode DataFormat]
+** xref:base64-dataformat.adoc[Base64 DataFormat]
+** xref:bean-component.adoc[Bean Component]
+** xref:bean-validator-component.adoc[Bean Validator Component]
+** xref:beanio-dataformat.adoc[BeanIO DataFormat]
+** xref:beanstalk-component.adoc[Beanstalk Component]
+** xref:bindy-dataformat.adoc[Bindy DataFormat]
+** xref:blueprint.adoc[Using OSGi blueprint with Camel]
+** xref:bonita-component.adoc[Bonita Component]
+** xref:box-component.adoc[Box Component]
+** xref:braintree-component.adoc[Braintree Component]
+** xref:browse-component.adoc[Browse Component]
+** xref:caffeine-cache-component.adoc[Caffeine Cache Component]
+** xref:caffeine-loadcache-component.adoc[Caffeine LoadCache Component]
+** xref:cbor-dataformat.adoc[CBOR DataFormat]
+** xref:cdi.adoc[Camel CDI]
+** xref:chatscript-component.adoc[ChatScript Component]
+** xref:chunk-component.adoc[Chunk Component]
+** xref:class-component.adoc[Class Component]
+** xref:cm-sms-component.adoc[CM SMS Gateway Component]
+** xref:cmis-component.adoc[CMIS Component]
+** xref:coap-component.adoc[CoAP Component]
+** xref:cometd-component.adoc[CometD Component]
+** xref:consul-component.adoc[Consul Component]
+** xref:controlbus-component.adoc[Control Bus Component]
+** xref:corda-component.adoc[Corda Component]
+** xref:couchbase-component.adoc[Couchbase Component]
+** xref:couchdb-component.adoc[CouchDB Component]
+** xref:cql-component.adoc[Cassandra CQL Component]
+** xref:cron-component.adoc[Cron Component]
+** xref:crypto-cms-component.adoc[Crypto CMS Component (deprecated)]
+** xref:crypto-component.adoc[Crypto (JCE) Component]
+** xref:crypto-dataformat.adoc[Crypto (Java Cryptographic Extension) DataFormat]
+** xref:csv-dataformat.adoc[CSV DataFormat]
+** xref:cxf-component.adoc[CXF Component]
+** xref:cxf-transport.adoc[CXF Transport Component]
+** xref:cxfrs-component.adoc[CXF-RS Component]
+** xref:dataformat-component.adoc[Data Format Component]
+** xref:dataset-component.adoc[Dataset Component]
+** xref:dataset-test-component.adoc[DataSet Test Component]
+** xref:debezium-mongodb-component.adoc[Debezium MongoDB Connector Component]
+** xref:debezium-mysql-component.adoc[Debezium MySQL Connector Component]
+** xref:debezium-postgres-component.adoc[Debezium PostgresSQL Connector Component]
+** xref:debezium-sqlserver-component.adoc[Debezium SQL Server Connector Component]
+** xref:digitalocean-component.adoc[DigitalOcean Component]
+** xref:direct-component.adoc[Direct Component]
+** xref:direct-vm-component.adoc[Direct VM Component]
+** xref:disruptor-component.adoc[Disruptor Component]
+** xref:dns-component.adoc[DNS Component]
+** xref:docker-component.adoc[Docker Component]
+** xref:dozer-component.adoc[Dozer Component]
+** xref:drill-component.adoc[Drill Component]
+** xref:dropbox-component.adoc[Dropbox Component]
+** xref:ehcache-component.adoc[Ehcache Component]
+** xref:elasticsearch-rest-component.adoc[Elastichsearch Rest Component]
+** xref:elsql-component.adoc[ElSQL Component]
+** xref:elytron-component.adoc[Elytron Component]
+** xref:etcd-keys-component.adoc[Etcd Keys Component]
+** xref:etcd-stats-component.adoc[Etcd Stats Component]
+** xref:etcd-watch-component.adoc[Etcd Watch Component]
+** xref:eventadmin-component.adoc[OSGi EventAdmin Component]
+** xref:exec-component.adoc[Exec Component]
+** xref:facebook-component.adoc[Facebook Component]
+** xref:fhir-component.adoc[FHIR Component]
+** xref:fhirJson-dataformat.adoc[FHIR JSon DataFormat]
+** xref:fhirXml-dataformat.adoc[FHIR XML DataFormat]
+** xref:file-component.adoc[File Component]
+** xref:file-watch-component.adoc[File Watch Component]
+** xref:flatpack-component.adoc[Flatpack Component]
+** xref:flatpack-dataformat.adoc[Flatpack DataFormat]
+** xref:flink-component.adoc[Flink Component]
+** xref:fop-component.adoc[FOP Component]
+** xref:freemarker-component.adoc[Freemarker Component]
+** xref:ftp-component.adoc[FTP Component]
+** xref:ftps-component.adoc[FTPS Component]
+** xref:ganglia-component.adoc[Ganglia Component]
+** xref:geocoder-component.adoc[Geocoder Component]
+** xref:git-component.adoc[Git Component]
+** xref:github-component.adoc[GitHub Component]
+** xref:google-bigquery-component.adoc[Google BigQuery Component]
+** xref:google-bigquery-sql-component.adoc[Google BigQuery Standard SQL Component]
+** xref:google-calendar-component.adoc[Google Calendar Component]
+** xref:google-calendar-stream-component.adoc[Google Calendar Stream Component]
+** xref:google-drive-component.adoc[Google Drive Component]
+** xref:google-mail-component.adoc[Google Mail Component]
+** xref:google-mail-stream-component.adoc[Google Mail Stream Component]
+** xref:google-pubsub-component.adoc[Google Pubsub Component]
+** xref:google-sheets-component.adoc[Google Sheets Component]
+** xref:google-sheets-stream-component.adoc[Google Sheets Stream Component]
+** xref:gora-component.adoc[Gora Component]
+** xref:grape-component.adoc[Grape Component]
+** xref:graphql-component.adoc[GraphQL Component]
+** xref:grok-dataformat.adoc[Grok DataFormat]
+** xref:grpc-component.adoc[gRPC Component]
+** xref:guava-eventbus-component.adoc[Guava EventBus Component]
+** xref:gzipdeflater-dataformat.adoc[GZip Deflater DataFormat]
+** xref:hazelcast-atomicvalue-component.adoc[Hazelcast Atomic Number Component]
+** xref:hazelcast-instance-component.adoc[Hazelcast Instance Component]
+** xref:hazelcast-list-component.adoc[Hazelcast List Component]
+** xref:hazelcast-map-component.adoc[Hazelcast Map Component]
+** xref:hazelcast-multimap-component.adoc[Hazelcast Multimap Component]
+** xref:hazelcast-queue-component.adoc[Hazelcast Queue Component]
+** xref:hazelcast-replicatedmap-component.adoc[Hazelcast Replicated Map Component]
+** xref:hazelcast-ringbuffer-component.adoc[Hazelcast Ringbuffer Component]
+** xref:hazelcast-seda-component.adoc[Hazelcast SEDA Component]
+** xref:hazelcast-set-component.adoc[Hazelcast Set Component]
+** xref:hazelcast-topic-component.adoc[Hazelcast Topic Component]
+** xref:hazelcast.adoc[Hazelcast Component]
+** xref:hbase-component.adoc[HBase Component]
+** xref:hdfs-component.adoc[HDFS Component]
+** xref:hipchat-component.adoc[Hipchat Component]
+** xref:hl7-dataformat.adoc[HL7 DataFormat]
+** xref:http-component.adoc[HTTP Component]
+** xref:hystrix.adoc[Hystrix Component]
+** xref:ical-dataformat.adoc[iCal DataFormat]
+** xref:iec60870-client-component.adoc[IEC 60870 Client Component]
+** xref:iec60870-server-component.adoc[IEC 60870 Server Component]
+** xref:ignite-cache-component.adoc[Ignite Cache Component]
+** xref:ignite-compute-component.adoc[Ignite Compute Component]
+** xref:ignite-events-component.adoc[Ignite Events Component]
+** xref:ignite-idgen-component.adoc[Ignite ID Generator Component]
+** xref:ignite-messaging-component.adoc[Ignite Messaging Component]
+** xref:ignite-queue-component.adoc[Ignite Queues Component]
+** xref:ignite-set-component.adoc[Ignite Sets Component]
+** xref:ignite.adoc[Ignite endpoints Component]
+** xref:index.adoc[List of Camel components]
+** xref:infinispan-component.adoc[Infinispan Component]
+** xref:influxdb-component.adoc[InfluxDB Component]
+** xref:iota-component.adoc[IOTA Component]
+** xref:ipfs-component.adoc[IPFS Component]
+** xref:irc-component.adoc[IRC Component]
+** xref:ironmq-component.adoc[IronMQ Component]
+** xref:jacksonxml-dataformat.adoc[JacksonXML DataFormat]
+** xref:jasypt.adoc[Jasypt component]
+** xref:jaxb-dataformat.adoc[JAXB DataFormat]
+** xref:jbpm-component.adoc[JBPM Component]
+** xref:jcache-component.adoc[JCache Component]
+** xref:jclouds-component.adoc[JClouds Component]
+** xref:jcr-component.adoc[JCR Component]
+** xref:jdbc-component.adoc[JDBC Component]
+** xref:jetty-component.adoc[Jetty Component]
+** xref:jgroups-component.adoc[JGroups Component]
+** xref:jgroups-raft-component.adoc[JGroups raft Component]
+** xref:jing-component.adoc[Jing Component]
+** xref:jira-component.adoc[Jira Component]
+** xref:jms-component.adoc[JMS Component]
+** xref:jmx-component.adoc[JMX Component]
+** xref:jolt-component.adoc[JOLT Component]
+** xref:jooq-component.adoc[JOOQ Component]
+** xref:jpa-component.adoc[JPA Component]
+** xref:jslt-component.adoc[JSLT Component]
+** xref:json-fastjson-dataformat.adoc[JSon Fastjson DataFormat]
+** xref:json-gson-dataformat.adoc[JSon GSon DataFormat]
+** xref:json-jackson-dataformat.adoc[JSon Jackson DataFormat]
+** xref:json-johnzon-dataformat.adoc[JSon Johnzon DataFormat]
+** xref:json-validator-component.adoc[JSON Schema Validator Component]
+** xref:json-xstream-dataformat.adoc[JSon XStream DataFormat]
+** xref:jsonApi-dataformat.adoc[JSonApi DataFormat]
+** xref:jt400-component.adoc[JT400 Component]
+** xref:kafka-component.adoc[Kafka Component]
+** xref:kubernetes-config-maps-component.adoc[Kubernetes ConfigMap Component]
+** xref:kubernetes-deployments-component.adoc[Kubernetes Deployments Component]
+** xref:kubernetes-hpa-component.adoc[Kubernetes HPA Component]
+** xref:kubernetes-job-component.adoc[Kubernetes Job Component]
+** xref:kubernetes-namespaces-component.adoc[Kubernetes Namespaces Component]
+** xref:kubernetes-nodes-component.adoc[Kubernetes Nodes Component]
+** xref:kubernetes-persistent-volumes-claims-component.adoc[Kubernetes Persistent Volume Claim Component]
+** xref:kubernetes-persistent-volumes-component.adoc[Kubernetes Persistent Volume Component]
+** xref:kubernetes-pods-component.adoc[Kubernetes Pods Component]
+** xref:kubernetes-replication-controllers-component.adoc[Kubernetes Replication Controller Component]
+** xref:kubernetes-resources-quota-component.adoc[Kubernetes Resources Quota Component]
+** xref:kubernetes-secrets-component.adoc[Kubernetes Secrets Component]
+** xref:kubernetes-service-accounts-component.adoc[Kubernetes Service Account Component]
+** xref:kubernetes-services-component.adoc[Kubernetes Services Component]
+** xref:kubernetes.adoc[Kubernetes Components]
+** xref:kudu-component.adoc[Kudu Component]
+** xref:kura.adoc[Eclipse Kura component]
+** xref:language-component.adoc[Language Component]
+** xref:ldap-component.adoc[LDAP Component]
+** xref:ldif-component.adoc[LDIF Component]
+** xref:leveldb.adoc[LevelDB]
+** xref:log-component.adoc[Log Component]
+** xref:lpr-component.adoc[Printer Component]
+** xref:lra.adoc[LRA Component]
+** xref:lucene-component.adoc[Lucene Component]
+** xref:lumberjack-component.adoc[Lumberjack Component]
+** xref:lzf-dataformat.adoc[LZF Deflate Compression DataFormat]
+** xref:mail-component.adoc[Mail Component]
+** xref:master-component.adoc[Master Component]
+** xref:metrics-component.adoc[Metrics Component]
+** xref:micrometer-component.adoc[Micrometer Component]
+** xref:microprofile-config.adoc[MicroProfile Config]
+** xref:microprofile-health.adoc[MicroProfile Health]
+** xref:microprofile-metrics-component.adoc[MicroProfile Metrics Component]
+** xref:milo-client-component.adoc[OPC UA Client Component]
+** xref:milo-server-component.adoc[OPC UA Server Component]
+** xref:mime-multipart-dataformat.adoc[MIME Multipart DataFormat]
+** xref:mina-component.adoc[Mina Component]
+** xref:mllp-component.adoc[MLLP Component]
+** xref:mock-component.adoc[Mock Component]
+** xref:mongodb-component.adoc[MongoDB Component]
+** xref:mongodb-gridfs-component.adoc[MongoDB GridFS Component]
+** xref:msv-component.adoc[MSV Component]
+** xref:mustache-component.adoc[Mustache Component]
+** xref:mvel-component.adoc[MVEL Component]
+** xref:mybatis-bean-component.adoc[MyBatis Bean Component]
+** xref:mybatis-component.adoc[MyBatis Component]
+** xref:nagios-component.adoc[Nagios Component]
+** xref:nats-component.adoc[Nats Component]
+** xref:netty-component.adoc[Netty Component]
+** xref:netty-http-component.adoc[Netty HTTP Component]
+** xref:nitrite-component.adoc[Nitrite Component]
+** xref:nsq-component.adoc[NSQ Component]
+** xref:olingo2-component.adoc[Olingo2 Component]
+** xref:olingo4-component.adoc[Olingo4 Component]
+** xref:openapi-java.adoc[OpenApi Java Component]
+** xref:openshift-build-configs-component.adoc[Openshift Build Config Component]
+** xref:openshift-builds-component.adoc[Openshift Builds Component]
+** xref:openstack-cinder-component.adoc[OpenStack Cinder Component]
+** xref:openstack-glance-component.adoc[OpenStack Glance Component]
+** xref:openstack-keystone-component.adoc[OpenStack Keystone Component]
+** xref:openstack-neutron-component.adoc[OpenStack Neutron Component]
+** xref:openstack-nova-component.adoc[OpenStack Nova Component]
+** xref:openstack-swift-component.adoc[OpenStack Swift Component]
+** xref:openstack.adoc[Openstack Component]
+** xref:opentracing.adoc[OpenTracing Component]
+** xref:optaplanner-component.adoc[OptaPlanner Component]
+** xref:osgi-activator.adoc[OSGi Camel Routes Activator]
+** xref:paho-component.adoc[Paho Component]
+** xref:paxlogging-component.adoc[OSGi PAX Logging Component]
+** xref:pdf-component.adoc[PDF Component]
+** xref:pg-replication-slot-component.adoc[PostgresSQL Replication Slot Component]
+** xref:pgevent-component.adoc[PostgresSQL Event Component]
+** xref:pgp-dataformat.adoc[PGP DataFormat]
+** xref:platform-http-component.adoc[Platform HTTP Component]
+** xref:properties-component.adoc[Properties Component]
+** xref:protobuf-dataformat.adoc[Protobuf DataFormat]
+** xref:pubnub-component.adoc[PubNub Component]
+** xref:pulsar-component.adoc[Pulsar Component]
+** xref:quartz-component.adoc[Quartz Component]
+** xref:quickfix-component.adoc[QuickFix Component]
+** xref:rabbitmq-component.adoc[RabbitMQ Component]
+** xref:reactive-executor-vertx.adoc[ReactiveExecutor VertX]
+** xref:reactive-streams-component.adoc[Reactive Streams Component]
+** xref:reactor.adoc[Reactor Component]
+** xref:ref-component.adoc[Ref Component]
+** xref:resilience4j.adoc[Resilience4j Component]
+** xref:rest-api-component.adoc[REST API Component]
+** xref:rest-component.adoc[REST Component]
+** xref:rest-openapi-component.adoc[REST OpenApi Component]
+** xref:rest-swagger-component.adoc[REST Swagger Component]
+** xref:ribbon.adoc[Ribbon Component]
+** xref:robotframework-component.adoc[Robot Framework Component]
+** xref:rss-component.adoc[RSS Component]
+** xref:rss-dataformat.adoc[RSS DataFormat]
+** xref:rxjava.adoc[RxJava Component]
+** xref:saga-component.adoc[Saga Component]
+** xref:salesforce-component.adoc[Salesforce Component]
+** xref:sap-netweaver-component.adoc[SAP NetWeaver Component]
+** xref:scheduler-component.adoc[Scheduler Component]
+** xref:schematron-component.adoc[Schematron Component]
+** xref:scp-component.adoc[SCP Component]
+** xref:secureXML-dataformat.adoc[XML Security DataFormat]
+** xref:seda-component.adoc[SEDA Component]
+** xref:service-component.adoc[Service Component]
+** xref:servicenow-component.adoc[ServiceNow Component]
+** xref:servlet-component.adoc[Servlet Component]
+** xref:sftp-component.adoc[SFTP Component]
+** xref:shiro.adoc[Shiro Security Component]
+** xref:sip-component.adoc[SIP Component]
+** xref:sjms-batch-component.adoc[Simple JMS Batch Component]
+** xref:sjms-component.adoc[Simple JMS Component]
+** xref:sjms2-component.adoc[Simple JMS2 Component]
+** xref:slack-component.adoc[Slack Component]
+** xref:smpp-component.adoc[SMPP Component]
+** xref:snmp-component.adoc[SNMP Component]
+** xref:soapjaxb-dataformat.adoc[SOAP DataFormat]
+** xref:solr-component.adoc[Solr Component]
+** xref:soroush-component.adoc[Soroush Component]
+** xref:spark-component.adoc[Spark Component]
+** xref:spark-rest-component.adoc[Spark Rest Component]
+** xref:splunk-component.adoc[Splunk Component]
+** xref:spring-batch-component.adoc[Spring Batch Component]
+** xref:spring-event-component.adoc[Spring Event Component]
+** xref:spring-integration-component.adoc[Spring Integration Component]
+** xref:spring-javaconfig.adoc[Spring Java Config]
+** xref:spring-ldap-component.adoc[Spring LDAP Component]
+** xref:spring-redis-component.adoc[Spring Redis Component]
+** xref:spring-security.adoc[Spring Security]
+** xref:spring-ws-component.adoc[Spring WebService Component]
+** xref:spring.adoc[Spring Support]
+** xref:sql-component.adoc[SQL Component]
+** xref:sql-stored-component.adoc[SQL Stored Procedure Component]
+** xref:ssh-component.adoc[SSH Component]
+** xref:stax-component.adoc[StAX Component]
+** xref:stomp-component.adoc[Stomp Component]
+** xref:stream-component.adoc[Stream Component]
+** xref:string-template-component.adoc[String Template Component]
+** xref:stub-component.adoc[Stub Component]
+** xref:swagger-java.adoc[Swagger Java Component]
+** xref:syslog-dataformat.adoc[Syslog DataFormat]
+** xref:tarfile-dataformat.adoc[Tar File DataFormat]
+** xref:telegram-component.adoc[Telegram Component]
+** xref:test-blueprint.adoc[Blueprint Testing]
+** xref:test-cdi.adoc[CDI Testing]
+** xref:test-junit5.adoc[Test Module]
+** xref:test-karaf.adoc[Test Karaf]
+** xref:test-spring-junit5.adoc[Camel Test Spring JUnit 5]
+** xref:test-spring.adoc[Test Spring]
+** xref:test.adoc[Test Module]
+** xref:testcontainers-junit5.adoc[Testcontainers]
+** xref:testcontainers-spring-junit5.adoc[Testcontainers Spring]
+** xref:testcontainers-spring.adoc[Testcontainers Spring]
+** xref:testcontainers.adoc[Testcontainers]
+** xref:thrift-component.adoc[Thrift Component]
+** xref:thrift-dataformat.adoc[Thrift DataFormat]
+** xref:tidyMarkup-dataformat.adoc[TidyMarkup DataFormat]
+** xref:tika-component.adoc[Tika Component]
+** xref:timer-component.adoc[Timer Component]
+** xref:twilio-component.adoc[Twilio Component]
+** xref:twitter-directmessage-component.adoc[Twitter Direct Message Component]
+** xref:twitter-search-component.adoc[Twitter Search Component]
+** xref:twitter-timeline-component.adoc[Twitter Timeline Component]
+** xref:undertow-component.adoc[Undertow Component]
+** xref:univocity-csv-dataformat.adoc[uniVocity CSV DataFormat]
+** xref:univocity-fixed-dataformat.adoc[uniVocity Fixed Length DataFormat]
+** xref:univocity-tsv-dataformat.adoc[uniVocity TSV DataFormat]
+** xref:validator-component.adoc[Validator Component]
+** xref:velocity-component.adoc[Velocity Component]
+** xref:vertx-component.adoc[Vert.x Component]
+** xref:vm-component.adoc[VM Component]
+** xref:weather-component.adoc[Weather Component]
+** xref:web3j-component.adoc[Web3j Ethereum Blockchain Component]
+** xref:webhook-component.adoc[Webhook Component]
+** xref:websocket-component.adoc[Jetty Websocket Component]
+** xref:websocket-jsr356-component.adoc[Javax Websocket Component]
+** xref:weka-component.adoc[Weka Component]
+** xref:wordpress-component.adoc[Wordpress Component]
+** xref:workday-component.adoc[Workday Component]
+** xref:xchange-component.adoc[XChange Component]
+** xref:xj-component.adoc[XJ Component]
+** xref:xmlsecurity-sign-component.adoc[XML Security Sign Component]
+** xref:xmlsecurity-verify-component.adoc[XML Security Verify Component]
+** xref:xmpp-component.adoc[XMPP Component]
+** xref:xquery-component.adoc[XQuery Component]
+** xref:xslt-component.adoc[XSLT Component]
+** xref:xslt-saxon-component.adoc[XSLT Saxon Component]
+** xref:xstream-dataformat.adoc[XStream DataFormat]
+** xref:yaml-snakeyaml-dataformat.adoc[YAML SnakeYAML DataFormat]
+** xref:yammer-component.adoc[Yammer Component]
+** xref:zendesk-component.adoc[Zendesk Component]
+** xref:zipdeflater-dataformat.adoc[Zip Deflate Compression DataFormat]
+** xref:zipfile-dataformat.adoc[Zip File DataFormat]
+** xref:zipkin.adoc[Zipkin Component]
+** xref:zookeeper-component.adoc[ZooKeeper Component]
+** xref:zookeeper-master-component.adoc[ZooKeeper Master Component]
diff --git a/docs/components/modules/ROOT/pages/bean-language.adoc b/docs/components/modules/ROOT/pages/bean-language.adoc
deleted file mode 100644
index 2866c5e..0000000
--- a/docs/components/modules/ROOT/pages/bean-language.adoc
+++ /dev/null
@@ -1,184 +0,0 @@
-[[bean-language]]
-= Bean method Language
-:page-source: components/camel-bean/src/main/docs/bean-language.adoc
-== Bean Language
-*Since Camel 1.3*
-
-The purpose of the Bean Language is to be able to implement an
-xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate] using
-a simple method on a bean. The bean name is resolved using a xref:manual::registry.adoc[Registry], such as the
-xref:manual::spring.adoc[Spring] *`ApplicationContext`*, then a method is
-invoked to evaluate the xref:manual::expression.adoc[Expression] or
-xref:manual::predicate.adoc[Predicate]. If no method name is provided then one
-is chosen using the rules for xref:manual::bean-binding.adoc[Bean Binding];
-using the type of the message body and using any annotations on the bean
-methods.
-
-The xref:manual::bean-binding.adoc[Bean Binding] rules are used to bind the
-xref:manual::message.adoc[Message] Exchange to the method parameters; so you can
-annotate the bean to extract headers or other expressions such as
-xref:components::xpath-language.adoc[XPath] or xref:components::xquery-language.adoc[XQuery] from the message.
-
-== Bean Language options
-
-// language options: START
-The Bean method language supports 4 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| ref |  | String | Reference to bean to lookup in the registry
-| method |  | String | Name of method to call
-| beanType |  | String | Class name of the bean to use
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-[[BeanLanguage-UsingBeanExpressionsinJava]]
-== Using Bean Expressions in Java
-
-[source,syntaxhighlighter-pre]
-----
-from("activemq:topic:OrdersTopic")
-  .filter().method("myBean", "isGoldCustomer")
-    .to("activemq:BigSpendersQueue");
-----
-
-[[BeanLanguage-UsingBeanExpressionsinSpringXML]]
-== Using Bean Expressions in Spring XML
-
-[source,syntaxhighlighter-pre]
-----
-<route>
-  <from uri="activemq:topic:OrdersTopic"/>
-  <filter>
-    <method ref="myBean" method="isGoldCustomer"/>
-    <to uri="activemq:BigSpendersQueue"/>
-  </filter>
-</route>
-----
-
-[WARNING]
-====
- **Bean Attribute Now Deprecated**
-
-The *`bean`* attribute of the method expression element is now
-deprecated. Use the *`ref`* attribute instead.
-
-====
-
-[[BeanLanguage-WritingtheExpressionBean]]
-== Writing the Expression Bean
-
-The bean in the above examples is just any old Java Bean with a method
-called *`isGoldCustomer()`* that returns some object that is easily
-converted to a *`boolean`* value in this case, as its used as a
-predicate.
-
-Example:
-
-[source,syntaxhighlighter-pre]
-----
-public class MyBean {
-  public boolean isGoldCustomer(Exchange exchange) {
-     // ...
-  }
-}
-----
-
-We can also use the xref:manual::bean-integration.adoc[Bean Integration]
-annotations.
-
-Example:
-
-[source,syntaxhighlighter-pre]
-----
-public boolean isGoldCustomer(String body) {...}
-----
-
-or
-
-[source,syntaxhighlighter-pre]
-----
-public boolean isGoldCustomer(@Header(name = "foo") Integer fooHeader) {...}
-----
-
-So you can bind parameters of the method to the Exchange, the
-xref:manual::message.adoc[Message] or individual headers, properties, the body
-or other expressions.
-
-[[BeanLanguage-Non-RegistryBeans]]
-== Non-Registry Beans
-
-The xref:bean-language.adoc[Bean Language] also supports invoking beans
-that isn't registered in the xref:manual::registry.adoc[Registry]. This is
-usable for quickly to invoke a bean from Java DSL where you don't need
-to register the bean in the xref:manual::registry.adoc[Registry] such as the
-xref:spring.adoc[Spring] *`ApplicationContext`*. Camel can instantiate
-the bean and invoke the method if given a class or invoke an already
-existing instance.
-
-Example:
-
-[source,syntaxhighlighter-pre]
-----
-from("activemq:topic:OrdersTopic")
-  .filter().expression(BeanLanguage(MyBean.class, "isGoldCustomer"))
-  .to("activemq:BigSpendersQueue");
-----
-
-The 2nd parameter *`isGoldCustomer`* is an optional parameter to
-explicit set the method name to invoke. If not provided Camel will try
-to invoke the most suitable method. If case of ambiguity Camel will
-thrown an Exception. In these situations the 2nd parameter can solve
-this problem. Also the code is more readable if the method name is
-provided. The 1st parameter can also be an existing instance of a Bean
-such as:
-
-[source,syntaxhighlighter-pre]
-----
-private MyBean my;
-
-from("activemq:topic:OrdersTopic")
-  .filter().expression(BeanLanguage.bean(my, "isGoldCustomer"))
-  .to("activemq:BigSpendersQueue");
-----
-
-In *Camel 2.2*: you can avoid the *`BeanLanguage`* and have it just as:
-
-[source,syntaxhighlighter-pre]
-----
-private MyBean my;
-
-from("activemq:topic:OrdersTopic")
-  .filter().expression(bean(my, "isGoldCustomer"))
-  .to("activemq:BigSpendersQueue");
-----
-
-Which also can be done in a bit shorter and nice way:
-
-[source,syntaxhighlighter-pre]
-----
-private MyBean my;
-
-from("activemq:topic:OrdersTopic")
-  .filter().method(my, "isGoldCustomer")
-  .to("activemq:BigSpendersQueue");
-----
-
-[[BeanLanguage-OtherExamples]]
-== Other Examples
-
-We have some test cases you can look at if it'll help
-
-* https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/MethodFilterTest.java[MethodFilterTest]
-is a JUnit test case showing the Java xref:manual::dsl.adoc[DSL] use of the bean
-expression being used in a filter
-* https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml[aggregator.xml]
-is a Spring XML test case for the xref:manual:eips:aggregate-eip.adoc[Aggregator] which
-uses a bean method call to test for the completion of the aggregation.
-
-include::camel-spring-boot::page$bean-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/controlbus-component.adoc b/docs/components/modules/ROOT/pages/controlbus-component.adoc
index 5f09e59..ecdea04 100644
--- a/docs/components/modules/ROOT/pages/controlbus-component.adoc
+++ b/docs/components/modules/ROOT/pages/controlbus-component.adoc
@@ -162,7 +162,7 @@ String xml = template.requestBody("controlbus:route?action=stats", null, String.
 
 == Using Simple language
 
-You can use the xref:manual:languages:simple-language.adoc[Simple] language with the control bus,
+You can use the xref:languages:simple-language.adoc[Simple] language with the control bus,
 for example to stop a specific route, you can send a message to the
 `"controlbus:language:simple"` endpoint containing the following
 message:
@@ -182,8 +182,8 @@ String status = template.requestBody("controlbus:language:simple", "${camelConte
 
 It's easier to use the `route` command to control lifecycle of
 routes. The `language` command allows you to execute a language script
-that has stronger powers such as xref:groovy-language.adoc[Groovy] or to some
-extend the xref:manual:languages:simple-language.adoc[Simple] language.
+that has stronger powers such as xref:languages:groovy-language.adoc[Groovy] or to some
+extend the xref:languages:simple-language.adoc[Simple] language.
 
 For example to shutdown Camel itself you can do:
 
@@ -198,7 +198,7 @@ message we sent to the control bus component.
 
 [TIP]
 ====
-You can also use other languages such as xref:groovy-language.adoc[Groovy], etc.
+You can also use other languages such as xref:languages:groovy-language.adoc[Groovy], etc.
 ====
 
 include::camel-spring-boot::page$controlbus-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/elsql-component.adoc b/docs/components/modules/ROOT/pages/elsql-component.adoc
index c842c36..984498d 100644
--- a/docs/components/modules/ROOT/pages/elsql-component.adoc
+++ b/docs/components/modules/ROOT/pages/elsql-component.adoc
@@ -45,7 +45,7 @@ The parameters to the SQL queries are named parameters in the elsql
 mapping files, and maps to corresponding keys from the Camel message, in
 the given precedence:
 
-1. from message body if xref:manual:languages:simple-language.adoc[Simple]
+1. from message body if xref:components:languages:simple-language.adoc[Simple]
 expression.
 
 2. from message body if its a `java.util.Map`
diff --git a/docs/components/modules/ROOT/pages/file-component.adoc b/docs/components/modules/ROOT/pages/file-component.adoc
index 2a58d76..9adbc61 100644
--- a/docs/components/modules/ROOT/pages/file-component.adoc
+++ b/docs/components/modules/ROOT/pages/file-component.adoc
@@ -221,7 +221,7 @@ bean completes, and thus the route is completed, the file consumer will
 perform the move operation and move the file to the `.done` sub-folder.
 
 The *move* and the *preMove* options are considered as a directory name
-(though if you use an expression such as xref:manual:languages:file-language.adoc[File Language], or xref:manual:languages:simple-language.adoc[Simple] then the result of the expression
+(though if you use an expression such as xref:components:languages:file-language.adoc[File Language], or xref:components:languages:simple-language.adoc[Simple] then the result of the expression
 evaluation is the file name to be used - eg if you set
 
 [source]
@@ -229,7 +229,7 @@ evaluation is the file name to be used - eg if you set
 move=../backup/copy-of-${file:name}
 ----
 
-then that's using the xref:manual:languages:file-language.adoc[File Language] which we
+then that's using the xref:components:languages:file-language.adoc[File Language] which we
 use return the file name to be used), which can be either relative or
 absolute. If relative, the directory is created as a sub-folder from
 within the folder where the file was consumed.
@@ -267,10 +267,10 @@ processed and after it's processed, it's moved to the `.done` folder.
 
 The *move* and *preMove* options
 are Expression-based, so we have the full power of
-the xref:manual:languages:file-language.adoc[File Language] to do advanced configuration
+the xref:components:languages:file-language.adoc[File Language] to do advanced configuration
 of the directory and name pattern. +
  Camel will, in fact, internally convert the directory name you enter
-into a xref:manual:languages:file-language.adoc[File Language] expression. So when we
+into a xref:components:languages:file-language.adoc[File Language] expression. So when we
 enter `move=.done` Camel will convert this into:
 `\${file:parent}/.done/${file:onlyname}`. This is only done if
 Camel detects that you have not provided a $\{ } in the option value
@@ -293,7 +293,7 @@ choice. For example to move the files in an error folder with a
 timestamp you can use
 `moveFailed=/error/${``file:name.noext``}-${date:now:yyyyMMddHHmmssSSS}.${``file:ext`}.
 
-See more examples at xref:manual:languages:file-language.adoc[File Language]
+See more examples at xref:components:languages:file-language.adoc[File Language]
 
 == Message Headers
 
@@ -307,7 +307,7 @@ The following headers are supported by this component:
 
 |`CamelFileName` |Specifies the name of the file to write (relative to the endpoint
 directory). This name can be a `String`; a `String` with a
-xref:manual:languages:file-language.adoc[File Language] or xref:manual:languages:simple-language.adoc[Simple]
+xref:components:languages:file-language.adoc[File Language] or xref:components:languages:simple-language.adoc[Simple]
 expression; or an Expression object. If it's
 `null` then Camel will auto-generate a filename based on the message
 unique ID.
@@ -514,8 +514,8 @@ from("direct:report").to("file:target/reports/?fileName=report.txt");
 == Filename Expression
 
 Filename can be set either using the *expression* option or as a
-string-based xref:manual:languages:file-language.adoc[File Language] expression in the
-`CamelFileName` header. See the xref:manual:languages:file-language.adoc[File Language]
+string-based xref:components:languages:file-language.adoc[File Language] expression in the
+`CamelFileName` header. See the xref:components:languages:file-language.adoc[File Language]
 for syntax and samples.
 
 [[File2-Consumingfilesfromfolderswhereothersdropfilesdirectly]]
@@ -798,7 +798,7 @@ today's date as a sub-folder name:
 from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
 ----
 
-See xref:manual:languages:file-language.adoc[File Language] for more samples.
+See xref:components:languages:file-language.adoc[File Language] for more samples.
 
 == Avoiding reading the same file more than once (idempotent consumer)
 
@@ -999,7 +999,7 @@ Registry for a bean with the ID, `mySorter`.
 === Sorting using sortBy
 
 Camel supports pluggable sorting strategies. This strategy it to use the
-xref:manual:languages:file-language.adoc[File Language] to configure the sorting. The
+xref:components:languages:file-language.adoc[File Language] to configure the sorting. The
 `sortBy` option is configured as follows:
 
 [source]
@@ -1023,7 +1023,7 @@ This will sort by file name, you can reverse the order by prefixing
 sortBy=reverse:file:name
 ----
 
-As we have the full power of xref:manual:languages:file-language.adoc[File Language] we
+As we have the full power of xref:components:languages:file-language.adoc[File Language] we
 can use some of the other parameters, so if we want to sort by file size
 we do:
 
@@ -1067,7 +1067,7 @@ sortBy=file:modified;file:name
 Now there is an issue here, can you spot it? Well the modified timestamp
 of the file is too fine as it will be in milliseconds, but what if we
 want to sort by date only and then subgroup by name? +
- Well as we have the true power of xref:manual:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
+ Well as we have the true power of xref:components:languages:file-language.adoc[File Language] we can use its date command that supports patterns. So this
 can be solved as:
 
 [source]
diff --git a/docs/components/modules/ROOT/pages/groovy-language.adoc b/docs/components/modules/ROOT/pages/groovy-language.adoc
deleted file mode 100644
index 7e177d4..0000000
--- a/docs/components/modules/ROOT/pages/groovy-language.adoc
+++ /dev/null
@@ -1,198 +0,0 @@
-[[groovy-language]]
-= Groovy Language
-:page-source: components/camel-groovy/src/main/docs/groovy-language.adoc
-
-*Since Camel 1.3*
-
-Camel supports http://groovy.codehaus.org/[Groovy] among other
-Scripting Languages to allow an
-Expression or Predicate to be
-used in the DSL or xref:manual::xml-configuration.adoc[Xml
-Configuration].
-
-To use a Groovy expression use the following Java code
-
-[source,java]
----------------------------------------
-... groovy("someGroovyExpression") ... 
----------------------------------------
-
-For example you could use the *groovy* function to create an
-Predicate in a xref:manual:eips:filter-eip.adoc[Message Filter] or as an Expression for a
-Recipient List
-
-== Groovy Options
-
-
-
-// language options: START
-The Groovy language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-
-
-== Customizing Groovy Shell
-
-Sometimes you may need to use custom `GroovyShell` instance in your
-Groovy expressions. To provide custom `GroovyShell`, add implementation
-of the `org.apache.camel.language.groovy.GroovyShellFactory` SPI
-interface to your Camel registry. For example after adding the following
-bean to your Spring context...
-
-[source,java]
-----------------------------------------------------------------------
-public class CustomGroovyShellFactory implements GroovyShellFactory {
- 
-  public GroovyShell createGroovyShell(Exchange exchange) {
-    ImportCustomizer importCustomizer = new ImportCustomizer();
-    importCustomizer.addStaticStars("com.example.Utils");
-    CompilerConfiguration configuration = new CompilerConfiguration();
-    configuration.addCompilationCustomizers(importCustomizer);
-    return new GroovyShell(configuration);
-  }
-
-}
-----------------------------------------------------------------------
-
-...Camel will use your custom GroovyShell instance (containing your
-custom static imports), instead of the default one.
-
-== Example
-
-[source,java]
-------------------------------------------------------------------------------------------------
-// lets route if a line item is over $100
-from("queue:foo").filter(groovy("request.lineItems.any { i -> i.value > 100 }")).to("queue:bar")
-------------------------------------------------------------------------------------------------
-
-And the Spring DSL:
-
-[source,xml]
------------------------------------------------------------------------------
-        <route>
-            <from uri="queue:foo"/>
-            <filter>
-                <groovy>request.lineItems.any { i -> i.value > 100 }</groovy>
-                <to uri="queue:bar"/>
-            </filter>
-        </route>
------------------------------------------------------------------------------
-
-== ScriptContext
-
-The JSR-223 scripting languages ScriptContext is pre configured with the
-following attributes all set at `ENGINE_SCOPE`:
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Attribute |Type |Value
-
-|context |`org.apache.camel.CamelContext` |The Camel Context ( It cannot be used in groovy)
-
-|camelContext |`org.apache.camel.CamelContext` |The Camel Context
-
-|exchange |`org.apache.camel.Exchange` |The current Exchange
-
-|request |`org.apache.camel.Message` |The message (IN message)
-
-|response |`org.apache.camel.Message` |*Deprecated*: The OUT message. The OUT message if null by default. Use
-IN message instead.
-
-|properties |`org.apache.camel.builder.script.PropertiesFunction` |Function with a `resolve` method to make it easier to use
-Camels xref:properties-component.adoc[Properties] component from scripts. See
-further below for example.
-|=======================================================================
-
-See Scripting Languages for the list of
-languages with explicit DSL support.
-
-== Additional arguments to ScriptingEngine
-
-*Since Camel 2.8*
-
-You can provide additional arguments to the `ScriptingEngine` using a
-header on the Camel message with the key `CamelScriptArguments`. +
- See this example:
-
-== Using properties function
-
-*Since Camel 2.9*
-
-If you need to use the xref:properties-component.adoc[Properties] component from a
-script to lookup property placeholders, then its a bit cumbersome to do
-so. 
-For example to set a header name myHeader with a value from a property
-placeholder, which key is provided in a header named "foo".
-
-[source,java]
-------------------------------------------------------------------------------------------------------------------------------
-.setHeader("myHeader").groovy(""context.resolvePropertyPlaceholders( + '{{' + request.headers.get(&#39;foo&#39;) + '}}' + ")")
-------------------------------------------------------------------------------------------------------------------------------
-
-You can use the properties function and the same example is simpler:
-
-[source,java]
----------------------------------------------------------------------------------------
-.setHeader("myHeader").groovy("properties.resolve(request.headers.get(&#39;foo&#39;))")
----------------------------------------------------------------------------------------
-
-== Loading script from external resource
-
-*Since Camel 2.11*
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
--------------------------------------------------------------------
-.setHeader("myHeader").groovy("resource:classpath:mygroovy.groovy")
--------------------------------------------------------------------
-
-== How to get the result from multiple statements script
-
-*Since Camel 2.14*
-
-As the scripteengine evale method just return a Null if it runs a
-multiple statments script. Camel now look up the value of script result
-by using the key of "result" from the value set. If you have multiple
-statements script, you need to make sure you set the value of result
-variable as the script return value.
-
-[source,text]
--------------------------------------------------------------
-bar = "baz";
-# some other statements ... 
-# camel take the result value as the script evaluation result
-result = body * 2 + 1
--------------------------------------------------------------
-
-== Dependencies
-
-To use scripting languages in your camel routes you need to add a
-dependency on *camel-groovy*.
-
-If you use Maven you could just add the following to your `pom.xml`,
-substituting the version number for the latest and greatest release (see
-the download page for the latest versions).
-
-[source,xml]
----------------------------------------
-<dependency>
-  <groupId>org.apache.camel</groupId>
-  <artifactId>camel-groovy</artifactId>
-  <version>x.x.x</version>
-</dependency>
----------------------------------------
-
-include::camel-spring-boot::page$groovy-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/hl7terser-language.adoc b/docs/components/modules/ROOT/pages/hl7terser-language.adoc
deleted file mode 100644
index 474b48a..0000000
--- a/docs/components/modules/ROOT/pages/hl7terser-language.adoc
+++ /dev/null
@@ -1,136 +0,0 @@
-[[hl7terser-language]]
-= HL7 Terser Language
-:page-source: components/camel-hl7/src/main/docs/hl7terser-language.adoc
-
-*Since Camel 2.11*
-
-http://hl7api.sourceforge.net[HAPI] provides a
-http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/util/Terser.html[Terser]
-class that provides access to fields using a commonly used terse
-location specification syntax. The Terser language allows to use this
-syntax to extract values from messages and to use them as expressions
-and predicates for filtering, content-based routing etc.
-
-== HL7 Terser Language options
-
-// language options: START
-The HL7 Terser language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-== Samples:
-
-[source,java]
-----
-   import static org.apache.camel.component.hl7.HL7.hl7terser;
-
-   // extract patient ID from field QRD-8 in the QRY_A19 message above and put into message header
-   from("direct:test1")
-      .setHeader("PATIENT_ID", hl7terser("QRD-8(0)-1"))
-      .to("mock:test1");
-
-   // continue processing if extracted field equals a message header
-   from("direct:test2")
-      .filter(hl7terser("QRD-8(0)-1").isEqualTo(header("PATIENT_ID"))
-      .to("mock:test2");
-----
-
-== HL7 Validation predicate
-
-Often it is preferable to first parse a HL7v2 message and in a separate
-step validate it against a HAPI
-http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/ValidationContext.html[ValidationContext].
-
-Sample:
-
-[source,java]
-----
-import static org.apache.camel.component.hl7.HL7.messageConformsTo;
-import ca.uhn.hl7v2.validation.impl.DefaultValidation;
-
-   // Use standard or define your own validation rules
-   ValidationContext defaultContext = new DefaultValidation();
-
-   // Throws PredicateValidationException if message does not validate
-   from("direct:test1")
-      .validate(messageConformsTo(defaultContext))
-      .to("mock:test1");
-----
-
-== HL7 Validation predicate using the HapiContext
-
-The HAPI Context is always configured with a
-http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/ValidationContext.html[ValidationContext]
-(or a
-http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/builder/ValidationRuleBuilder.html[ValidationRuleBuilder]),
-so you can access the validation rules indirectly. Furthermore, when
-unmarshalling the HL7DataFormat forwards the configured HAPI context in
-the `CamelHL7Context` header, and the validation rules of this context
-can be easily reused:
-
-[source,java]
-----
-import static org.apache.camel.component.hl7.HL7.messageConformsTo;
-import static org.apache.camel.component.hl7.HL7.messageConforms
-
-  HapiContext hapiContext = new DefaultHapiContext();
-  hapiContext.getParserConfiguration().setValidating(false); // don't validate during parsing
-
-  // customize HapiContext some more ... e.g. enforce that PID-8 in ADT_A01 messages of version 2.4 is not empty
-  ValidationRuleBuilder builder = new ValidationRuleBuilder() {
-      @Override
-      protected void configure() {
-         forVersion(Version.V24)
-              .message("ADT", "A01")
-              .terser("PID-8", not(empty()));
-         }
-      };
-  hapiContext.setValidationRuleBuilder(builder);
-
-  HL7DataFormat hl7 = new HL7DataFormat();
-  hl7.setHapiContext(hapiContext);
-
-  from("direct:test1")
-     .unmarshal(hl7)                // uses the GenericParser returned from the HapiContext
-     .validate(messageConforms())   // uses the validation rules returned from the HapiContext
-                                    // equivalent with .validate(messageConformsTo(hapiContext))
-     // route continues from here
-----
-
-== HL7 Acknowledgement expression
-
-A common task in HL7v2 processing is to generate an acknowledgement
-message as response to an incoming HL7v2 message, e.g. based on a
-validation result. The `ack` expression lets us accomplish this very
-elegantly:
-
-[source,java]
-----
-import static org.apache.camel.component.hl7.HL7.messageConformsTo;
-import static org.apache.camel.component.hl7.HL7.ack;
-import ca.uhn.hl7v2.validation.impl.DefaultValidation;
-
-  // Use standard or define your own validation rules
-   ValidationContext defaultContext = new DefaultValidation();
-
-   from("direct:test1")
-      .onException(Exception.class)
-         .handled(true)
-         .transform(ack()) // auto-generates negative ack because of exception in Exchange
-         .end()
-      .validate(messageConformsTo(defaultContext))
-      // do something meaningful here
-
-      // acknowledgement
-      .transform(ack())
-----
-
-include::camel-spring-boot::page$hl7-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/index.adoc b/docs/components/modules/ROOT/pages/index.adoc
index dbf2e94..62b685e 100644
--- a/docs/components/modules/ROOT/pages/index.adoc
+++ b/docs/components/modules/ROOT/pages/index.adoc
@@ -789,39 +789,39 @@ Number of Languages: 17 in 11 JAR artifacts (0 deprecated)
 |===
 | Language | Since | Description
 
-| xref:bean-language.adoc[Bean method] (camel-bean) | 1.3 | To use a Java bean (aka method call) in Camel expressions or predicates.
+| xref:languages:bean-language.adoc[Bean method] (camel-bean) | 1.3 | To use a Java bean (aka method call) in Camel expressions or predicates.
 
-| xref:constant-language.adoc[Constant] (camel-core-languages) | 1.5 | To use a constant value in Camel expressions or predicates. Important: this is a fixed constant value that is only set once during starting up the route, do not use this if you want dynamic values during routing.
+| xref:languages:constant-language.adoc[Constant] (camel-core-languages) | 1.5 | To use a constant value in Camel expressions or predicates. Important: this is a fixed constant value that is only set once during starting up the route, do not use this if you want dynamic values during routing.
 
-| xref:exchangeProperty-language.adoc[ExchangeProperty] (camel-core-languages) | 2.0 | To use a Camel Exchange property in expressions or predicates.
+| xref:languages:exchangeProperty-language.adoc[ExchangeProperty] (camel-core-languages) | 2.0 | To use a Camel Exchange property in expressions or predicates.
 
-| xref:file-language.adoc[File] (camel-core-languages) | 1.1 | For expressions and predicates using the file/simple language.
+| xref:languages:file-language.adoc[File] (camel-core-languages) | 1.1 | For expressions and predicates using the file/simple language.
 
-| xref:groovy-language.adoc[Groovy] (camel-groovy) | 1.3 | To use Groovy scripts in Camel expressions or predicates.
+| xref:languages:groovy-language.adoc[Groovy] (camel-groovy) | 1.3 | To use Groovy scripts in Camel expressions or predicates.
 
-| xref:header-language.adoc[Header] (camel-core-languages) | 1.5 | To use a Camel Message header in expressions or predicates.
+| xref:languages:header-language.adoc[Header] (camel-core-languages) | 1.5 | To use a Camel Message header in expressions or predicates.
 
-| xref:hl7terser-language.adoc[HL7 Terser] (camel-hl7) | 2.11 | To use HL7 terser scripts in Camel expressions or predicates.
+| xref:languages:hl7terser-language.adoc[HL7 Terser] (camel-hl7) | 2.11 | To use HL7 terser scripts in Camel expressions or predicates.
 
-| xref:jsonpath-language.adoc[JsonPath] (camel-jsonpath) | 2.13 | To use JsonPath in Camel expressions or predicates.
+| xref:languages:jsonpath-language.adoc[JsonPath] (camel-jsonpath) | 2.13 | To use JsonPath in Camel expressions or predicates.
 
-| xref:mvel-language.adoc[MVEL] (camel-mvel) | 2.0 | To use MVEL scripts in Camel expressions or predicates.
+| xref:languages:mvel-language.adoc[MVEL] (camel-mvel) | 2.0 | To use MVEL scripts in Camel expressions or predicates.
 
-| xref:ognl-language.adoc[OGNL] (camel-ognl) | 1.1 | To use OGNL scripts in Camel expressions or predicates.
+| xref:languages:ognl-language.adoc[OGNL] (camel-ognl) | 1.1 | To use OGNL scripts in Camel expressions or predicates.
 
-| xref:ref-language.adoc[Ref] (camel-core-languages) | 2.8 | Reference to an existing Camel expression or predicate, which is looked up from the Camel registry.
+| xref:languages:ref-language.adoc[Ref] (camel-core-languages) | 2.8 | Reference to an existing Camel expression or predicate, which is looked up from the Camel registry.
 
-| xref:simple-language.adoc[Simple] (camel-core-languages) | 1.1 | To use Camels built-in Simple language in Camel expressions or predicates.
+| xref:languages:simple-language.adoc[Simple] (camel-core-languages) | 1.1 | To use Camels built-in Simple language in Camel expressions or predicates.
 
-| xref:spel-language.adoc[SpEL] (camel-spring) | 2.7 | To use Spring Expression Language (SpEL) in Camel expressions or predicates.
+| xref:languages:spel-language.adoc[SpEL] (camel-spring) | 2.7 | To use Spring Expression Language (SpEL) in Camel expressions or predicates.
 
-| xref:tokenize-language.adoc[Tokenize] (camel-core-languages) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.
+| xref:languages:tokenize-language.adoc[Tokenize] (camel-core-languages) | 2.0 | To use Camel message body or header with a tokenizer in Camel expressions or predicates.
 
-| xref:xtokenize-language.adoc[XML Tokenize] (camel-xml-jaxp) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
+| xref:languages:xtokenize-language.adoc[XML Tokenize] (camel-xml-jaxp) | 2.14 | To use Camel message body or header with a XML tokenizer in Camel expressions or predicates.
 
-| xref:xpath-language.adoc[XPath] (camel-xpath) | 1.1 | To use XPath (XML) in Camel expressions or predicates.
+| xref:languages:xpath-language.adoc[XPath] (camel-xpath) | 1.1 | To use XPath (XML) in Camel expressions or predicates.
 
-| xref:xquery-language.adoc[XQuery] (camel-saxon) | 1.0 | To use XQuery (XML) in Camel expressions or predicates.
+| xref:languages:xquery-language.adoc[XQuery] (camel-saxon) | 1.0 | To use XQuery (XML) in Camel expressions or predicates.
 |===
 // languages: END
 
diff --git a/docs/components/modules/ROOT/pages/jetty-component.adoc b/docs/components/modules/ROOT/pages/jetty-component.adoc
index e4a6918..b713eaa 100644
--- a/docs/components/modules/ROOT/pages/jetty-component.adoc
+++ b/docs/components/modules/ROOT/pages/jetty-component.adoc
@@ -226,7 +226,7 @@ Jetty component will copy the HTTP request parameter, `one` to the
 exchange's `in.header`. We can then use the `simple` language to route
 exchanges that contain this header to a specific endpoint and all others
 to another. If we used a language more powerful than
-xref:manual:languages:simple-language.adoc[Simple] (such as xref:ognl-language.adoc[OGNL])
+xref:languages:simple-language.adoc[Simple] (such as xref:languages:ognl-language.adoc[OGNL])
 we could also test for the parameter value and do routing based on the
 header value as well.
 
diff --git a/docs/components/modules/ROOT/pages/jsonpath-language.adoc b/docs/components/modules/ROOT/pages/jsonpath-language.adoc
deleted file mode 100644
index d9cf497..0000000
--- a/docs/components/modules/ROOT/pages/jsonpath-language.adoc
+++ /dev/null
@@ -1,341 +0,0 @@
-[[jsonpath-language]]
-= JsonPath Language
-:page-source: components/camel-jsonpath/src/main/docs/jsonpath-language.adoc
-
-*Since Camel 2.13*
-
-Camel supports https://code.google.com/p/json-path/[JSonPath] to allow
-using Expression or Predicate
-on json messages.
-
-[source,java]
------------------------------------------------------
-from("queue:books.new")
-  .choice()
-    .when().jsonpath("$.store.book[?(@.price < 10)]")
-      .to("jms:queue:book.cheap")
-    .when().jsonpath("$.store.book[?(@.price < 30)]")
-      .to("jms:queue:book.average")
-    .otherwise()
-      .to("jms:queue:book.expensive")
------------------------------------------------------
-
-== JSonPath Options
-
-
-// language options: START
-The JsonPath language supports 7 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| resultType |  | String | Sets the class name of the result type (type from output)
-| suppressExceptions | false | Boolean | Whether to suppress exceptions such as PathNotFoundException.
-| allowSimple | true | Boolean | Whether to allow in inlined simple exceptions in the JsonPath expression
-| allowEasyPredicate | true | Boolean | Whether to allow using the easy predicate parser to pre-parse predicates.
-| writeAsString | false | Boolean | Whether to write the output of each row/element as a JSON String value instead of a Map/POJO value.
-| headerName |  | String | Name of header to use as input, instead of the message body
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-
-
-== Using XML configuration
-
-If you prefer to configure your routes in your Spring
-XML file then you can use xref:jsonpath-language.adoc[JSonPath] expressions as
-follows
-
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <choice>
-      <when>
-        <jsonpath>$.store.book[?(@.price &lt; 10)]</jsonpath>
-        <to uri="mock:cheap"/>
-      </when>
-      <when>
-        <jsonpath>$.store.book[?(@.price &lt; 30)]</jsonpath>
-        <to uri="mock:average"/>
-      </when>
-      <otherwise>
-        <to uri="mock:expensive"/>
-      </otherwise>
-    </choice>
-  </route>
-</camelContext>
-----
-
-== Syntax
-
-See the https://code.google.com/p/json-path/[JSonPath] project page for
-further examples.
-
-== Easy Syntax
-
-*Since Camel 2.19*
-
-When you just want to define a basic predicate using jsonpath syntax it can be a bit hard to remember the syntax.
- So for example to find out all the cheap books you have to do
-
-----
-$.store.book[?(@.price < 20)]
-----
-
-However what if you could just write it as
-
-----
-store.book.price < 20
-----
-
-And you can omit the path if you just want to look at nodes with a price key
-
-----
-price < 20
-----
-
-To support this there is a `EasyPredicateParser` which kicks-in if you have define the predicate
-  using a basic style. That means the predicate must not start with the `$` sign, and only include one operator.
-
-The easy syntax is:
-
-----
-left OP right
-----
-
-You can use Camel simple language in the right operator, eg
-
-----
-store.book.price < ${header.limit}
-----
-
-== Supported message body types
-
-Camel JSonPath supports message body using the following types:
-
-[width="100%",cols="3m,7",options="header"]
-|===
-| Type | Comment
-| File | Reading from files
-| String | Plain strings
-| Map | Message bodies as `java.util.Map` types
-| List | Message bodies as `java.util.List` types
-| POJO | *Optional* If Jackson is on the classpath, then camel-jsonpath
-  is able to use Jackson to read the message body as POJO and convert to `java.util.Map`
-  which is supported by JSonPath. For example you can add `camel-jackson` as dependency to include Jackson.
-| InputStream | If none of the above types matches, then Camel will attempt to read the message body as an `java.io.InputStream`.
-|===
-
-If a message body is of unsupported type then an exception is thrown by default, however you
-can configure JSonPath to suppress exceptions (see below)
-
-
-== Suppress exceptions
-
-*Since Camel 2.16*
-
-By default jsonpath will throw an exception if the json payload does not
-have a valid path accordingly to the configured jsonpath expression. In
-some use-cases you may want to ignore this in case the json payload
-contains optional data. Therefore you can set the option
-suppressExceptions to true to ignore this as shown:
-
-[source,java]
-----
-from("direct:start")
-    .choice()
-        // use true to suppress exceptions
-        .when().jsonpath("person.middlename", true)
-            .to("mock:middle")
-        .otherwise()
-            .to("mock:other");
-----
-
-And in XML DSL:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <choice>
-    <when>
-      <jsonpath suppressExceptions="true">person.middlename</jsonpath>
-      <to uri="mock:middle"/>
-    </when>
-    <otherwise>
-      <to uri="mock:other"/>
-    </otherwise>
-  </choice>
-</route>
-----
-
-This option is also available on the `@JsonPath` annotation.
-
-== Inline Simple exceptions
-
-*Since Camel 2.18*
-
-Its now possible to inlined Simple language expressions in the JSonPath expression using the simple syntax $\{xxx\}.
-An example is shown below:
-
-[source,java]
-----
-from("direct:start")
-  .choice()
-    .when().jsonpath("$.store.book[?(@.price < ${header.cheap})]")
-      .to("mock:cheap")
-    .when().jsonpath("$.store.book[?(@.price < ${header.average})]")
-      .to("mock:average")
-    .otherwise()
-      .to("mock:expensive");
-----
-
-And in XML DSL:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <choice>
-    <when>
-      <jsonpath>$.store.book[?(@.price < ${header.cheap})]</jsonpath>
-      <to uri="mock:cheap"/>
-    </when>
-    <when>
-      <jsonpath>$.store.book[?(@.price < ${header.average})]</jsonpath>
-      <to uri="mock:average"/>
-    </when>
-    <otherwise>
-      <to uri="mock:expensive"/>
-    </otherwise>
-  </choice>
-</route>
-----
-
-You can turn off support for inlined simple expression by setting the option allowSimple to false as shown:
-
-[source,java]
-----
-.when().jsonpath("$.store.book[?(@.price < 10)]", false, false)
-----
-
-And in XML DSL:
-
-[source,xml]
-----
-<jsonpath allowSimple="false">$.store.book[?(@.price < 10)]</jsonpath>
-----
-
-== JSonPath injection
-
-You can use Bean Integration to invoke a
-method on a bean and use various languages such as JSonPath to extract a
-value from the message and bind it to a method parameter.
-
-For example
-
-[source,java]
-----
-public class Foo {
-    
-    @Consume("activemq:queue:books.new")
-    public void doSomething(@JsonPath("$.store.book[*].author") String author, @Body String json) {
-      // process the inbound message here
-    }
-}
-----
-
-== Encoding Detection
-
-The encoding of the JSON document is
-detected automatically, if the document is encoded in unicode  (UTF-8,
-UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE ) as specified in  RFC-4627. If
-the encoding is a non-unicode encoding, you can either make sure that
-you enter the document in String format to the JSONPath component or you
-can specify the encoding in the header "*CamelJsonPathJsonEncoding*"
-(JsonpathConstants.HEADER_JSON_ENCODING).
-
-== Split JSon data into sub rows as JSon
-
-You can use jsonpath to split a JSon document, such as:
-
-[source,java]
-----
-from("direct:start")
-    .split().jsonpath("$.store.book[*]")
-    .to("log:book");
-----
-
-Then each book is logged, however the message body is a `Map` instance. Sometimes
-you may want to output this as plain String JSon value instead, which can be done
-with the `writeAsString` option as shown:
-
-[source,java]
-----
-from("direct:start")
-    .split().jsonpathWriteAsString("$.store.book[*]")
-    .to("log:book");
-----
-
-Then each book is logged as a String JSon value. For earlier versions of Camel you
-would need to use camel-jackson dataformat and marshal the message body to make it
-convert the message body from `Map` to a `String` type.
-
-== Using header as input
-*Since Camel 2.20*
-
-By default jsonpath uses the message body as the input source. However you can also use a header as input
-by specifying the `headerName` option.
-
-For example to count the number of books from a json document that
-was stored in a header named `books` you can do:
-
-[source,java]
-----
-from("direct:start")
-    .setHeader("numberOfBooks")
-        .jsonpath("$..store.book.length()", false, int.class, "books")
-    .to("mock:result");
-----
-
-In the `jsonpath` expression above we specify the name of the header as `books`
-and we also told that we wanted the result to be converted as an integer by `int.class`.
-
-The same example in XML DSL would be:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <setHeader name="numberOfBooks">
-    <jsonpath headerName="books" resultType="int">$..store.book.length()</jsonpath>
-  </transform>
-  <to uri="mock:result"/>
-</route>
-----
-
-== Dependencies
-
-To use JSonPath in your camel routes you need to add the a dependency on
-*camel-jsonpath* which implements the JSonPath language.
-
-If you use maven you could just add the following to your pom.xml,
-substituting the version number for the latest & greatest release (see
-the download page for the latest versions).
-
-[source,xml]
-----
-<dependency>
-  <groupId>org.apache.camel</groupId>
-  <artifactId>camel-jsonpath</artifactId>
-  <version>x.x.x</version>
-</dependency>
-----
-
-include::camel-spring-boot::page$jsonpath-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/language-component.adoc b/docs/components/modules/ROOT/pages/language-component.adoc
index 92aa1a7..6b0169d 100644
--- a/docs/components/modules/ROOT/pages/language-component.adoc
+++ b/docs/components/modules/ROOT/pages/language-component.adoc
@@ -13,14 +13,14 @@ to an endpoint which executes a script by any of the supported
 Languages in Camel. +
  By having a component to execute language scripts, it allows more
 dynamic routing capabilities. For example by using the
-Routing Slip or xref:manual::dynamic-router.adoc[Dynamic
+Routing Slip or xref:manual:eips:dynamic-router.adoc[Dynamic
 Router] EIPs you can send messages to `language` endpoints where the
 script is dynamic defined as well.
 
 This component is provided out of the box in `camel-core` and hence no
 additional JARs is needed. You only have to include additional Camel
 components if the language of choice mandates it, such as using
-xref:groovy-language.adoc[Groovy] or xref:groovy-language.adoc[JavaScript] languages.
+xref:languages:groovy-language.adoc[Groovy] or xref:languages:groovy-language.adoc[JavaScript] languages.
 
 == URI format
 
@@ -109,17 +109,17 @@ script configured on the endpoint.
 
 == Examples
 
-For example you can use the xref:manual:languages:simple-language.adoc[Simple] language to
+For example you can use the xref:languages:simple-language.adoc[Simple] language to
 Message Translator a message:
 
 In case you want to convert the message body type you can do this as
 well:
 
-You can also use the xref:groovy-language.adoc[Groovy] language, such as this
+You can also use the xref:languages:groovy-language.adoc[Groovy] language, such as this
 example where the input message will by multiplied with 2:
 
 You can also provide the script as a header as shown below. Here we use
-xref:xpath-language.adoc[XPath] language to extract the text from the `<foo>`
+xref:languages:xpath-language.adoc[XPath] language to extract the text from the `<foo>`
 tag.
 
 [source,java]
diff --git a/docs/components/modules/ROOT/pages/mock-component.adoc b/docs/components/modules/ROOT/pages/mock-component.adoc
index 52e54dc..5dc21c6 100644
--- a/docs/components/modules/ROOT/pages/mock-component.adoc
+++ b/docs/components/modules/ROOT/pages/mock-component.adoc
@@ -33,7 +33,7 @@ Expression to create an order testing function,
 * Messages arrive match some kind of Predicate such
 as that specific headers have certain values, or that parts of the
 messages match some predicate, such as by evaluating an
-xref:xpath-language.adoc[XPath] or xref:xpath-language.adoc[XQuery]
+xref:languages:xpath-language.adoc[XPath] or xref:languages:xpath-language.adoc[XQuery]
 Expression.
 
 [NOTE]
diff --git a/docs/components/modules/ROOT/pages/mvel-language.adoc b/docs/components/modules/ROOT/pages/mvel-language.adoc
deleted file mode 100644
index 642668e..0000000
--- a/docs/components/modules/ROOT/pages/mvel-language.adoc
+++ /dev/null
@@ -1,124 +0,0 @@
-[[mvel-language]]
-= MVEL Language
-:page-source: components/camel-mvel/src/main/docs/mvel-language.adoc
-
-*Since Camel 2.0*
-
-Camel allows Mvel to be used as an Expression or
-Predicate the DSL or
-Xml Configuration.
-
-You could use Mvel to create an Predicate in a
-Message Filter or as an
-Expression for a
-Recipient List
-
-You can use Mvel dot notation to invoke operations. If you for instance
-have a body that contains a POJO that has a `getFamiliyName` method then
-you can construct the syntax as follows:
-
-[source,java]
-----------------------------------------
-"request.body.familyName"
-   // or 
-"getRequest().getBody().getFamilyName()"
-----------------------------------------
-
-== Mvel Options
-
-// language options: START
-The MVEL language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-== Variables
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Variable |Type |Description
-
-|*this* |Exchange |the Exchange is the root object
-
-|exchange |Exchange |the Exchange object
-
-|exception |Throwable |the Exchange exception (if any)
-
-|exchangeId |String |the exchange id
-
-|fault |Message |the Fault message (if any)
-
-|request |Message |the exchange.in message
-
-|response |Message |the exchange.out message (if any)
-
-|properties |Map |the exchange properties
-
-|property(name) |Object |the property by the given name
-
-|property(name, type) |Type |the property by the given name as the given type
-|=======================================================================
-
-== Samples
-
-For example you could use Mvel inside a xref:manual:eips:filter-eip.adoc[Message
-Filter] in XML
-
-[source,java]
----------------------------------------------
-<route>
-  <from uri="seda:foo"/>
-  <filter>
-    <mvel>request.headers.foo == 'bar'</mvel>
-    <to uri="seda:bar"/>
-  </filter>
-</route>
----------------------------------------------
-
-And the sample using Java DSL:
-
-[source,java]
----------------------------------------------------------------------------------
-   from("seda:foo").filter().mvel("request.headers.foo == 'bar'").to("seda:bar");
----------------------------------------------------------------------------------
-
-== Loading script from external resource
-
-*Since Camel 2.11*
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
--------------------------------------------------------------
-.setHeader("myHeader").mvel("resource:classpath:script.mvel")
--------------------------------------------------------------
-
-== Dependencies
-
-To use Mvel in your camel routes you need to add the a dependency on
-*camel-mvel* which implements the Mvel language.
-
-If you use maven you could just add the following to your pom.xml,
-substituting the version number for the latest & greatest release (see
-the download page for the latest versions).
-
-[source,java]
--------------------------------------
-<dependency>
-  <groupId>org.apache.camel</groupId>
-  <artifactId>camel-mvel</artifactId>
-  <version>x.x.x</version>
-</dependency>
--------------------------------------
-
-include::camel-spring-boot::page$mvel-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/ognl-language.adoc b/docs/components/modules/ROOT/pages/ognl-language.adoc
deleted file mode 100644
index 30d9ba7..0000000
--- a/docs/components/modules/ROOT/pages/ognl-language.adoc
+++ /dev/null
@@ -1,131 +0,0 @@
-[[ognl-language]]
-= OGNL Language
-:page-source: components/camel-ognl/src/main/docs/ognl-language.adoc
-
-*Since Camel 1.1*
-
-Camel allows http://commons.apache.org/proper/commons-ognl/[OGNL] to be
-used as an Expression or
-Predicate the DSL or
-Xml Configuration.
-
-You could use OGNL to create an Predicate in a
-Message Filter or as an
-Expression for a
-Recipient List
-
-You can use OGNL dot notation to invoke operations. If you for instance
-have a body that contains a POJO that has a `getFamilyName` method then
-you can construct the syntax as follows:
-
-[source,java]
-----------------------------------------
-"request.body.familyName"
-   // or 
-"getRequest().getBody().getFamilyName()"
-----------------------------------------
-
-== OGNL Options
-
-
-// language options: START
-The OGNL language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-
-
-== Variables
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Variable |Type |Description
-
-|*this* |Exchange |the Exchange is the root object
-
-|exchange |Exchange |the Exchange object
-
-|exception |Throwable |the Exchange exception (if any)
-
-|exchangeId |String |the exchange id
-
-|fault |Message |the Fault message (if any)
-
-|request |Message |the exchange.in message
-
-|response |Message |the exchange.out message (if any)
-
-|properties |Map |the exchange properties
-
-|property(name) |Object |the property by the given name
-
-|property(name, type) |Type |the property by the given name as the given type
-|=======================================================================
-
-== Samples
-
-For example you could use OGNL inside a xref:manual:eips:filter-eip.adoc[Message
-Filter] in XML
-
-[source,java]
----------------------------------------------
-<route>
-  <from uri="seda:foo"/>
-  <filter>
-    <ognl>request.headers.foo == 'bar'</ognl>
-    <to uri="seda:bar"/>
-  </filter>
-</route>
----------------------------------------------
-
-And the sample using Java DSL:
-
-[source,java]
----------------------------------------------------------------------------------
-   from("seda:foo").filter().ognl("request.headers.foo == 'bar'").to("seda:bar");
----------------------------------------------------------------------------------
-
-== Loading script from external resource
-
-*Since Camel 2.11*
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-------------------------------------------------------------
-.setHeader("myHeader").ognl("resource:classpath:myognl.txt")
-------------------------------------------------------------
-
-== Dependencies
-
-To use OGNL in your camel routes you need to add the a dependency on
-*camel-ognl* which implements the OGNL language.
-
-If you use maven you could just add the following to your pom.xml,
-substituting the version number for the latest & greatest release (see
-the download page for the latest versions).
-
-[source,java]
--------------------------------------
-<dependency>
-  <groupId>org.apache.camel</groupId>
-  <artifactId>camel-ognl</artifactId>
-  <version>x.x.x</version>
-</dependency>
--------------------------------------
-
-Otherwise, you'll also need
-https://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.ognl/2.7.3_4/org.apache.servicemix.bundles.ognl-2.7.3_4.jar[OGNL]
-
-include::camel-spring-boot::page$ognl-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/properties-component.adoc b/docs/components/modules/ROOT/pages/properties-component.adoc
index 6850208..f9c7b67 100644
--- a/docs/components/modules/ROOT/pages/properties-component.adoc
+++ b/docs/components/modules/ROOT/pages/properties-component.adoc
@@ -288,9 +288,9 @@ ProducerTemplate for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-== Example with xref:manual:languages:simple-language.adoc[Simple] language
+== Example with xref:languages:simple-language.adoc[Simple] language
 
-The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
+The xref:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -547,7 +547,7 @@ placeholder notation with `{{` and `}}`.
 == Clashing Spring property placeholders with Camels Simple language
 
 Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
+syntax clashes with the xref:languages:simple-language.adoc[Simple] in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -558,7 +558,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
+to indicate using the xref:languages:simple-language.adoc[Simple] language in Camel.
 
 [source,xml]
 ----
diff --git a/docs/components/modules/ROOT/pages/salesforce-component.adoc b/docs/components/modules/ROOT/pages/salesforce-component.adoc
index 367ea11..43b2931 100644
--- a/docs/components/modules/ROOT/pages/salesforce-component.adoc
+++ b/docs/components/modules/ROOT/pages/salesforce-component.adoc
@@ -366,7 +366,7 @@ For instance, consider that you need to limit the API usage of Salesforce so tha
 other routes. The body of output message contains an instance of
 `org.apache.camel.component.salesforce.api.dto.Limits` object that can be used in conjunction with
 Content Based Router and Content Based Router and 
-xref:spel-language.adoc[Spring Expression Language (SpEL)] to choose when to perform queries.
+xref:languages:spel-language.adoc[Spring Expression Language (SpEL)] to choose when to perform queries.
 
 Notice how multiplying `1.0` with the integer value held in `body.dailyApiRequests.remaining` makes the expression
 evaluate as with floating point arithmetic, without it - it would end up making integral division which would result
diff --git a/docs/components/modules/ROOT/pages/spel-language.adoc b/docs/components/modules/ROOT/pages/spel-language.adoc
deleted file mode 100644
index f677b61..0000000
--- a/docs/components/modules/ROOT/pages/spel-language.adoc
+++ /dev/null
@@ -1,161 +0,0 @@
-[[spel-language]]
-= SpEL Language
-:page-source: components/camel-spring/src/main/docs/spel-language.adoc
-
-*Since Camel 2.7*
-
-Camel allows
-https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions[Spring Expression Language (SpEL)]
-to be used as an Expression or Predicate in the DSL or XML Configuration.
-
-[NOTE]
-====
-It is recommended to use SpEL in Spring runtimes. However, you can
-use SpEL in other runtimes (there may be functionality SpEL cannot do when not running in a Spring runtime)
-====
-
-== Variables
-
-The following variables are available in expressions and predicates written in SpEL:
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|===
-|Variable |Type |Description
-
-|this |Exchange |the Exchange is the root object
-
-|exchange |Exchange |the Exchange object
-
-|exception |Throwable |the Exchange exception (if any)
-
-|exchangeId |String |the exchange id
-
-|fault |Message |the Fault message (if any)
-
-|body |Object | The IN message body.
-
-|request |Message |the exchange.in message
-
-|response |Message |the exchange.out message (if any)
-
-|properties |Map |the exchange properties
-
-|property(name) |Object |the property by the given name
-
-|property(name, type) |Type |the property by the given name as the given type
-|===
-
-== Options
-
-// language options: START
-The SpEL language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Samples
-
-=== Expression templating
-
-SpEL expressions need to be surrounded by `#{` `}` delimiters since
-expression templating is enabled. This allows you to combine SpEL
-expressions with regular text and use this as extremely lightweight
-template language.
-
-For example if you construct the following route:
-
-[source,java]
-----
-from("direct:example")
-    .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
-    .to("mock:result");
-----
-
-In the route above, notice spel is a static method which we need to
-import from `org.apache.camel.language.spel.SpelExpression.spel`, as we
-use spel as an Expression passed in as a parameter
-to the `setBody` method. Though if we use the fluent API we can do this
-instead:
-
-[source,java]
-----
-from("direct:example")
-    .setBody().spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")
-    .to("mock:result");
-----
-
-Notice we now use the `spel` method from the `setBody()` method. And
-this does not require us to static import the spel method from
-`org.apache.camel.language.spel.SpelExpression.spel`.
-
-And sent a message with the string "World" in the body, and a header
-"dayOrNight" with value "day":
-
-[source,java]
-----
-template.sendBodyAndHeader("direct:example", "World", "dayOrNight", "day");
-----
-
-The output on `mock:result` will be _"Hello World! What a beautiful
-day"_
-
-=== Bean integration
-
-You can reference beans defined in the Registry
-(most likely an `ApplicationContext`) in your SpEL expressions. For
-example if you have a bean named "foo" in your `ApplicationContext` you
-can invoke the "bar" method on this bean like this:
-
-[source,text]
-----
-#{@foo.bar == 'xyz'}
-----
-
-=== SpEL in enterprise integration patterns
-
-You can use SpEL as an expression for xref:manual:eips:recipientList-eip.adoc[Recipient
-List] or as a predicate inside a xref:manual:eips:filter-eip.adoc[Message
-Filter]:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:foo"/>
-  <filter>
-    <spel>#{request.headers.foo == 'bar'}</spel>
-    <to uri="direct:bar"/>
-  </filter>
-</route>
-----
-
-And the equivalent in Java DSL:
-
-[source,java]
-----
-from("direct:foo")
-    .filter().spel("#{request.headers.foo == 'bar'}")
-    .to("direct:bar");
-----
-
-== Loading script from external resource
-
-*Since Camel 2.11*
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-----
-.setHeader("myHeader").spel("resource:classpath:myspel.txt")
-----
-
-
-include::camel-spring-boot::page$spring-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/xpath-language.adoc b/docs/components/modules/ROOT/pages/xpath-language.adoc
deleted file mode 100644
index f5ca7c8..0000000
--- a/docs/components/modules/ROOT/pages/xpath-language.adoc
+++ /dev/null
@@ -1,496 +0,0 @@
-[[xpath-language]]
-= XPath Language
-:page-source: components/camel-xpath/src/main/docs/xpath-language.adoc
-
-*Since Camel 1.1*
-
-Camel supports http://www.w3.org/TR/xpath[XPath] to allow an
-Expression or Predicate to be
-used in the DSL or xref:manual::xml-configuration.adoc[Xml
-Configuration]. For example you could use XPath to create an
-Predicate in a xref:manual:eips:filter-eip.adoc[Message
-Filter] or as an Expression for a
-Recipient List.
-
-*Streams*
-
-If the message body is stream based, which means the input it receives
-is submitted to Camel as a stream. That means you will only be able to
-read the content of the stream *once*. So often when you use
-xref:xpath-language.adoc[XPath] as xref:xpath-language.adoc[Message Filter] or
-Content Based Router then you need to
-access the data multiple times, and you should use
-Stream Caching or convert the message body to
-a `String` prior which is safe to be re-read multiple times.
-
-[source,java]
-----
-from("queue:foo").
-  filter().xpath("//foo")).
-  to("queue:bar")
-----
-
-[source,java]
-----
-from("queue:foo").
-  choice().xpath("//foo")).to("queue:bar").
-  otherwise().to("queue:others");
-----
-
-== XPath Language options
-
-// language options: START
-The XPath language supports 9 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| documentType |  | String | Name of class for document type The default value is org.w3c.dom.Document
-| resultType | NODESET | String | Sets the class name of the result type (type from output) The default result type is NodeSet
-| saxon | false | Boolean | Whether to use Saxon.
-| factoryRef |  | String | References to a custom XPathFactory to lookup in the registry
-| objectModel |  | String | The XPath object model to use
-| logNamespaces | false | Boolean | Whether to log namespaces which can assist during trouble shooting
-| headerName |  | String | Name of header to use as input, instead of the message body
-| threadSafety | false | Boolean | Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrently such as from a Camel Splitter EIP in parallel processing mode. This option prevents concurrency issues by doing defensive copies of the nodes. It is recommended to turn this option on i [...]
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-== Namespaces
-
-You can easily use namespaces with XPath expressions using the
-Namespaces helper class.
-
-== Variables
-
-Variables in XPath is defined in different namespaces. The default
-namespace is `\http://camel.apache.org/schema/spring`.
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|===
-|Namespace URI |Local part |Type |Description
-
-|http://camel.apache.org/xml/in/[http://camel.apache.org/xml/in/] |in |Message |the exchange.in message
-
-|http://camel.apache.org/xml/out/[http://camel.apache.org/xml/out/] |out |Message |the exchange.out message
-
-|http://camel.apache.org/xml/function/[http://camel.apache.org/xml/function/] |functions |Object |Additional functions
-
-|http://camel.apache.org/xml/variables/environment-variables[http://camel.apache.org/xml/variables/environment-variables] |env |Object |OS environment variables
-
-|http://camel.apache.org/xml/variables/system-properties[http://camel.apache.org/xml/variables/system-properties] |system |Object |Java System properties
-
-|http://camel.apache.org/xml/variables/exchange-property[http://camel.apache.org/xml/variables/exchange-property] |  | Object |the exchange property
-|===
-
-Camel will resolve variables according to either:
-
-* namespace given
-* no namespace given
-
-=== Namespace given
-
-If the namespace is given then Camel is instructed exactly what to
-return. However when resolving either *in* or *out* Camel will try to
-resolve a header with the given local part first, and return it. If the
-local part has the value *body* then the body is returned instead.
-
-=== No namespace given
-
-If there is no namespace given then Camel resolves only based on the
-local part. Camel will try to resolve a variable in the following steps:
-
-* from `variables` that has been set using the `variable(name, value)`
-fluent builder
-* from message.in.header if there is a header with the given key
-* from exchange.properties if there is a property with the given key
-
-== Functions
-
-Camel adds the following XPath functions that can be used to access the
-exchange:
-
-[width="100%",cols="10%,10%,10%,70%",options="header",]
-|===
-|Function |Argument |Type |Description
-
-|in:body |none |Object |Will return the *in* message body.
-
-|in:header |the header name |Object |Will return the *in* message header.
-
-|out:body |none |Object |Will return the *out* message body.
-
-|out:header |the header name |Object |Will return the *out* message header.
-
-|function:properties |key for property |String |To lookup a property using the
-xref:properties-component.adoc[Properties] component (property placeholders).
-
-|function:simple |simple expression |Object |To evaluate a xref:manual:languages:simple-language.adoc[Simple] expression.
-|===
-
-CAUTION: `function:properties` and `function:simple` is not supported
-when the return type is a `NodeSet`, such as when using with a
-Splitter EIP.
-
-Here's an example showing some of these functions in use.
-
-== Using XML configuration
-
-If you prefer to configure your routes in your Spring
-XML file then you can use XPath expressions as follows
-
-[source,xml]
-----
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xsi:schemaLocation="
-       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
-
-  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring" xmlns:foo="http://example.com/person">
-    <route>
-      <from uri="activemq:MyQueue"/>
-      <filter>
-        <xpath>/foo:person[@name='James']</xpath>
-        <to uri="mqseries:SomeOtherQueue"/>
-      </filter>
-    </route>
-  </camelContext>
-</beans>
-----
-
-Notice how we can reuse the namespace prefixes, *foo* in this case, in
-the XPath expression for easier namespace based XPath expressions!
-
-See also this
-http://camel.465427.n5.nabble.com/fail-filter-XPATH-camel-td476424.html[discussion
-on the mailinglist] about using your own namespaces with xpath
-
-== Setting result type
-
-The xref:xpath-language.adoc[XPath] expression will return a result type using
-native XML objects such as `org.w3c.dom.NodeList`. But many times you
-want a result type to be a String. To do this you have to instruct the
-xref:xpath-language.adoc[XPath] which result type to use.
-
-In Java DSL:
-
-[source,java]
-----
-xpath("/foo:person/@id", String.class)
-----
-
-In Spring DSL you use the *resultType* attribute to provide a fully
-qualified classname:
-
-[source,xml]
-----
-<xpath resultType="java.lang.String">/foo:person/@id</xpath>
-----
-
-In @XPath: +
- *Since Camel 2.1*
-
-[source,java]
-----
-@XPath(value = "concat('foo-',//order/name/)", resultType = String.class) String name)
-----
-
-Where we use the xpath function concat to prefix the order name with
-`foo-`. In this case we have to specify that we want a String as result
-type so the concat function works.
-
-== Using XPath on Headers
-
-*Since Camel 2.11*
-
-Some users may have XML stored in a header. To apply an XPath to a
-header's value you can do this by defining the 'headerName' attribute.
-
-And in Java DSL you specify the headerName as the 2nd parameter as
-shown:
-
-[source,java]
-----
-  xpath("/invoice/@orderType = 'premium'", "invoiceDetails")
-----
-
-== Examples
-
-Here is a simple
-https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/processor/XPathFilterTest.java[example]
-using an XPath expression as a predicate in a
-Message Filter
-
-If you have a standard set of namespaces you wish to work with and wish
-to share them across many different XPath expressions you can use the
-NamespaceBuilder as shown
-https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java[in
-this example]
-
-In this sample we have a choice construct. The first choice evaulates if
-the message has a header key *type* that has the value *Camel*. +
- The 2nd choice evaluates if the message body has a name tag *<name>*
-which values is *Kong*. +
- If neither is true the message is routed in the otherwise block:
-
-And the spring XML equivalent of the route:
-
-== XPath injection
-
-You can use Bean Integration to invoke a
-method on a bean and use various languages such as XPath to extract a
-value from the message and bind it to a method parameter.
-
-The default XPath annotation has SOAP and XML namespaces available. If
-you want to use your own namespace URIs in an XPath expression you can
-use your own copy of the
-https://www.javadoc.io/doc/org.apache.camel/camel-xpath/current/org/apache/camel/language/xpath/XPath.html[XPath
-annotation] to create whatever namespace prefixes you want to use.
-
-i.e. cut and paste upper code to your own project in a different package
-and/or annotation name then add whatever namespace prefix/uris you want
-in scope when you use your annotation on a method parameter. Then when
-you use your annotation on a method parameter all the namespaces you
-want will be available for use in your XPath expression.
-
-For example
-
-[source,java]
-----
-public class Foo {
-    
-    @MessageDriven(uri = "activemq:my.queue")
-    public void doSomething(@MyXPath("/ns1:foo/ns2:bar/text()") String correlationID, @Body String body) {
-        // process the inbound message here
-    }
-}
-----
-
-== Using XPathBuilder without an Exchange
-
-*Since Camel 2.3*
-
-You can now use the `org.apache.camel.builder.XPathBuilder` without the
-need for an Exchange. This comes handy if you want
-to use it as a helper to do custom xpath evaluations.
-
-It requires that you pass in a CamelContext
-since a lot of the moving parts inside the XPathBuilder requires access
-to the Camel Type Converter and hence why
-CamelContext is needed.
-
-For example you can do something like this:
-
-[source,java]
-----
-boolean matches = XPathBuilder.xpath("/foo/bar/@xyz").matches(context, "<foo><bar xyz='cheese'/></foo>"));
-----
-
-This will match the given predicate.
-
-You can also evaluate for example as shown in the following three
-examples:
-
-[source,java]
-----
-String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>", String.class);
-Integer number = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>123</bar></foo>", Integer.class);
-Boolean bool = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>true</bar></foo>", Boolean.class);
-----
-
-Evaluating with a String result is a common requirement and thus you can
-do it a bit simpler:
-
-[source,java]
-----
-String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>");
-----
-
-== Using Saxon with XPathBuilder
-
-*Since Camel 2.3*
-
-You need to add *camel-saxon* as dependency to your project.
-
-Its now easier to use http://saxon.sourceforge.net/[Saxon] with the
-XPathBuilder which can be done in several ways as shown below. +
- Where as the latter ones are the easiest ones.
-
-* Using a factory
-* Using ObjectModel
-
-The easy one
-
-== Setting a custom XPathFactory using System Property
-
-*Since Camel 2.3*
-
-Camel now supports reading the
-http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html#newInstance(java.lang.String)[JVM
-system property `javax.xml.xpath.XPathFactory`] that can be used to set
-a custom XPathFactory to use.
-
-This unit test shows how this can be done to use Saxon instead:
-
-Camel will log at `INFO` level if it uses a non default XPathFactory
-such as:
-
-[source]
-----
-XPathBuilder  INFO  Using system property javax.xml.xpath.XPathFactory:http://saxon.sf.net/jaxp/xpath/om with value:
-                    net.sf.saxon.xpath.XPathFactoryImpl when creating XPathFactory
-----
-
-To use Apache Xerces you can configure the system property
-
-[source]
-----
--Djavax.xml.xpath.XPathFactory=org.apache.xpath.jaxp.XPathFactoryImpl
-----
-
-== Enabling Saxon from Spring DSL
-
-*Since Camel 2.10*
-
-Similarly to Java DSL, to enable Saxon from Spring DSL you have three
-options:
-
-Specifying the factory
-
-[source,xml]
-----
-<xpath factoryRef="saxonFactory" resultType="java.lang.String">current-dateTime()</xpath>
-----
-
-Specifying the object model
-
-[source,xml]
-----
-<xpath objectModel="http://saxon.sf.net/jaxp/xpath/om" resultType="java.lang.String">current-dateTime()</xpath>
-----
-
-Shortcut
-
-[source,xml]
-----
-<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>
-----
-
-== Namespace auditing to aid debugging
-
-*Since Camel 2.10*
-
-A large number of XPath-related issues that users frequently face are
-linked to the usage of namespaces. You may have some misalignment
-between the namespaces present in your message and those that your XPath
-expression is aware of or referencing. XPath predicates or expressions
-that are unable to locate the XML elements and attributes due to
-namespaces issues may simply look like "they are not working", when in
-reality all there is to it is a lack of namespace definition.
-
-Namespaces in XML are completely necessary, and while we would love to
-simplify their usage by implementing some magic or voodoo to wire
-namespaces automatically, truth is that any action down this path would
-disagree with the standards and would greatly hinder interoperability.
-
-Therefore, the utmost we can do is assist you in debugging such issues
-by adding two new features to the XPath Expression Language and are thus
-accesible from both predicates and expressions.
-
-#=== Logging the Namespace Context of your XPath expression/predicate
-
-Every time a new XPath expression is created in the internal pool, Camel
-will log the namespace context of the expression under the
-`org.apache.camel.builder.xml.XPathBuilder` logger. Since Camel
-represents Namespace Contexts in a hierarchical fashion (parent-child
-relationships), the entire tree is output in a recursive manner with the
-following format:
-
-[source]
-----
-[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]
-----
-
-Any of these options can be used to activate this logging:
-
-1.  Enable TRACE logging on the
-`org.apache.camel.builder.xml.XPathBuilder` logger, or some parent
-logger such as `org.apache.camel` or the root logger
-2.  Enable the `logNamespaces` option as indicated in
-xref:xpath-language.adoc[Auditing Namespaces], in which case the logging will
-occur on the INFO level
-
-== Auditing namespaces
-
-Camel is able to discover and dump all namespaces present on every
-incoming message before evaluating an XPath expression, providing all
-the richness of information you need to help you analyse and pinpoint
-possible namespace issues.
-
-To achieve this, it in turn internally uses another specially tailored
-XPath expression to extract all namespace mappings that appear in the
-message, displaying the prefix and the full namespace URI(s) for each
-individual mapping.
-
-Some points to take into account:
-
-* The implicit XML namespace
-(xmlns:xml="http://www.w3.org/XML/1998/namespace") is suppressed from
-the output because it adds no value
-* Default namespaces are listed under the DEFAULT keyword in the output
-* Keep in mind that namespaces can be remapped under different scopes.
-Think of a top-level 'a' prefix which in inner elements can be assigned
-a different namespace, or the default namespace changing in inner
-scopes. For each discovered prefix, all associated URIs are listed.
-
-You can enable this option in Java DSL and Spring DSL.
-
-Java DSL:
-
-[source,java]
-----
-XPathBuilder.xpath("/foo:person/@id", String.class).logNamespaces()
-----
-
-Spring DSL:
-
-[source,xml]
-----
-<xpath logNamespaces="true" resultType="String">/foo:person/@id</xpath>
-----
-
-The result of the auditing will be appear at the INFO level under the
-`org.apache.camel.builder.xml.XPathBuilder` logger and will look like
-the following:
-
-[source]
-----
-2012-01-16 13:23:45,878 [stSaxonWithFlag] INFO  XPathBuilder  - Namespaces discovered in message: 
-{xmlns:a=[http://apache.org/camel], DEFAULT=[http://apache.org/default], 
-xmlns:b=[http://apache.org/camelA, http://apache.org/camelB]}
-----
-
-== Loading script from external resource
-
-*Since Camel 2.11*
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-----
-.setHeader("myHeader").xpath("resource:classpath:myxpath.txt", String.class)
-----
-
-== Dependencies
-
-The XPath language is part of camel-core.
-
-include::camel-spring-boot::page$xpath-starter.adoc[]
diff --git a/docs/components/modules/ROOT/pages/xquery-language.adoc b/docs/components/modules/ROOT/pages/xquery-language.adoc
deleted file mode 100644
index fd41773..0000000
--- a/docs/components/modules/ROOT/pages/xquery-language.adoc
+++ /dev/null
@@ -1,159 +0,0 @@
-[[xquery-language]]
-= XQuery Language
-:page-source: components/camel-saxon/src/main/docs/xquery-language.adoc
-
-*Since Camel 1.0*
-
-Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
-Expression or Predicate to be
-used in the DSL or xref:manual::xml-configuration.adoc[Xml
-Configuration]. For example you could use XQuery to create an
-Predicate in a xref:manual:eips:filter-eip.adoc[Message
-Filter] or as an Expression for a
-Recipient List.
-
-== XQuery Language options
-
-// language options: START
-The XQuery language supports 3 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| type |  | String | Sets the class name of the result type (type from output) The default result type is NodeSet
-| headerName |  | String | Name of header to use as input, instead of the message body
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Examples
-
-[source,java]
----------------------------
-from("queue:foo")
-  .filter().xquery("//foo")
-  .to("queue:bar")
----------------------------
-
-You can also use functions inside your query, in which case you need an
-explicit type conversion (or you will get a org.w3c.dom.DOMException:
-HIERARCHY_REQUEST_ERR) by passing the Class as a second argument to the
-*xquery()* method.
-
-[source,java]
------------------------------------------------------------------------------
-from("direct:start")
-  .recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);
------------------------------------------------------------------------------
-
-== Variables
-
-The IN message body will be set as the `contextItem`. Besides this these
-Variables is also added as parameters:
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Variable |Type |Description
-
-|exchange |Exchange |The current Exchange
-
-|in.body |Object |The In message's body
-
-|out.body |Object |The OUT message's body (if any)
-
-|in.headers.* |Object |You can access the value of exchange.in.headers with key *foo* by using
-the variable which name is in.headers.foo
-
-|out.headers.* |Object |You can access the value of exchange.out.headers with key *foo* by using
-the variable which name is out.headers.foo variable
-
-|*key name* |Object |Any exchange.properties and exchange.in.headers and any additional
-parameters set using `setParameters(Map)`. These parameters is added
-with they own key name, for instance if there is an IN header with the
-key name *foo* then its added as *foo*.
-|=======================================================================
-
-== Using XML configuration
-
-If you prefer to configure your routes in your Spring
-XML file then you can use XPath expressions as follows
-
-[source,xml]
----------------------------------------------------------------------------------------------------------------
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:foo="http://example.com/person"
-       xsi:schemaLocation="
-       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
-       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
-
-  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
-    <route>
-      <from uri="activemq:MyQueue"/>
-      <filter>
-        <xquery>/foo:person[@name='James']</xquery>
-        <to uri="mqseries:SomeOtherQueue"/>
-      </filter>
-    </route>
-  </camelContext>
-</beans>
----------------------------------------------------------------------------------------------------------------
-
-Notice how we can reuse the namespace prefixes, *foo* in this case, in
-the XPath expression for easier namespace based XQuery expressions!
-
-When you use functions in your XQuery expression you need an explicit
-type conversion which is done in the xml configuration via the *@type*
-attribute:
-
-[source,xml]
--------------------------------------------------------------------------------
-    <xquery type="java.lang.String">concat('mock:foo.', /person/@city)</xquery>
--------------------------------------------------------------------------------
-
-== Learning XQuery
-
-XQuery is a very powerful language for querying, searching, sorting and
-returning XML. For help learning XQuery try these tutorials
-
-* Mike Kay's http://www.stylusstudio.com/xquery_primer.html[XQuery
-Primer]
-* the W3Schools http://www.w3schools.com/xquery/default.asp[XQuery
-Tutorial]
-
-You might also find the http://www.w3.org/TR/xpath-functions/[XQuery
-function reference] useful
-
-== Loading script from external resource
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-------------------------------------------------------------------------------
-.setHeader("myHeader").xquery("resource:classpath:myxquery.txt", String.class)
-------------------------------------------------------------------------------
-
-== Dependencies
-
-To use XQuery in your camel routes you need to add the a dependency on
-*camel-saxon* which implements the XQuery language.
-
-If you use maven you could just add the following to your pom.xml,
-substituting the version number for the latest & greatest release (see
-the download page for the latest versions).
-
-[source,java]
---------------------------------------
-<dependency>
-  <groupId>org.apache.camel</groupId>
-  <artifactId>camel-saxon</artifactId>
-  <version>x.x.x</version>
-</dependency>
---------------------------------------
-
-include::camel-spring-boot::page$saxon-starter.adoc[]


[camel] 07/18: move eip images to eips module

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 84eccb359736f3c6525548ae77d6f6bd52ce6380
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 12:31:58 2020 -0700

    move eip images to eips module
---
 .../modules/{ROOT/assets => eips}/images/eip/Aggregator.gif | Bin
 .../{ROOT/assets => eips}/images/eip/AggregatorIcon.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/BroadcastAggregate.gif | Bin
 .../{ROOT/assets => eips}/images/eip/CDC-Debezium.png       | Bin
 .../{ROOT/assets => eips}/images/eip/ChannelAdapterIcon.gif | Bin
 .../assets => eips}/images/eip/ChannelAdapterSolution.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/ChannelIcon.gif        | Bin
 .../{ROOT/assets => eips}/images/eip/CircuitBreaker.png     | Bin
 .../{ROOT/assets => eips}/images/eip/CompetingConsumers.gif | Bin
 .../assets => eips}/images/eip/CompetingConsumersIcon.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/ContentBasedRouter.gif | Bin
 .../assets => eips}/images/eip/ContentBasedRouterIcon.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/ContentFilter.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/ContentFilterIcon.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/ControlBusIcon.gif     | Bin
 .../images/eip/CorrelationIdentifierIcon.gif                | Bin
 .../images/eip/CorrelationIdentifierSolution.gif            | Bin
 .../{ROOT/assets => eips}/images/eip/DataEnricher.gif       | Bin
 .../{ROOT/assets => eips}/images/eip/DataEnricherIcon.gif   | Bin
 .../assets => eips}/images/eip/DeadLetterChannelIcon.gif    | Bin
 .../images/eip/DeadLetterChannelSolution.gif                | Bin
 .../modules/{ROOT/assets => eips}/images/eip/DetourIcon.gif | Bin
 .../assets => eips}/images/eip/DistributionAggregate.gif    | Bin
 .../images/eip/DistributionAggregateIcon.gif                | Bin
 .../assets => eips}/images/eip/DurableSubscriptionIcon.gif  | Bin
 .../images/eip/DurableSubscriptionSolution.gif              | Bin
 .../{ROOT/assets => eips}/images/eip/DynamicRouter.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/DynamicRouterIcon.gif  | Bin
 .../assets => eips}/images/eip/EventDrivenConsumerIcon.gif  | Bin
 .../images/eip/EventDrivenConsumerSolution.gif              | Bin
 .../{ROOT/assets => eips}/images/eip/EventMessageIcon.gif   | Bin
 .../assets => eips}/images/eip/EventMessageSolution.gif     | Bin
 .../assets => eips}/images/eip/GuaranteedMessagingIcon.gif  | Bin
 .../images/eip/GuaranteedMessagingSolution.gif              | Bin
 .../{ROOT/assets => eips}/images/eip/MessageBroker.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/MessageBrokerIcon.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/MessageBusIcon.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/MessageBusSolution.gif | Bin
 .../assets => eips}/images/eip/MessageChannelSolution.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/MessageDispatcher.gif  | Bin
 .../assets => eips}/images/eip/MessageDispatcherIcon.gif    | Bin
 .../assets => eips}/images/eip/MessageEndpointIcon.gif      | Bin
 .../assets => eips}/images/eip/MessageEndpointSolution.gif  | Bin
 .../assets => eips}/images/eip/MessageExpirationIcon.gif    | Bin
 .../images/eip/MessageExpirationSolution.gif                | Bin
 .../{ROOT/assets => eips}/images/eip/MessageFilter.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/MessageFilterIcon.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/MessageHistory.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/MessageIcon.gif        | Bin
 .../{ROOT/assets => eips}/images/eip/MessageRouter.gif      | Bin
 .../assets => eips}/images/eip/MessageSelectorIcon.gif      | Bin
 .../assets => eips}/images/eip/MessageSelectorSolution.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/MessageSolution.gif    | Bin
 .../{ROOT/assets => eips}/images/eip/MessageTranslator.gif  | Bin
 .../assets => eips}/images/eip/MessageTranslatorIcon.gif    | Bin
 .../assets => eips}/images/eip/MessagingAdapterIcon.gif     | Bin
 .../assets => eips}/images/eip/MessagingAdapterSolution.gif | Bin
 .../{ROOT/assets => eips}/images/eip/MessagingBridge.gif    | Bin
 .../assets => eips}/images/eip/MessagingBridgeIcon.gif      | Bin
 .../assets => eips}/images/eip/MessagingGatewayIcon.gif     | Bin
 .../assets => eips}/images/eip/MessagingGatewaySolution.gif | Bin
 .../images/eip/MessagingMapperClassDiagram.gif              | Bin
 .../{ROOT/assets => eips}/images/eip/NormalizerDetail.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/NormalizerIcon.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/PipesAndFilters.gif    | Bin
 .../assets => eips}/images/eip/PipesAndFiltersIcon.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/PointToPointIcon.gif   | Bin
 .../assets => eips}/images/eip/PointToPointSolution.gif     | Bin
 .../assets => eips}/images/eip/PollingConsumerIcon.gif      | Bin
 .../assets => eips}/images/eip/PollingConsumerSolution.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/ProcessManager.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/ProcessManagerIcon.gif | Bin
 .../assets => eips}/images/eip/PublishSubscribeIcon.gif     | Bin
 .../assets => eips}/images/eip/PublishSubscribeSolution.gif | Bin
 .../{ROOT/assets => eips}/images/eip/RecipientList.gif      | Bin
 .../{ROOT/assets => eips}/images/eip/RecipientListIcon.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/RequestReply.gif       | Bin
 .../{ROOT/assets => eips}/images/eip/RequestReplyIcon.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/Resequencer.gif        | Bin
 .../{ROOT/assets => eips}/images/eip/ResequencerIcon.gif    | Bin
 .../{ROOT/assets => eips}/images/eip/ReturnAddressIcon.gif  | Bin
 .../assets => eips}/images/eip/ReturnAddressSolution.gif    | Bin
 .../{ROOT/assets => eips}/images/eip/RoutingTableIcon.gif   | Bin
 .../{ROOT/assets => eips}/images/eip/RoutingTableSimple.gif | Bin
 .../modules/{ROOT/assets => eips}/images/eip/Sequencer.gif  | Bin
 .../{ROOT/assets => eips}/images/eip/SplitterIcon.gif       | Bin
 .../{ROOT/assets => eips}/images/eip/StoreInLibrary.gif     | Bin
 .../{ROOT/assets => eips}/images/eip/StoreInLibraryIcon.gif | Bin
 .../assets => eips}/images/eip/TransactionalClientIcon.gif  | Bin
 .../images/eip/TransactionalClientSolution.gif              | Bin
 .../modules/{ROOT/assets => eips}/images/eip/WireTap.gif    | Bin
 .../{ROOT/assets => eips}/images/eip/WireTapIcon.gif        | Bin
 92 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/Aggregator.gif b/docs/user-manual/modules/eips/images/eip/Aggregator.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/Aggregator.gif
rename to docs/user-manual/modules/eips/images/eip/Aggregator.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/AggregatorIcon.gif b/docs/user-manual/modules/eips/images/eip/AggregatorIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/AggregatorIcon.gif
rename to docs/user-manual/modules/eips/images/eip/AggregatorIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/BroadcastAggregate.gif b/docs/user-manual/modules/eips/images/eip/BroadcastAggregate.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/BroadcastAggregate.gif
rename to docs/user-manual/modules/eips/images/eip/BroadcastAggregate.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CDC-Debezium.png b/docs/user-manual/modules/eips/images/eip/CDC-Debezium.png
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CDC-Debezium.png
rename to docs/user-manual/modules/eips/images/eip/CDC-Debezium.png
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ChannelAdapterIcon.gif b/docs/user-manual/modules/eips/images/eip/ChannelAdapterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ChannelAdapterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ChannelAdapterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ChannelAdapterSolution.gif b/docs/user-manual/modules/eips/images/eip/ChannelAdapterSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ChannelAdapterSolution.gif
rename to docs/user-manual/modules/eips/images/eip/ChannelAdapterSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ChannelIcon.gif b/docs/user-manual/modules/eips/images/eip/ChannelIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ChannelIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ChannelIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CircuitBreaker.png b/docs/user-manual/modules/eips/images/eip/CircuitBreaker.png
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CircuitBreaker.png
rename to docs/user-manual/modules/eips/images/eip/CircuitBreaker.png
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CompetingConsumers.gif b/docs/user-manual/modules/eips/images/eip/CompetingConsumers.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CompetingConsumers.gif
rename to docs/user-manual/modules/eips/images/eip/CompetingConsumers.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CompetingConsumersIcon.gif b/docs/user-manual/modules/eips/images/eip/CompetingConsumersIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CompetingConsumersIcon.gif
rename to docs/user-manual/modules/eips/images/eip/CompetingConsumersIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ContentBasedRouter.gif b/docs/user-manual/modules/eips/images/eip/ContentBasedRouter.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ContentBasedRouter.gif
rename to docs/user-manual/modules/eips/images/eip/ContentBasedRouter.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ContentBasedRouterIcon.gif b/docs/user-manual/modules/eips/images/eip/ContentBasedRouterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ContentBasedRouterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ContentBasedRouterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ContentFilter.gif b/docs/user-manual/modules/eips/images/eip/ContentFilter.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ContentFilter.gif
rename to docs/user-manual/modules/eips/images/eip/ContentFilter.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ContentFilterIcon.gif b/docs/user-manual/modules/eips/images/eip/ContentFilterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ContentFilterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ContentFilterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ControlBusIcon.gif b/docs/user-manual/modules/eips/images/eip/ControlBusIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ControlBusIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ControlBusIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CorrelationIdentifierIcon.gif b/docs/user-manual/modules/eips/images/eip/CorrelationIdentifierIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CorrelationIdentifierIcon.gif
rename to docs/user-manual/modules/eips/images/eip/CorrelationIdentifierIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/CorrelationIdentifierSolution.gif b/docs/user-manual/modules/eips/images/eip/CorrelationIdentifierSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/CorrelationIdentifierSolution.gif
rename to docs/user-manual/modules/eips/images/eip/CorrelationIdentifierSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DataEnricher.gif b/docs/user-manual/modules/eips/images/eip/DataEnricher.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DataEnricher.gif
rename to docs/user-manual/modules/eips/images/eip/DataEnricher.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DataEnricherIcon.gif b/docs/user-manual/modules/eips/images/eip/DataEnricherIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DataEnricherIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DataEnricherIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DeadLetterChannelIcon.gif b/docs/user-manual/modules/eips/images/eip/DeadLetterChannelIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DeadLetterChannelIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DeadLetterChannelIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DeadLetterChannelSolution.gif b/docs/user-manual/modules/eips/images/eip/DeadLetterChannelSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DeadLetterChannelSolution.gif
rename to docs/user-manual/modules/eips/images/eip/DeadLetterChannelSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DetourIcon.gif b/docs/user-manual/modules/eips/images/eip/DetourIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DetourIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DetourIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DistributionAggregate.gif b/docs/user-manual/modules/eips/images/eip/DistributionAggregate.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DistributionAggregate.gif
rename to docs/user-manual/modules/eips/images/eip/DistributionAggregate.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DistributionAggregateIcon.gif b/docs/user-manual/modules/eips/images/eip/DistributionAggregateIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DistributionAggregateIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DistributionAggregateIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DurableSubscriptionIcon.gif b/docs/user-manual/modules/eips/images/eip/DurableSubscriptionIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DurableSubscriptionIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DurableSubscriptionIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DurableSubscriptionSolution.gif b/docs/user-manual/modules/eips/images/eip/DurableSubscriptionSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DurableSubscriptionSolution.gif
rename to docs/user-manual/modules/eips/images/eip/DurableSubscriptionSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DynamicRouter.gif b/docs/user-manual/modules/eips/images/eip/DynamicRouter.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DynamicRouter.gif
rename to docs/user-manual/modules/eips/images/eip/DynamicRouter.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/DynamicRouterIcon.gif b/docs/user-manual/modules/eips/images/eip/DynamicRouterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/DynamicRouterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/DynamicRouterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/EventDrivenConsumerIcon.gif b/docs/user-manual/modules/eips/images/eip/EventDrivenConsumerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/EventDrivenConsumerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/EventDrivenConsumerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/EventDrivenConsumerSolution.gif b/docs/user-manual/modules/eips/images/eip/EventDrivenConsumerSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/EventDrivenConsumerSolution.gif
rename to docs/user-manual/modules/eips/images/eip/EventDrivenConsumerSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/EventMessageIcon.gif b/docs/user-manual/modules/eips/images/eip/EventMessageIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/EventMessageIcon.gif
rename to docs/user-manual/modules/eips/images/eip/EventMessageIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/EventMessageSolution.gif b/docs/user-manual/modules/eips/images/eip/EventMessageSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/EventMessageSolution.gif
rename to docs/user-manual/modules/eips/images/eip/EventMessageSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/GuaranteedMessagingIcon.gif b/docs/user-manual/modules/eips/images/eip/GuaranteedMessagingIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/GuaranteedMessagingIcon.gif
rename to docs/user-manual/modules/eips/images/eip/GuaranteedMessagingIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/GuaranteedMessagingSolution.gif b/docs/user-manual/modules/eips/images/eip/GuaranteedMessagingSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/GuaranteedMessagingSolution.gif
rename to docs/user-manual/modules/eips/images/eip/GuaranteedMessagingSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageBroker.gif b/docs/user-manual/modules/eips/images/eip/MessageBroker.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageBroker.gif
rename to docs/user-manual/modules/eips/images/eip/MessageBroker.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageBrokerIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageBrokerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageBrokerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageBrokerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageBusIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageBusIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageBusIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageBusIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageBusSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageBusSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageBusSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageBusSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageChannelSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageChannelSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageChannelSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageChannelSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageDispatcher.gif b/docs/user-manual/modules/eips/images/eip/MessageDispatcher.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageDispatcher.gif
rename to docs/user-manual/modules/eips/images/eip/MessageDispatcher.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageDispatcherIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageDispatcherIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageDispatcherIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageDispatcherIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageEndpointIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageEndpointIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageEndpointIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageEndpointIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageEndpointSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageEndpointSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageEndpointSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageEndpointSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageExpirationIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageExpirationIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageExpirationIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageExpirationIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageExpirationSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageExpirationSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageExpirationSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageExpirationSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageFilter.gif b/docs/user-manual/modules/eips/images/eip/MessageFilter.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageFilter.gif
rename to docs/user-manual/modules/eips/images/eip/MessageFilter.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageFilterIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageFilterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageFilterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageFilterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageHistory.gif b/docs/user-manual/modules/eips/images/eip/MessageHistory.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageHistory.gif
rename to docs/user-manual/modules/eips/images/eip/MessageHistory.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageRouter.gif b/docs/user-manual/modules/eips/images/eip/MessageRouter.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageRouter.gif
rename to docs/user-manual/modules/eips/images/eip/MessageRouter.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageSelectorIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageSelectorIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageSelectorIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageSelectorIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageSelectorSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageSelectorSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageSelectorSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageSelectorSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageSolution.gif b/docs/user-manual/modules/eips/images/eip/MessageSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessageSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageTranslator.gif b/docs/user-manual/modules/eips/images/eip/MessageTranslator.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageTranslator.gif
rename to docs/user-manual/modules/eips/images/eip/MessageTranslator.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessageTranslatorIcon.gif b/docs/user-manual/modules/eips/images/eip/MessageTranslatorIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessageTranslatorIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessageTranslatorIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterIcon.gif b/docs/user-manual/modules/eips/images/eip/MessagingAdapterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingAdapterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterSolution.gif b/docs/user-manual/modules/eips/images/eip/MessagingAdapterSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingAdapterSolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingAdapterSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingBridge.gif b/docs/user-manual/modules/eips/images/eip/MessagingBridge.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingBridge.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingBridge.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingBridgeIcon.gif b/docs/user-manual/modules/eips/images/eip/MessagingBridgeIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingBridgeIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingBridgeIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewayIcon.gif b/docs/user-manual/modules/eips/images/eip/MessagingGatewayIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewayIcon.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingGatewayIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewaySolution.gif b/docs/user-manual/modules/eips/images/eip/MessagingGatewaySolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingGatewaySolution.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingGatewaySolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/MessagingMapperClassDiagram.gif b/docs/user-manual/modules/eips/images/eip/MessagingMapperClassDiagram.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/MessagingMapperClassDiagram.gif
rename to docs/user-manual/modules/eips/images/eip/MessagingMapperClassDiagram.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/NormalizerDetail.gif b/docs/user-manual/modules/eips/images/eip/NormalizerDetail.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/NormalizerDetail.gif
rename to docs/user-manual/modules/eips/images/eip/NormalizerDetail.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/NormalizerIcon.gif b/docs/user-manual/modules/eips/images/eip/NormalizerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/NormalizerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/NormalizerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PipesAndFilters.gif b/docs/user-manual/modules/eips/images/eip/PipesAndFilters.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PipesAndFilters.gif
rename to docs/user-manual/modules/eips/images/eip/PipesAndFilters.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PipesAndFiltersIcon.gif b/docs/user-manual/modules/eips/images/eip/PipesAndFiltersIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PipesAndFiltersIcon.gif
rename to docs/user-manual/modules/eips/images/eip/PipesAndFiltersIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PointToPointIcon.gif b/docs/user-manual/modules/eips/images/eip/PointToPointIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PointToPointIcon.gif
rename to docs/user-manual/modules/eips/images/eip/PointToPointIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PointToPointSolution.gif b/docs/user-manual/modules/eips/images/eip/PointToPointSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PointToPointSolution.gif
rename to docs/user-manual/modules/eips/images/eip/PointToPointSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PollingConsumerIcon.gif b/docs/user-manual/modules/eips/images/eip/PollingConsumerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PollingConsumerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/PollingConsumerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PollingConsumerSolution.gif b/docs/user-manual/modules/eips/images/eip/PollingConsumerSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PollingConsumerSolution.gif
rename to docs/user-manual/modules/eips/images/eip/PollingConsumerSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ProcessManager.gif b/docs/user-manual/modules/eips/images/eip/ProcessManager.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ProcessManager.gif
rename to docs/user-manual/modules/eips/images/eip/ProcessManager.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ProcessManagerIcon.gif b/docs/user-manual/modules/eips/images/eip/ProcessManagerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ProcessManagerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ProcessManagerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PublishSubscribeIcon.gif b/docs/user-manual/modules/eips/images/eip/PublishSubscribeIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PublishSubscribeIcon.gif
rename to docs/user-manual/modules/eips/images/eip/PublishSubscribeIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/PublishSubscribeSolution.gif b/docs/user-manual/modules/eips/images/eip/PublishSubscribeSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/PublishSubscribeSolution.gif
rename to docs/user-manual/modules/eips/images/eip/PublishSubscribeSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RecipientList.gif b/docs/user-manual/modules/eips/images/eip/RecipientList.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RecipientList.gif
rename to docs/user-manual/modules/eips/images/eip/RecipientList.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RecipientListIcon.gif b/docs/user-manual/modules/eips/images/eip/RecipientListIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RecipientListIcon.gif
rename to docs/user-manual/modules/eips/images/eip/RecipientListIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RequestReply.gif b/docs/user-manual/modules/eips/images/eip/RequestReply.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RequestReply.gif
rename to docs/user-manual/modules/eips/images/eip/RequestReply.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RequestReplyIcon.gif b/docs/user-manual/modules/eips/images/eip/RequestReplyIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RequestReplyIcon.gif
rename to docs/user-manual/modules/eips/images/eip/RequestReplyIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/Resequencer.gif b/docs/user-manual/modules/eips/images/eip/Resequencer.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/Resequencer.gif
rename to docs/user-manual/modules/eips/images/eip/Resequencer.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ResequencerIcon.gif b/docs/user-manual/modules/eips/images/eip/ResequencerIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ResequencerIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ResequencerIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ReturnAddressIcon.gif b/docs/user-manual/modules/eips/images/eip/ReturnAddressIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ReturnAddressIcon.gif
rename to docs/user-manual/modules/eips/images/eip/ReturnAddressIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/ReturnAddressSolution.gif b/docs/user-manual/modules/eips/images/eip/ReturnAddressSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/ReturnAddressSolution.gif
rename to docs/user-manual/modules/eips/images/eip/ReturnAddressSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RoutingTableIcon.gif b/docs/user-manual/modules/eips/images/eip/RoutingTableIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RoutingTableIcon.gif
rename to docs/user-manual/modules/eips/images/eip/RoutingTableIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/RoutingTableSimple.gif b/docs/user-manual/modules/eips/images/eip/RoutingTableSimple.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/RoutingTableSimple.gif
rename to docs/user-manual/modules/eips/images/eip/RoutingTableSimple.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/Sequencer.gif b/docs/user-manual/modules/eips/images/eip/Sequencer.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/Sequencer.gif
rename to docs/user-manual/modules/eips/images/eip/Sequencer.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/SplitterIcon.gif b/docs/user-manual/modules/eips/images/eip/SplitterIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/SplitterIcon.gif
rename to docs/user-manual/modules/eips/images/eip/SplitterIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/StoreInLibrary.gif b/docs/user-manual/modules/eips/images/eip/StoreInLibrary.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/StoreInLibrary.gif
rename to docs/user-manual/modules/eips/images/eip/StoreInLibrary.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/StoreInLibraryIcon.gif b/docs/user-manual/modules/eips/images/eip/StoreInLibraryIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/StoreInLibraryIcon.gif
rename to docs/user-manual/modules/eips/images/eip/StoreInLibraryIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/TransactionalClientIcon.gif b/docs/user-manual/modules/eips/images/eip/TransactionalClientIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/TransactionalClientIcon.gif
rename to docs/user-manual/modules/eips/images/eip/TransactionalClientIcon.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/TransactionalClientSolution.gif b/docs/user-manual/modules/eips/images/eip/TransactionalClientSolution.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/TransactionalClientSolution.gif
rename to docs/user-manual/modules/eips/images/eip/TransactionalClientSolution.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/WireTap.gif b/docs/user-manual/modules/eips/images/eip/WireTap.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/WireTap.gif
rename to docs/user-manual/modules/eips/images/eip/WireTap.gif
diff --git a/docs/user-manual/modules/ROOT/assets/images/eip/WireTapIcon.gif b/docs/user-manual/modules/eips/images/eip/WireTapIcon.gif
similarity index 100%
rename from docs/user-manual/modules/ROOT/assets/images/eip/WireTapIcon.gif
rename to docs/user-manual/modules/eips/images/eip/WireTapIcon.gif


[camel] 16/18: auto-copies of component language files in their new location

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fd1970fd5b6bc684eeb9af8455452194c6a80129
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:12:28 2020 -0700

    auto-copies of component language files in their new location
---
 docs/components/modules/languages/nav.adoc         |  20 +
 .../modules/languages/pages/bean-language.adoc     | 184 ++++++++
 .../modules/languages/pages/groovy-language.adoc   | 198 ++++++++
 .../languages/pages/hl7terser-language.adoc        | 136 ++++++
 .../modules/languages/pages/jsonpath-language.adoc | 341 ++++++++++++++
 .../modules/languages/pages/mvel-language.adoc     | 124 ++++++
 .../modules/languages/pages/ognl-language.adoc     | 131 ++++++
 .../modules/languages/pages/spel-language.adoc     | 161 +++++++
 .../modules/languages/pages/xpath-language.adoc    | 496 +++++++++++++++++++++
 .../modules/languages/pages/xquery-language.adoc   | 159 +++++++
 10 files changed, 1950 insertions(+)

diff --git a/docs/components/modules/languages/nav.adoc b/docs/components/modules/languages/nav.adoc
new file mode 100644
index 0000000..6f7f526
--- /dev/null
+++ b/docs/components/modules/languages/nav.adoc
@@ -0,0 +1,20 @@
+// this file is auto generated and changes to it will be overwritten
+// make edits in docs/*nav.adoc.template files instead
+
+* Languages
+** xref:constant-language.adoc[Constant Language]
+** xref:exchangeProperty-language.adoc[ExchangeProperty Language]
+** xref:file-language.adoc[File Language]
+** xref:header-language.adoc[Header Language]
+** xref:ref-language.adoc[Ref Language]
+** xref:simple-language.adoc[Simple Language]
+** xref:tokenize-language.adoc[Tokenize Language]
+** xref:bean-language.adoc[Bean method Language]
+** xref:groovy-language.adoc[Groovy Language]
+** xref:hl7terser-language.adoc[HL7 Terser Language]
+** xref:jsonpath-language.adoc[JsonPath Language]
+** xref:mvel-language.adoc[MVEL Language]
+** xref:ognl-language.adoc[OGNL Language]
+** xref:spel-language.adoc[SpEL Language]
+** xref:xpath-language.adoc[XPath Language]
+** xref:xquery-language.adoc[XQuery Language]
diff --git a/docs/components/modules/languages/pages/bean-language.adoc b/docs/components/modules/languages/pages/bean-language.adoc
new file mode 100644
index 0000000..f11c064
--- /dev/null
+++ b/docs/components/modules/languages/pages/bean-language.adoc
@@ -0,0 +1,184 @@
+[[bean-language]]
+= Bean method Language
+:page-source: components/camel-bean/src/main/docs/bean-language.adoc
+== Bean Language
+*Since Camel 1.3*
+
+The purpose of the Bean Language is to be able to implement an
+xref:manual::expression.adoc[Expression] or xref:manual::predicate.adoc[Predicate] using
+a simple method on a bean. The bean name is resolved using a xref:manual::registry.adoc[Registry], such as the
+xref:manual::spring.adoc[Spring] *`ApplicationContext`*, then a method is
+invoked to evaluate the xref:manual::expression.adoc[Expression] or
+xref:manual::predicate.adoc[Predicate]. If no method name is provided then one
+is chosen using the rules for xref:manual::bean-binding.adoc[Bean Binding];
+using the type of the message body and using any annotations on the bean
+methods.
+
+The xref:manual::bean-binding.adoc[Bean Binding] rules are used to bind the
+xref:manual::message.adoc[Message] Exchange to the method parameters; so you can
+annotate the bean to extract headers or other expressions such as
+xref:xpath-language.adoc[XPath] or xref:xquery-language.adoc[XQuery] from the message.
+
+== Bean Language options
+
+// language options: START
+The Bean method language supports 4 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| ref |  | String | Reference to bean to lookup in the registry
+| method |  | String | Name of method to call
+| beanType |  | String | Class name of the bean to use
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+[[BeanLanguage-UsingBeanExpressionsinJava]]
+== Using Bean Expressions in Java
+
+[source,syntaxhighlighter-pre]
+----
+from("activemq:topic:OrdersTopic")
+  .filter().method("myBean", "isGoldCustomer")
+    .to("activemq:BigSpendersQueue");
+----
+
+[[BeanLanguage-UsingBeanExpressionsinSpringXML]]
+== Using Bean Expressions in Spring XML
+
+[source,syntaxhighlighter-pre]
+----
+<route>
+  <from uri="activemq:topic:OrdersTopic"/>
+  <filter>
+    <method ref="myBean" method="isGoldCustomer"/>
+    <to uri="activemq:BigSpendersQueue"/>
+  </filter>
+</route>
+----
+
+[WARNING]
+====
+ **Bean Attribute Now Deprecated**
+
+The *`bean`* attribute of the method expression element is now
+deprecated. Use the *`ref`* attribute instead.
+
+====
+
+[[BeanLanguage-WritingtheExpressionBean]]
+== Writing the Expression Bean
+
+The bean in the above examples is just any old Java Bean with a method
+called *`isGoldCustomer()`* that returns some object that is easily
+converted to a *`boolean`* value in this case, as its used as a
+predicate.
+
+Example:
+
+[source,syntaxhighlighter-pre]
+----
+public class MyBean {
+  public boolean isGoldCustomer(Exchange exchange) {
+     // ...
+  }
+}
+----
+
+We can also use the xref:manual::bean-integration.adoc[Bean Integration]
+annotations.
+
+Example:
+
+[source,syntaxhighlighter-pre]
+----
+public boolean isGoldCustomer(String body) {...}
+----
+
+or
+
+[source,syntaxhighlighter-pre]
+----
+public boolean isGoldCustomer(@Header(name = "foo") Integer fooHeader) {...}
+----
+
+So you can bind parameters of the method to the Exchange, the
+xref:manual::message.adoc[Message] or individual headers, properties, the body
+or other expressions.
+
+[[BeanLanguage-Non-RegistryBeans]]
+== Non-Registry Beans
+
+The xref:bean-language.adoc[Bean Language] also supports invoking beans
+that isn't registered in the xref:manual::registry.adoc[Registry]. This is
+usable for quickly to invoke a bean from Java DSL where you don't need
+to register the bean in the xref:manual::registry.adoc[Registry] such as the
+xref:ROOT:spring.adoc[Spring] *`ApplicationContext`*. Camel can instantiate
+the bean and invoke the method if given a class or invoke an already
+existing instance.
+
+Example:
+
+[source,syntaxhighlighter-pre]
+----
+from("activemq:topic:OrdersTopic")
+  .filter().expression(BeanLanguage(MyBean.class, "isGoldCustomer"))
+  .to("activemq:BigSpendersQueue");
+----
+
+The 2nd parameter *`isGoldCustomer`* is an optional parameter to
+explicit set the method name to invoke. If not provided Camel will try
+to invoke the most suitable method. If case of ambiguity Camel will
+thrown an Exception. In these situations the 2nd parameter can solve
+this problem. Also the code is more readable if the method name is
+provided. The 1st parameter can also be an existing instance of a Bean
+such as:
+
+[source,syntaxhighlighter-pre]
+----
+private MyBean my;
+
+from("activemq:topic:OrdersTopic")
+  .filter().expression(BeanLanguage.bean(my, "isGoldCustomer"))
+  .to("activemq:BigSpendersQueue");
+----
+
+In *Camel 2.2*: you can avoid the *`BeanLanguage`* and have it just as:
+
+[source,syntaxhighlighter-pre]
+----
+private MyBean my;
+
+from("activemq:topic:OrdersTopic")
+  .filter().expression(bean(my, "isGoldCustomer"))
+  .to("activemq:BigSpendersQueue");
+----
+
+Which also can be done in a bit shorter and nice way:
+
+[source,syntaxhighlighter-pre]
+----
+private MyBean my;
+
+from("activemq:topic:OrdersTopic")
+  .filter().method(my, "isGoldCustomer")
+  .to("activemq:BigSpendersQueue");
+----
+
+[[BeanLanguage-OtherExamples]]
+== Other Examples
+
+We have some test cases you can look at if it'll help
+
+* https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/MethodFilterTest.java[MethodFilterTest]
+is a JUnit test case showing the Java xref:manual::dsl.adoc[DSL] use of the bean
+expression being used in a filter
+* https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/aggregator.xml[aggregator.xml]
+is a Spring XML test case for the xref:manual:eips:aggregate-eip.adoc[Aggregator] which
+uses a bean method call to test for the completion of the aggregation.
+
+include::camel-spring-boot::page$bean-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/groovy-language.adoc b/docs/components/modules/languages/pages/groovy-language.adoc
new file mode 100644
index 0000000..59cf464
--- /dev/null
+++ b/docs/components/modules/languages/pages/groovy-language.adoc
@@ -0,0 +1,198 @@
+[[groovy-language]]
+= Groovy Language
+:page-source: components/camel-groovy/src/main/docs/groovy-language.adoc
+
+*Since Camel 1.3*
+
+Camel supports http://groovy.codehaus.org/[Groovy] among other
+Scripting Languages to allow an
+Expression or Predicate to be
+used in the DSL or xref:manual::xml-configuration.adoc[Xml
+Configuration].
+
+To use a Groovy expression use the following Java code
+
+[source,java]
+---------------------------------------
+... groovy("someGroovyExpression") ... 
+---------------------------------------
+
+For example you could use the *groovy* function to create an
+Predicate in a xref:manual:eips:filter-eip.adoc[Message Filter] or as an Expression for a
+Recipient List
+
+== Groovy Options
+
+
+
+// language options: START
+The Groovy language supports 1 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+
+
+== Customizing Groovy Shell
+
+Sometimes you may need to use custom `GroovyShell` instance in your
+Groovy expressions. To provide custom `GroovyShell`, add implementation
+of the `org.apache.camel.language.groovy.GroovyShellFactory` SPI
+interface to your Camel registry. For example after adding the following
+bean to your Spring context...
+
+[source,java]
+----------------------------------------------------------------------
+public class CustomGroovyShellFactory implements GroovyShellFactory {
+ 
+  public GroovyShell createGroovyShell(Exchange exchange) {
+    ImportCustomizer importCustomizer = new ImportCustomizer();
+    importCustomizer.addStaticStars("com.example.Utils");
+    CompilerConfiguration configuration = new CompilerConfiguration();
+    configuration.addCompilationCustomizers(importCustomizer);
+    return new GroovyShell(configuration);
+  }
+
+}
+----------------------------------------------------------------------
+
+...Camel will use your custom GroovyShell instance (containing your
+custom static imports), instead of the default one.
+
+== Example
+
+[source,java]
+------------------------------------------------------------------------------------------------
+// lets route if a line item is over $100
+from("queue:foo").filter(groovy("request.lineItems.any { i -> i.value > 100 }")).to("queue:bar")
+------------------------------------------------------------------------------------------------
+
+And the Spring DSL:
+
+[source,xml]
+-----------------------------------------------------------------------------
+        <route>
+            <from uri="queue:foo"/>
+            <filter>
+                <groovy>request.lineItems.any { i -> i.value > 100 }</groovy>
+                <to uri="queue:bar"/>
+            </filter>
+        </route>
+-----------------------------------------------------------------------------
+
+== ScriptContext
+
+The JSR-223 scripting languages ScriptContext is pre configured with the
+following attributes all set at `ENGINE_SCOPE`:
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Attribute |Type |Value
+
+|context |`org.apache.camel.CamelContext` |The Camel Context ( It cannot be used in groovy)
+
+|camelContext |`org.apache.camel.CamelContext` |The Camel Context
+
+|exchange |`org.apache.camel.Exchange` |The current Exchange
+
+|request |`org.apache.camel.Message` |The message (IN message)
+
+|response |`org.apache.camel.Message` |*Deprecated*: The OUT message. The OUT message if null by default. Use
+IN message instead.
+
+|properties |`org.apache.camel.builder.script.PropertiesFunction` |Function with a `resolve` method to make it easier to use
+Camels xref:ROOT:properties-component.adoc[Properties] component from scripts. See
+further below for example.
+|=======================================================================
+
+See Scripting Languages for the list of
+languages with explicit DSL support.
+
+== Additional arguments to ScriptingEngine
+
+*Since Camel 2.8*
+
+You can provide additional arguments to the `ScriptingEngine` using a
+header on the Camel message with the key `CamelScriptArguments`. +
+ See this example:
+
+== Using properties function
+
+*Since Camel 2.9*
+
+If you need to use the xref:ROOT:properties-component.adoc[Properties] component from a
+script to lookup property placeholders, then its a bit cumbersome to do
+so. 
+For example to set a header name myHeader with a value from a property
+placeholder, which key is provided in a header named "foo".
+
+[source,java]
+------------------------------------------------------------------------------------------------------------------------------
+.setHeader("myHeader").groovy(""context.resolvePropertyPlaceholders( + '{{' + request.headers.get(&#39;foo&#39;) + '}}' + ")")
+------------------------------------------------------------------------------------------------------------------------------
+
+You can use the properties function and the same example is simpler:
+
+[source,java]
+---------------------------------------------------------------------------------------
+.setHeader("myHeader").groovy("properties.resolve(request.headers.get(&#39;foo&#39;))")
+---------------------------------------------------------------------------------------
+
+== Loading script from external resource
+
+*Since Camel 2.11*
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+-------------------------------------------------------------------
+.setHeader("myHeader").groovy("resource:classpath:mygroovy.groovy")
+-------------------------------------------------------------------
+
+== How to get the result from multiple statements script
+
+*Since Camel 2.14*
+
+As the scripteengine evale method just return a Null if it runs a
+multiple statments script. Camel now look up the value of script result
+by using the key of "result" from the value set. If you have multiple
+statements script, you need to make sure you set the value of result
+variable as the script return value.
+
+[source,text]
+-------------------------------------------------------------
+bar = "baz";
+# some other statements ... 
+# camel take the result value as the script evaluation result
+result = body * 2 + 1
+-------------------------------------------------------------
+
+== Dependencies
+
+To use scripting languages in your camel routes you need to add a
+dependency on *camel-groovy*.
+
+If you use Maven you could just add the following to your `pom.xml`,
+substituting the version number for the latest and greatest release (see
+the download page for the latest versions).
+
+[source,xml]
+---------------------------------------
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-groovy</artifactId>
+  <version>x.x.x</version>
+</dependency>
+---------------------------------------
+
+include::camel-spring-boot::page$groovy-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/hl7terser-language.adoc b/docs/components/modules/languages/pages/hl7terser-language.adoc
new file mode 100644
index 0000000..474b48a
--- /dev/null
+++ b/docs/components/modules/languages/pages/hl7terser-language.adoc
@@ -0,0 +1,136 @@
+[[hl7terser-language]]
+= HL7 Terser Language
+:page-source: components/camel-hl7/src/main/docs/hl7terser-language.adoc
+
+*Since Camel 2.11*
+
+http://hl7api.sourceforge.net[HAPI] provides a
+http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/util/Terser.html[Terser]
+class that provides access to fields using a commonly used terse
+location specification syntax. The Terser language allows to use this
+syntax to extract values from messages and to use them as expressions
+and predicates for filtering, content-based routing etc.
+
+== HL7 Terser Language options
+
+// language options: START
+The HL7 Terser language supports 1 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+== Samples:
+
+[source,java]
+----
+   import static org.apache.camel.component.hl7.HL7.hl7terser;
+
+   // extract patient ID from field QRD-8 in the QRY_A19 message above and put into message header
+   from("direct:test1")
+      .setHeader("PATIENT_ID", hl7terser("QRD-8(0)-1"))
+      .to("mock:test1");
+
+   // continue processing if extracted field equals a message header
+   from("direct:test2")
+      .filter(hl7terser("QRD-8(0)-1").isEqualTo(header("PATIENT_ID"))
+      .to("mock:test2");
+----
+
+== HL7 Validation predicate
+
+Often it is preferable to first parse a HL7v2 message and in a separate
+step validate it against a HAPI
+http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/ValidationContext.html[ValidationContext].
+
+Sample:
+
+[source,java]
+----
+import static org.apache.camel.component.hl7.HL7.messageConformsTo;
+import ca.uhn.hl7v2.validation.impl.DefaultValidation;
+
+   // Use standard or define your own validation rules
+   ValidationContext defaultContext = new DefaultValidation();
+
+   // Throws PredicateValidationException if message does not validate
+   from("direct:test1")
+      .validate(messageConformsTo(defaultContext))
+      .to("mock:test1");
+----
+
+== HL7 Validation predicate using the HapiContext
+
+The HAPI Context is always configured with a
+http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/ValidationContext.html[ValidationContext]
+(or a
+http://hl7api.sourceforge.net/base/apidocs/ca/uhn/hl7v2/validation/builder/ValidationRuleBuilder.html[ValidationRuleBuilder]),
+so you can access the validation rules indirectly. Furthermore, when
+unmarshalling the HL7DataFormat forwards the configured HAPI context in
+the `CamelHL7Context` header, and the validation rules of this context
+can be easily reused:
+
+[source,java]
+----
+import static org.apache.camel.component.hl7.HL7.messageConformsTo;
+import static org.apache.camel.component.hl7.HL7.messageConforms
+
+  HapiContext hapiContext = new DefaultHapiContext();
+  hapiContext.getParserConfiguration().setValidating(false); // don't validate during parsing
+
+  // customize HapiContext some more ... e.g. enforce that PID-8 in ADT_A01 messages of version 2.4 is not empty
+  ValidationRuleBuilder builder = new ValidationRuleBuilder() {
+      @Override
+      protected void configure() {
+         forVersion(Version.V24)
+              .message("ADT", "A01")
+              .terser("PID-8", not(empty()));
+         }
+      };
+  hapiContext.setValidationRuleBuilder(builder);
+
+  HL7DataFormat hl7 = new HL7DataFormat();
+  hl7.setHapiContext(hapiContext);
+
+  from("direct:test1")
+     .unmarshal(hl7)                // uses the GenericParser returned from the HapiContext
+     .validate(messageConforms())   // uses the validation rules returned from the HapiContext
+                                    // equivalent with .validate(messageConformsTo(hapiContext))
+     // route continues from here
+----
+
+== HL7 Acknowledgement expression
+
+A common task in HL7v2 processing is to generate an acknowledgement
+message as response to an incoming HL7v2 message, e.g. based on a
+validation result. The `ack` expression lets us accomplish this very
+elegantly:
+
+[source,java]
+----
+import static org.apache.camel.component.hl7.HL7.messageConformsTo;
+import static org.apache.camel.component.hl7.HL7.ack;
+import ca.uhn.hl7v2.validation.impl.DefaultValidation;
+
+  // Use standard or define your own validation rules
+   ValidationContext defaultContext = new DefaultValidation();
+
+   from("direct:test1")
+      .onException(Exception.class)
+         .handled(true)
+         .transform(ack()) // auto-generates negative ack because of exception in Exchange
+         .end()
+      .validate(messageConformsTo(defaultContext))
+      // do something meaningful here
+
+      // acknowledgement
+      .transform(ack())
+----
+
+include::camel-spring-boot::page$hl7-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/jsonpath-language.adoc b/docs/components/modules/languages/pages/jsonpath-language.adoc
new file mode 100644
index 0000000..d9cf497
--- /dev/null
+++ b/docs/components/modules/languages/pages/jsonpath-language.adoc
@@ -0,0 +1,341 @@
+[[jsonpath-language]]
+= JsonPath Language
+:page-source: components/camel-jsonpath/src/main/docs/jsonpath-language.adoc
+
+*Since Camel 2.13*
+
+Camel supports https://code.google.com/p/json-path/[JSonPath] to allow
+using Expression or Predicate
+on json messages.
+
+[source,java]
+-----------------------------------------------------
+from("queue:books.new")
+  .choice()
+    .when().jsonpath("$.store.book[?(@.price < 10)]")
+      .to("jms:queue:book.cheap")
+    .when().jsonpath("$.store.book[?(@.price < 30)]")
+      .to("jms:queue:book.average")
+    .otherwise()
+      .to("jms:queue:book.expensive")
+-----------------------------------------------------
+
+== JSonPath Options
+
+
+// language options: START
+The JsonPath language supports 7 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| resultType |  | String | Sets the class name of the result type (type from output)
+| suppressExceptions | false | Boolean | Whether to suppress exceptions such as PathNotFoundException.
+| allowSimple | true | Boolean | Whether to allow in inlined simple exceptions in the JsonPath expression
+| allowEasyPredicate | true | Boolean | Whether to allow using the easy predicate parser to pre-parse predicates.
+| writeAsString | false | Boolean | Whether to write the output of each row/element as a JSON String value instead of a Map/POJO value.
+| headerName |  | String | Name of header to use as input, instead of the message body
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+
+
+== Using XML configuration
+
+If you prefer to configure your routes in your Spring
+XML file then you can use xref:jsonpath-language.adoc[JSonPath] expressions as
+follows
+
+[source,xml]
+----
+<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+  <route>
+    <from uri="direct:start"/>
+    <choice>
+      <when>
+        <jsonpath>$.store.book[?(@.price &lt; 10)]</jsonpath>
+        <to uri="mock:cheap"/>
+      </when>
+      <when>
+        <jsonpath>$.store.book[?(@.price &lt; 30)]</jsonpath>
+        <to uri="mock:average"/>
+      </when>
+      <otherwise>
+        <to uri="mock:expensive"/>
+      </otherwise>
+    </choice>
+  </route>
+</camelContext>
+----
+
+== Syntax
+
+See the https://code.google.com/p/json-path/[JSonPath] project page for
+further examples.
+
+== Easy Syntax
+
+*Since Camel 2.19*
+
+When you just want to define a basic predicate using jsonpath syntax it can be a bit hard to remember the syntax.
+ So for example to find out all the cheap books you have to do
+
+----
+$.store.book[?(@.price < 20)]
+----
+
+However what if you could just write it as
+
+----
+store.book.price < 20
+----
+
+And you can omit the path if you just want to look at nodes with a price key
+
+----
+price < 20
+----
+
+To support this there is a `EasyPredicateParser` which kicks-in if you have define the predicate
+  using a basic style. That means the predicate must not start with the `$` sign, and only include one operator.
+
+The easy syntax is:
+
+----
+left OP right
+----
+
+You can use Camel simple language in the right operator, eg
+
+----
+store.book.price < ${header.limit}
+----
+
+== Supported message body types
+
+Camel JSonPath supports message body using the following types:
+
+[width="100%",cols="3m,7",options="header"]
+|===
+| Type | Comment
+| File | Reading from files
+| String | Plain strings
+| Map | Message bodies as `java.util.Map` types
+| List | Message bodies as `java.util.List` types
+| POJO | *Optional* If Jackson is on the classpath, then camel-jsonpath
+  is able to use Jackson to read the message body as POJO and convert to `java.util.Map`
+  which is supported by JSonPath. For example you can add `camel-jackson` as dependency to include Jackson.
+| InputStream | If none of the above types matches, then Camel will attempt to read the message body as an `java.io.InputStream`.
+|===
+
+If a message body is of unsupported type then an exception is thrown by default, however you
+can configure JSonPath to suppress exceptions (see below)
+
+
+== Suppress exceptions
+
+*Since Camel 2.16*
+
+By default jsonpath will throw an exception if the json payload does not
+have a valid path accordingly to the configured jsonpath expression. In
+some use-cases you may want to ignore this in case the json payload
+contains optional data. Therefore you can set the option
+suppressExceptions to true to ignore this as shown:
+
+[source,java]
+----
+from("direct:start")
+    .choice()
+        // use true to suppress exceptions
+        .when().jsonpath("person.middlename", true)
+            .to("mock:middle")
+        .otherwise()
+            .to("mock:other");
+----
+
+And in XML DSL:
+
+[source,xml]
+----
+<route>
+  <from uri="direct:start"/>
+  <choice>
+    <when>
+      <jsonpath suppressExceptions="true">person.middlename</jsonpath>
+      <to uri="mock:middle"/>
+    </when>
+    <otherwise>
+      <to uri="mock:other"/>
+    </otherwise>
+  </choice>
+</route>
+----
+
+This option is also available on the `@JsonPath` annotation.
+
+== Inline Simple exceptions
+
+*Since Camel 2.18*
+
+Its now possible to inlined Simple language expressions in the JSonPath expression using the simple syntax $\{xxx\}.
+An example is shown below:
+
+[source,java]
+----
+from("direct:start")
+  .choice()
+    .when().jsonpath("$.store.book[?(@.price < ${header.cheap})]")
+      .to("mock:cheap")
+    .when().jsonpath("$.store.book[?(@.price < ${header.average})]")
+      .to("mock:average")
+    .otherwise()
+      .to("mock:expensive");
+----
+
+And in XML DSL:
+
+[source,xml]
+----
+<route>
+  <from uri="direct:start"/>
+  <choice>
+    <when>
+      <jsonpath>$.store.book[?(@.price < ${header.cheap})]</jsonpath>
+      <to uri="mock:cheap"/>
+    </when>
+    <when>
+      <jsonpath>$.store.book[?(@.price < ${header.average})]</jsonpath>
+      <to uri="mock:average"/>
+    </when>
+    <otherwise>
+      <to uri="mock:expensive"/>
+    </otherwise>
+  </choice>
+</route>
+----
+
+You can turn off support for inlined simple expression by setting the option allowSimple to false as shown:
+
+[source,java]
+----
+.when().jsonpath("$.store.book[?(@.price < 10)]", false, false)
+----
+
+And in XML DSL:
+
+[source,xml]
+----
+<jsonpath allowSimple="false">$.store.book[?(@.price < 10)]</jsonpath>
+----
+
+== JSonPath injection
+
+You can use Bean Integration to invoke a
+method on a bean and use various languages such as JSonPath to extract a
+value from the message and bind it to a method parameter.
+
+For example
+
+[source,java]
+----
+public class Foo {
+    
+    @Consume("activemq:queue:books.new")
+    public void doSomething(@JsonPath("$.store.book[*].author") String author, @Body String json) {
+      // process the inbound message here
+    }
+}
+----
+
+== Encoding Detection
+
+The encoding of the JSON document is
+detected automatically, if the document is encoded in unicode  (UTF-8,
+UTF-16LE, UTF-16BE, UTF-32LE, UTF-32BE ) as specified in  RFC-4627. If
+the encoding is a non-unicode encoding, you can either make sure that
+you enter the document in String format to the JSONPath component or you
+can specify the encoding in the header "*CamelJsonPathJsonEncoding*"
+(JsonpathConstants.HEADER_JSON_ENCODING).
+
+== Split JSon data into sub rows as JSon
+
+You can use jsonpath to split a JSon document, such as:
+
+[source,java]
+----
+from("direct:start")
+    .split().jsonpath("$.store.book[*]")
+    .to("log:book");
+----
+
+Then each book is logged, however the message body is a `Map` instance. Sometimes
+you may want to output this as plain String JSon value instead, which can be done
+with the `writeAsString` option as shown:
+
+[source,java]
+----
+from("direct:start")
+    .split().jsonpathWriteAsString("$.store.book[*]")
+    .to("log:book");
+----
+
+Then each book is logged as a String JSon value. For earlier versions of Camel you
+would need to use camel-jackson dataformat and marshal the message body to make it
+convert the message body from `Map` to a `String` type.
+
+== Using header as input
+*Since Camel 2.20*
+
+By default jsonpath uses the message body as the input source. However you can also use a header as input
+by specifying the `headerName` option.
+
+For example to count the number of books from a json document that
+was stored in a header named `books` you can do:
+
+[source,java]
+----
+from("direct:start")
+    .setHeader("numberOfBooks")
+        .jsonpath("$..store.book.length()", false, int.class, "books")
+    .to("mock:result");
+----
+
+In the `jsonpath` expression above we specify the name of the header as `books`
+and we also told that we wanted the result to be converted as an integer by `int.class`.
+
+The same example in XML DSL would be:
+
+[source,xml]
+----
+<route>
+  <from uri="direct:start"/>
+  <setHeader name="numberOfBooks">
+    <jsonpath headerName="books" resultType="int">$..store.book.length()</jsonpath>
+  </transform>
+  <to uri="mock:result"/>
+</route>
+----
+
+== Dependencies
+
+To use JSonPath in your camel routes you need to add the a dependency on
+*camel-jsonpath* which implements the JSonPath language.
+
+If you use maven you could just add the following to your pom.xml,
+substituting the version number for the latest & greatest release (see
+the download page for the latest versions).
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-jsonpath</artifactId>
+  <version>x.x.x</version>
+</dependency>
+----
+
+include::camel-spring-boot::page$jsonpath-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/mvel-language.adoc b/docs/components/modules/languages/pages/mvel-language.adoc
new file mode 100644
index 0000000..642668e
--- /dev/null
+++ b/docs/components/modules/languages/pages/mvel-language.adoc
@@ -0,0 +1,124 @@
+[[mvel-language]]
+= MVEL Language
+:page-source: components/camel-mvel/src/main/docs/mvel-language.adoc
+
+*Since Camel 2.0*
+
+Camel allows Mvel to be used as an Expression or
+Predicate the DSL or
+Xml Configuration.
+
+You could use Mvel to create an Predicate in a
+Message Filter or as an
+Expression for a
+Recipient List
+
+You can use Mvel dot notation to invoke operations. If you for instance
+have a body that contains a POJO that has a `getFamiliyName` method then
+you can construct the syntax as follows:
+
+[source,java]
+----------------------------------------
+"request.body.familyName"
+   // or 
+"getRequest().getBody().getFamilyName()"
+----------------------------------------
+
+== Mvel Options
+
+// language options: START
+The MVEL language supports 1 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+== Variables
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Variable |Type |Description
+
+|*this* |Exchange |the Exchange is the root object
+
+|exchange |Exchange |the Exchange object
+
+|exception |Throwable |the Exchange exception (if any)
+
+|exchangeId |String |the exchange id
+
+|fault |Message |the Fault message (if any)
+
+|request |Message |the exchange.in message
+
+|response |Message |the exchange.out message (if any)
+
+|properties |Map |the exchange properties
+
+|property(name) |Object |the property by the given name
+
+|property(name, type) |Type |the property by the given name as the given type
+|=======================================================================
+
+== Samples
+
+For example you could use Mvel inside a xref:manual:eips:filter-eip.adoc[Message
+Filter] in XML
+
+[source,java]
+---------------------------------------------
+<route>
+  <from uri="seda:foo"/>
+  <filter>
+    <mvel>request.headers.foo == 'bar'</mvel>
+    <to uri="seda:bar"/>
+  </filter>
+</route>
+---------------------------------------------
+
+And the sample using Java DSL:
+
+[source,java]
+---------------------------------------------------------------------------------
+   from("seda:foo").filter().mvel("request.headers.foo == 'bar'").to("seda:bar");
+---------------------------------------------------------------------------------
+
+== Loading script from external resource
+
+*Since Camel 2.11*
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+-------------------------------------------------------------
+.setHeader("myHeader").mvel("resource:classpath:script.mvel")
+-------------------------------------------------------------
+
+== Dependencies
+
+To use Mvel in your camel routes you need to add the a dependency on
+*camel-mvel* which implements the Mvel language.
+
+If you use maven you could just add the following to your pom.xml,
+substituting the version number for the latest & greatest release (see
+the download page for the latest versions).
+
+[source,java]
+-------------------------------------
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-mvel</artifactId>
+  <version>x.x.x</version>
+</dependency>
+-------------------------------------
+
+include::camel-spring-boot::page$mvel-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/ognl-language.adoc b/docs/components/modules/languages/pages/ognl-language.adoc
new file mode 100644
index 0000000..30d9ba7
--- /dev/null
+++ b/docs/components/modules/languages/pages/ognl-language.adoc
@@ -0,0 +1,131 @@
+[[ognl-language]]
+= OGNL Language
+:page-source: components/camel-ognl/src/main/docs/ognl-language.adoc
+
+*Since Camel 1.1*
+
+Camel allows http://commons.apache.org/proper/commons-ognl/[OGNL] to be
+used as an Expression or
+Predicate the DSL or
+Xml Configuration.
+
+You could use OGNL to create an Predicate in a
+Message Filter or as an
+Expression for a
+Recipient List
+
+You can use OGNL dot notation to invoke operations. If you for instance
+have a body that contains a POJO that has a `getFamilyName` method then
+you can construct the syntax as follows:
+
+[source,java]
+----------------------------------------
+"request.body.familyName"
+   // or 
+"getRequest().getBody().getFamilyName()"
+----------------------------------------
+
+== OGNL Options
+
+
+// language options: START
+The OGNL language supports 1 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+
+
+== Variables
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Variable |Type |Description
+
+|*this* |Exchange |the Exchange is the root object
+
+|exchange |Exchange |the Exchange object
+
+|exception |Throwable |the Exchange exception (if any)
+
+|exchangeId |String |the exchange id
+
+|fault |Message |the Fault message (if any)
+
+|request |Message |the exchange.in message
+
+|response |Message |the exchange.out message (if any)
+
+|properties |Map |the exchange properties
+
+|property(name) |Object |the property by the given name
+
+|property(name, type) |Type |the property by the given name as the given type
+|=======================================================================
+
+== Samples
+
+For example you could use OGNL inside a xref:manual:eips:filter-eip.adoc[Message
+Filter] in XML
+
+[source,java]
+---------------------------------------------
+<route>
+  <from uri="seda:foo"/>
+  <filter>
+    <ognl>request.headers.foo == 'bar'</ognl>
+    <to uri="seda:bar"/>
+  </filter>
+</route>
+---------------------------------------------
+
+And the sample using Java DSL:
+
+[source,java]
+---------------------------------------------------------------------------------
+   from("seda:foo").filter().ognl("request.headers.foo == 'bar'").to("seda:bar");
+---------------------------------------------------------------------------------
+
+== Loading script from external resource
+
+*Since Camel 2.11*
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+------------------------------------------------------------
+.setHeader("myHeader").ognl("resource:classpath:myognl.txt")
+------------------------------------------------------------
+
+== Dependencies
+
+To use OGNL in your camel routes you need to add the a dependency on
+*camel-ognl* which implements the OGNL language.
+
+If you use maven you could just add the following to your pom.xml,
+substituting the version number for the latest & greatest release (see
+the download page for the latest versions).
+
+[source,java]
+-------------------------------------
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-ognl</artifactId>
+  <version>x.x.x</version>
+</dependency>
+-------------------------------------
+
+Otherwise, you'll also need
+https://repo1.maven.org/maven2/org/apache/servicemix/bundles/org.apache.servicemix.bundles.ognl/2.7.3_4/org.apache.servicemix.bundles.ognl-2.7.3_4.jar[OGNL]
+
+include::camel-spring-boot::page$ognl-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/spel-language.adoc b/docs/components/modules/languages/pages/spel-language.adoc
new file mode 100644
index 0000000..f677b61
--- /dev/null
+++ b/docs/components/modules/languages/pages/spel-language.adoc
@@ -0,0 +1,161 @@
+[[spel-language]]
+= SpEL Language
+:page-source: components/camel-spring/src/main/docs/spel-language.adoc
+
+*Since Camel 2.7*
+
+Camel allows
+https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions[Spring Expression Language (SpEL)]
+to be used as an Expression or Predicate in the DSL or XML Configuration.
+
+[NOTE]
+====
+It is recommended to use SpEL in Spring runtimes. However, you can
+use SpEL in other runtimes (there may be functionality SpEL cannot do when not running in a Spring runtime)
+====
+
+== Variables
+
+The following variables are available in expressions and predicates written in SpEL:
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|===
+|Variable |Type |Description
+
+|this |Exchange |the Exchange is the root object
+
+|exchange |Exchange |the Exchange object
+
+|exception |Throwable |the Exchange exception (if any)
+
+|exchangeId |String |the exchange id
+
+|fault |Message |the Fault message (if any)
+
+|body |Object | The IN message body.
+
+|request |Message |the exchange.in message
+
+|response |Message |the exchange.out message (if any)
+
+|properties |Map |the exchange properties
+
+|property(name) |Object |the property by the given name
+
+|property(name, type) |Type |the property by the given name as the given type
+|===
+
+== Options
+
+// language options: START
+The SpEL language supports 1 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+== Samples
+
+=== Expression templating
+
+SpEL expressions need to be surrounded by `#{` `}` delimiters since
+expression templating is enabled. This allows you to combine SpEL
+expressions with regular text and use this as extremely lightweight
+template language.
+
+For example if you construct the following route:
+
+[source,java]
+----
+from("direct:example")
+    .setBody(spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}"))
+    .to("mock:result");
+----
+
+In the route above, notice spel is a static method which we need to
+import from `org.apache.camel.language.spel.SpelExpression.spel`, as we
+use spel as an Expression passed in as a parameter
+to the `setBody` method. Though if we use the fluent API we can do this
+instead:
+
+[source,java]
+----
+from("direct:example")
+    .setBody().spel("Hello #{request.body}! What a beautiful #{request.headers['dayOrNight']}")
+    .to("mock:result");
+----
+
+Notice we now use the `spel` method from the `setBody()` method. And
+this does not require us to static import the spel method from
+`org.apache.camel.language.spel.SpelExpression.spel`.
+
+And sent a message with the string "World" in the body, and a header
+"dayOrNight" with value "day":
+
+[source,java]
+----
+template.sendBodyAndHeader("direct:example", "World", "dayOrNight", "day");
+----
+
+The output on `mock:result` will be _"Hello World! What a beautiful
+day"_
+
+=== Bean integration
+
+You can reference beans defined in the Registry
+(most likely an `ApplicationContext`) in your SpEL expressions. For
+example if you have a bean named "foo" in your `ApplicationContext` you
+can invoke the "bar" method on this bean like this:
+
+[source,text]
+----
+#{@foo.bar == 'xyz'}
+----
+
+=== SpEL in enterprise integration patterns
+
+You can use SpEL as an expression for xref:manual:eips:recipientList-eip.adoc[Recipient
+List] or as a predicate inside a xref:manual:eips:filter-eip.adoc[Message
+Filter]:
+
+[source,xml]
+----
+<route>
+  <from uri="direct:foo"/>
+  <filter>
+    <spel>#{request.headers.foo == 'bar'}</spel>
+    <to uri="direct:bar"/>
+  </filter>
+</route>
+----
+
+And the equivalent in Java DSL:
+
+[source,java]
+----
+from("direct:foo")
+    .filter().spel("#{request.headers.foo == 'bar'}")
+    .to("direct:bar");
+----
+
+== Loading script from external resource
+
+*Since Camel 2.11*
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+----
+.setHeader("myHeader").spel("resource:classpath:myspel.txt")
+----
+
+
+include::camel-spring-boot::page$spring-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/xpath-language.adoc b/docs/components/modules/languages/pages/xpath-language.adoc
new file mode 100644
index 0000000..615c6da
--- /dev/null
+++ b/docs/components/modules/languages/pages/xpath-language.adoc
@@ -0,0 +1,496 @@
+[[xpath-language]]
+= XPath Language
+:page-source: components/camel-xpath/src/main/docs/xpath-language.adoc
+
+*Since Camel 1.1*
+
+Camel supports http://www.w3.org/TR/xpath[XPath] to allow an
+Expression or Predicate to be
+used in the DSL or xref:manual::xml-configuration.adoc[Xml
+Configuration]. For example you could use XPath to create an
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
+Filter] or as an Expression for a
+Recipient List.
+
+*Streams*
+
+If the message body is stream based, which means the input it receives
+is submitted to Camel as a stream. That means you will only be able to
+read the content of the stream *once*. So often when you use
+xref:xpath-language.adoc[XPath] as xref:xpath-language.adoc[Message Filter] or
+Content Based Router then you need to
+access the data multiple times, and you should use
+Stream Caching or convert the message body to
+a `String` prior which is safe to be re-read multiple times.
+
+[source,java]
+----
+from("queue:foo").
+  filter().xpath("//foo")).
+  to("queue:bar")
+----
+
+[source,java]
+----
+from("queue:foo").
+  choice().xpath("//foo")).to("queue:bar").
+  otherwise().to("queue:others");
+----
+
+== XPath Language options
+
+// language options: START
+The XPath language supports 9 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| documentType |  | String | Name of class for document type The default value is org.w3c.dom.Document
+| resultType | NODESET | String | Sets the class name of the result type (type from output) The default result type is NodeSet
+| saxon | false | Boolean | Whether to use Saxon.
+| factoryRef |  | String | References to a custom XPathFactory to lookup in the registry
+| objectModel |  | String | The XPath object model to use
+| logNamespaces | false | Boolean | Whether to log namespaces which can assist during trouble shooting
+| headerName |  | String | Name of header to use as input, instead of the message body
+| threadSafety | false | Boolean | Whether to enable thread-safety for the returned result of the xpath expression. This applies to when using NODESET as the result type, and the returned set has multiple elements. In this situation there can be thread-safety issues if you process the NODESET concurrently such as from a Camel Splitter EIP in parallel processing mode. This option prevents concurrency issues by doing defensive copies of the nodes. It is recommended to turn this option on i [...]
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+
+== Namespaces
+
+You can easily use namespaces with XPath expressions using the
+Namespaces helper class.
+
+== Variables
+
+Variables in XPath is defined in different namespaces. The default
+namespace is `\http://camel.apache.org/schema/spring`.
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|===
+|Namespace URI |Local part |Type |Description
+
+|http://camel.apache.org/xml/in/[http://camel.apache.org/xml/in/] |in |Message |the exchange.in message
+
+|http://camel.apache.org/xml/out/[http://camel.apache.org/xml/out/] |out |Message |the exchange.out message
+
+|http://camel.apache.org/xml/function/[http://camel.apache.org/xml/function/] |functions |Object |Additional functions
+
+|http://camel.apache.org/xml/variables/environment-variables[http://camel.apache.org/xml/variables/environment-variables] |env |Object |OS environment variables
+
+|http://camel.apache.org/xml/variables/system-properties[http://camel.apache.org/xml/variables/system-properties] |system |Object |Java System properties
+
+|http://camel.apache.org/xml/variables/exchange-property[http://camel.apache.org/xml/variables/exchange-property] |  | Object |the exchange property
+|===
+
+Camel will resolve variables according to either:
+
+* namespace given
+* no namespace given
+
+=== Namespace given
+
+If the namespace is given then Camel is instructed exactly what to
+return. However when resolving either *in* or *out* Camel will try to
+resolve a header with the given local part first, and return it. If the
+local part has the value *body* then the body is returned instead.
+
+=== No namespace given
+
+If there is no namespace given then Camel resolves only based on the
+local part. Camel will try to resolve a variable in the following steps:
+
+* from `variables` that has been set using the `variable(name, value)`
+fluent builder
+* from message.in.header if there is a header with the given key
+* from exchange.properties if there is a property with the given key
+
+== Functions
+
+Camel adds the following XPath functions that can be used to access the
+exchange:
+
+[width="100%",cols="10%,10%,10%,70%",options="header",]
+|===
+|Function |Argument |Type |Description
+
+|in:body |none |Object |Will return the *in* message body.
+
+|in:header |the header name |Object |Will return the *in* message header.
+
+|out:body |none |Object |Will return the *out* message body.
+
+|out:header |the header name |Object |Will return the *out* message header.
+
+|function:properties |key for property |String |To lookup a property using the
+xref:ROOT:properties-component.adoc[Properties] component (property placeholders).
+
+|function:simple |simple expression |Object |To evaluate a xref:simple-language.adoc[Simple] expression.
+|===
+
+CAUTION: `function:properties` and `function:simple` is not supported
+when the return type is a `NodeSet`, such as when using with a
+Splitter EIP.
+
+Here's an example showing some of these functions in use.
+
+== Using XML configuration
+
+If you prefer to configure your routes in your Spring
+XML file then you can use XPath expressions as follows
+
+[source,xml]
+----
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring" xmlns:foo="http://example.com/person">
+    <route>
+      <from uri="activemq:MyQueue"/>
+      <filter>
+        <xpath>/foo:person[@name='James']</xpath>
+        <to uri="mqseries:SomeOtherQueue"/>
+      </filter>
+    </route>
+  </camelContext>
+</beans>
+----
+
+Notice how we can reuse the namespace prefixes, *foo* in this case, in
+the XPath expression for easier namespace based XPath expressions!
+
+See also this
+http://camel.465427.n5.nabble.com/fail-filter-XPATH-camel-td476424.html[discussion
+on the mailinglist] about using your own namespaces with xpath
+
+== Setting result type
+
+The xref:xpath-language.adoc[XPath] expression will return a result type using
+native XML objects such as `org.w3c.dom.NodeList`. But many times you
+want a result type to be a String. To do this you have to instruct the
+xref:xpath-language.adoc[XPath] which result type to use.
+
+In Java DSL:
+
+[source,java]
+----
+xpath("/foo:person/@id", String.class)
+----
+
+In Spring DSL you use the *resultType* attribute to provide a fully
+qualified classname:
+
+[source,xml]
+----
+<xpath resultType="java.lang.String">/foo:person/@id</xpath>
+----
+
+In @XPath: +
+ *Since Camel 2.1*
+
+[source,java]
+----
+@XPath(value = "concat('foo-',//order/name/)", resultType = String.class) String name)
+----
+
+Where we use the xpath function concat to prefix the order name with
+`foo-`. In this case we have to specify that we want a String as result
+type so the concat function works.
+
+== Using XPath on Headers
+
+*Since Camel 2.11*
+
+Some users may have XML stored in a header. To apply an XPath to a
+header's value you can do this by defining the 'headerName' attribute.
+
+And in Java DSL you specify the headerName as the 2nd parameter as
+shown:
+
+[source,java]
+----
+  xpath("/invoice/@orderType = 'premium'", "invoiceDetails")
+----
+
+== Examples
+
+Here is a simple
+https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/processor/XPathFilterTest.java[example]
+using an XPath expression as a predicate in a
+Message Filter
+
+If you have a standard set of namespaces you wish to work with and wish
+to share them across many different XPath expressions you can use the
+NamespaceBuilder as shown
+https://github.com/apache/camel/blob/master/camel-core/src/test/java/org/apache/camel/processor/XPathWithNamespaceBuilderFilterTest.java[in
+this example]
+
+In this sample we have a choice construct. The first choice evaulates if
+the message has a header key *type* that has the value *Camel*. +
+ The 2nd choice evaluates if the message body has a name tag *<name>*
+which values is *Kong*. +
+ If neither is true the message is routed in the otherwise block:
+
+And the spring XML equivalent of the route:
+
+== XPath injection
+
+You can use Bean Integration to invoke a
+method on a bean and use various languages such as XPath to extract a
+value from the message and bind it to a method parameter.
+
+The default XPath annotation has SOAP and XML namespaces available. If
+you want to use your own namespace URIs in an XPath expression you can
+use your own copy of the
+https://www.javadoc.io/doc/org.apache.camel/camel-xpath/current/org/apache/camel/language/xpath/XPath.html[XPath
+annotation] to create whatever namespace prefixes you want to use.
+
+i.e. cut and paste upper code to your own project in a different package
+and/or annotation name then add whatever namespace prefix/uris you want
+in scope when you use your annotation on a method parameter. Then when
+you use your annotation on a method parameter all the namespaces you
+want will be available for use in your XPath expression.
+
+For example
+
+[source,java]
+----
+public class Foo {
+    
+    @MessageDriven(uri = "activemq:my.queue")
+    public void doSomething(@MyXPath("/ns1:foo/ns2:bar/text()") String correlationID, @Body String body) {
+        // process the inbound message here
+    }
+}
+----
+
+== Using XPathBuilder without an Exchange
+
+*Since Camel 2.3*
+
+You can now use the `org.apache.camel.builder.XPathBuilder` without the
+need for an Exchange. This comes handy if you want
+to use it as a helper to do custom xpath evaluations.
+
+It requires that you pass in a CamelContext
+since a lot of the moving parts inside the XPathBuilder requires access
+to the Camel Type Converter and hence why
+CamelContext is needed.
+
+For example you can do something like this:
+
+[source,java]
+----
+boolean matches = XPathBuilder.xpath("/foo/bar/@xyz").matches(context, "<foo><bar xyz='cheese'/></foo>"));
+----
+
+This will match the given predicate.
+
+You can also evaluate for example as shown in the following three
+examples:
+
+[source,java]
+----
+String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>", String.class);
+Integer number = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>123</bar></foo>", Integer.class);
+Boolean bool = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>true</bar></foo>", Boolean.class);
+----
+
+Evaluating with a String result is a common requirement and thus you can
+do it a bit simpler:
+
+[source,java]
+----
+String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>");
+----
+
+== Using Saxon with XPathBuilder
+
+*Since Camel 2.3*
+
+You need to add *camel-saxon* as dependency to your project.
+
+Its now easier to use http://saxon.sourceforge.net/[Saxon] with the
+XPathBuilder which can be done in several ways as shown below. +
+ Where as the latter ones are the easiest ones.
+
+* Using a factory
+* Using ObjectModel
+
+The easy one
+
+== Setting a custom XPathFactory using System Property
+
+*Since Camel 2.3*
+
+Camel now supports reading the
+http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/XPathFactory.html#newInstance(java.lang.String)[JVM
+system property `javax.xml.xpath.XPathFactory`] that can be used to set
+a custom XPathFactory to use.
+
+This unit test shows how this can be done to use Saxon instead:
+
+Camel will log at `INFO` level if it uses a non default XPathFactory
+such as:
+
+[source]
+----
+XPathBuilder  INFO  Using system property javax.xml.xpath.XPathFactory:http://saxon.sf.net/jaxp/xpath/om with value:
+                    net.sf.saxon.xpath.XPathFactoryImpl when creating XPathFactory
+----
+
+To use Apache Xerces you can configure the system property
+
+[source]
+----
+-Djavax.xml.xpath.XPathFactory=org.apache.xpath.jaxp.XPathFactoryImpl
+----
+
+== Enabling Saxon from Spring DSL
+
+*Since Camel 2.10*
+
+Similarly to Java DSL, to enable Saxon from Spring DSL you have three
+options:
+
+Specifying the factory
+
+[source,xml]
+----
+<xpath factoryRef="saxonFactory" resultType="java.lang.String">current-dateTime()</xpath>
+----
+
+Specifying the object model
+
+[source,xml]
+----
+<xpath objectModel="http://saxon.sf.net/jaxp/xpath/om" resultType="java.lang.String">current-dateTime()</xpath>
+----
+
+Shortcut
+
+[source,xml]
+----
+<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>
+----
+
+== Namespace auditing to aid debugging
+
+*Since Camel 2.10*
+
+A large number of XPath-related issues that users frequently face are
+linked to the usage of namespaces. You may have some misalignment
+between the namespaces present in your message and those that your XPath
+expression is aware of or referencing. XPath predicates or expressions
+that are unable to locate the XML elements and attributes due to
+namespaces issues may simply look like "they are not working", when in
+reality all there is to it is a lack of namespace definition.
+
+Namespaces in XML are completely necessary, and while we would love to
+simplify their usage by implementing some magic or voodoo to wire
+namespaces automatically, truth is that any action down this path would
+disagree with the standards and would greatly hinder interoperability.
+
+Therefore, the utmost we can do is assist you in debugging such issues
+by adding two new features to the XPath Expression Language and are thus
+accesible from both predicates and expressions.
+
+#=== Logging the Namespace Context of your XPath expression/predicate
+
+Every time a new XPath expression is created in the internal pool, Camel
+will log the namespace context of the expression under the
+`org.apache.camel.builder.xml.XPathBuilder` logger. Since Camel
+represents Namespace Contexts in a hierarchical fashion (parent-child
+relationships), the entire tree is output in a recursive manner with the
+following format:
+
+[source]
+----
+[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]
+----
+
+Any of these options can be used to activate this logging:
+
+1.  Enable TRACE logging on the
+`org.apache.camel.builder.xml.XPathBuilder` logger, or some parent
+logger such as `org.apache.camel` or the root logger
+2.  Enable the `logNamespaces` option as indicated in
+xref:xpath-language.adoc[Auditing Namespaces], in which case the logging will
+occur on the INFO level
+
+== Auditing namespaces
+
+Camel is able to discover and dump all namespaces present on every
+incoming message before evaluating an XPath expression, providing all
+the richness of information you need to help you analyse and pinpoint
+possible namespace issues.
+
+To achieve this, it in turn internally uses another specially tailored
+XPath expression to extract all namespace mappings that appear in the
+message, displaying the prefix and the full namespace URI(s) for each
+individual mapping.
+
+Some points to take into account:
+
+* The implicit XML namespace
+(xmlns:xml="http://www.w3.org/XML/1998/namespace") is suppressed from
+the output because it adds no value
+* Default namespaces are listed under the DEFAULT keyword in the output
+* Keep in mind that namespaces can be remapped under different scopes.
+Think of a top-level 'a' prefix which in inner elements can be assigned
+a different namespace, or the default namespace changing in inner
+scopes. For each discovered prefix, all associated URIs are listed.
+
+You can enable this option in Java DSL and Spring DSL.
+
+Java DSL:
+
+[source,java]
+----
+XPathBuilder.xpath("/foo:person/@id", String.class).logNamespaces()
+----
+
+Spring DSL:
+
+[source,xml]
+----
+<xpath logNamespaces="true" resultType="String">/foo:person/@id</xpath>
+----
+
+The result of the auditing will be appear at the INFO level under the
+`org.apache.camel.builder.xml.XPathBuilder` logger and will look like
+the following:
+
+[source]
+----
+2012-01-16 13:23:45,878 [stSaxonWithFlag] INFO  XPathBuilder  - Namespaces discovered in message: 
+{xmlns:a=[http://apache.org/camel], DEFAULT=[http://apache.org/default], 
+xmlns:b=[http://apache.org/camelA, http://apache.org/camelB]}
+----
+
+== Loading script from external resource
+
+*Since Camel 2.11*
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+----
+.setHeader("myHeader").xpath("resource:classpath:myxpath.txt", String.class)
+----
+
+== Dependencies
+
+The XPath language is part of camel-core.
+
+include::camel-spring-boot::page$xpath-starter.adoc[]
diff --git a/docs/components/modules/languages/pages/xquery-language.adoc b/docs/components/modules/languages/pages/xquery-language.adoc
new file mode 100644
index 0000000..fd41773
--- /dev/null
+++ b/docs/components/modules/languages/pages/xquery-language.adoc
@@ -0,0 +1,159 @@
+[[xquery-language]]
+= XQuery Language
+:page-source: components/camel-saxon/src/main/docs/xquery-language.adoc
+
+*Since Camel 1.0*
+
+Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
+Expression or Predicate to be
+used in the DSL or xref:manual::xml-configuration.adoc[Xml
+Configuration]. For example you could use XQuery to create an
+Predicate in a xref:manual:eips:filter-eip.adoc[Message
+Filter] or as an Expression for a
+Recipient List.
+
+== XQuery Language options
+
+// language options: START
+The XQuery language supports 3 options, which are listed below.
+
+
+
+[width="100%",cols="2,1m,1m,6",options="header"]
+|===
+| Name | Default | Java Type | Description
+| type |  | String | Sets the class name of the result type (type from output) The default result type is NodeSet
+| headerName |  | String | Name of header to use as input, instead of the message body
+| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
+|===
+// language options: END
+
+== Examples
+
+[source,java]
+---------------------------
+from("queue:foo")
+  .filter().xquery("//foo")
+  .to("queue:bar")
+---------------------------
+
+You can also use functions inside your query, in which case you need an
+explicit type conversion (or you will get a org.w3c.dom.DOMException:
+HIERARCHY_REQUEST_ERR) by passing the Class as a second argument to the
+*xquery()* method.
+
+[source,java]
+-----------------------------------------------------------------------------
+from("direct:start")
+  .recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);
+-----------------------------------------------------------------------------
+
+== Variables
+
+The IN message body will be set as the `contextItem`. Besides this these
+Variables is also added as parameters:
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Variable |Type |Description
+
+|exchange |Exchange |The current Exchange
+
+|in.body |Object |The In message's body
+
+|out.body |Object |The OUT message's body (if any)
+
+|in.headers.* |Object |You can access the value of exchange.in.headers with key *foo* by using
+the variable which name is in.headers.foo
+
+|out.headers.* |Object |You can access the value of exchange.out.headers with key *foo* by using
+the variable which name is out.headers.foo variable
+
+|*key name* |Object |Any exchange.properties and exchange.in.headers and any additional
+parameters set using `setParameters(Map)`. These parameters is added
+with they own key name, for instance if there is an IN header with the
+key name *foo* then its added as *foo*.
+|=======================================================================
+
+== Using XML configuration
+
+If you prefer to configure your routes in your Spring
+XML file then you can use XPath expressions as follows
+
+[source,xml]
+---------------------------------------------------------------------------------------------------------------
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:foo="http://example.com/person"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+  <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
+    <route>
+      <from uri="activemq:MyQueue"/>
+      <filter>
+        <xquery>/foo:person[@name='James']</xquery>
+        <to uri="mqseries:SomeOtherQueue"/>
+      </filter>
+    </route>
+  </camelContext>
+</beans>
+---------------------------------------------------------------------------------------------------------------
+
+Notice how we can reuse the namespace prefixes, *foo* in this case, in
+the XPath expression for easier namespace based XQuery expressions!
+
+When you use functions in your XQuery expression you need an explicit
+type conversion which is done in the xml configuration via the *@type*
+attribute:
+
+[source,xml]
+-------------------------------------------------------------------------------
+    <xquery type="java.lang.String">concat('mock:foo.', /person/@city)</xquery>
+-------------------------------------------------------------------------------
+
+== Learning XQuery
+
+XQuery is a very powerful language for querying, searching, sorting and
+returning XML. For help learning XQuery try these tutorials
+
+* Mike Kay's http://www.stylusstudio.com/xquery_primer.html[XQuery
+Primer]
+* the W3Schools http://www.w3schools.com/xquery/default.asp[XQuery
+Tutorial]
+
+You might also find the http://www.w3.org/TR/xpath-functions/[XQuery
+function reference] useful
+
+== Loading script from external resource
+
+You can externalize the script and have Camel load it from a resource
+such as `"classpath:"`, `"file:"`, or `"http:"`. +
+ This is done using the following syntax: `"resource:scheme:location"`,
+eg to refer to a file on the classpath you can do:
+
+[source,java]
+------------------------------------------------------------------------------
+.setHeader("myHeader").xquery("resource:classpath:myxquery.txt", String.class)
+------------------------------------------------------------------------------
+
+== Dependencies
+
+To use XQuery in your camel routes you need to add the a dependency on
+*camel-saxon* which implements the XQuery language.
+
+If you use maven you could just add the following to your pom.xml,
+substituting the version number for the latest & greatest release (see
+the download page for the latest versions).
+
+[source,java]
+--------------------------------------
+<dependency>
+  <groupId>org.apache.camel</groupId>
+  <artifactId>camel-saxon</artifactId>
+  <version>x.x.x</version>
+</dependency>
+--------------------------------------
+
+include::camel-spring-boot::page$saxon-starter.adoc[]


[camel] 10/18: fix user-manual languages xrefs

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 38244674f3fa0cbacc65d6cd9c83f497e1b919a3
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 12:55:29 2020 -0700

    fix user-manual languages xrefs
---
 core/camel-base/src/main/docs/properties-component.adoc  | 12 ++++++------
 .../modules/ROOT/pages/properties-component.adoc         | 12 ++++++------
 docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc  |  2 +-
 docs/user-manual/modules/ROOT/pages/bean-binding.adoc    | 10 +++++-----
 .../user-manual/modules/ROOT/pages/content-enricher.adoc | 16 ++++++++--------
 .../user-manual/modules/ROOT/pages/exception-clause.adoc |  2 +-
 docs/user-manual/modules/ROOT/pages/expression.adoc      | 10 +++++-----
 docs/user-manual/modules/ROOT/pages/index.adoc           | 14 +++++++-------
 docs/user-manual/modules/ROOT/pages/intercept.adoc       |  2 +-
 docs/user-manual/modules/ROOT/pages/languages.adoc       | 14 +++++++-------
 .../ROOT/pages/parameter-binding-annotations.adoc        |  6 +++---
 docs/user-manual/modules/ROOT/pages/predicate.adoc       | 14 +++++++-------
 .../modules/ROOT/pages/properties-component.adoc         |  8 ++++----
 docs/user-manual/modules/ROOT/pages/rest-dsl.adoc        |  2 +-
 docs/user-manual/modules/ROOT/pages/spring-remoting.adoc | 10 +++++-----
 .../modules/ROOT/pages/using-propertyplaceholder.adoc    | 12 ++++++------
 16 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/core/camel-base/src/main/docs/properties-component.adoc b/core/camel-base/src/main/docs/properties-component.adoc
index 47916c5..b708e32 100644
--- a/core/camel-base/src/main/docs/properties-component.adoc
+++ b/core/camel-base/src/main/docs/properties-component.adoc
@@ -287,9 +287,9 @@ ProducerTemplate for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-== Example with xref:manual::simple-language.adoc[Simple] language
+== Example with xref:manual:languages:simple-language.adoc[Simple] language
 
-The xref:manual::simple-language.adoc[Simple] language now also support using property
+The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -546,7 +546,7 @@ placeholder notation with `{{` and `}}`.
 == Clashing Spring property placeholders with Camels Simple language
 
 Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual::simple-language.adoc[Simple] in Camel, and therefore
+syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -557,7 +557,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual::simple-language.adoc[Simple] language in Camel.
+to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
 
 [source,xml]
 ----
@@ -693,7 +693,7 @@ is a `log:foo` and `log:bar` value.
   </camelContext>
 ----
 
- 
+
 
 The service function is for looking up a service which is defined using
 OS environment variables using the service naming idiom, to refer to a
@@ -808,7 +808,7 @@ To register a custom function from Java code is as shown below:
 PropertiesComponent pc = (org.apache.camel.componennt.properties.PropertiesComponent) context.getPropertiesComponent();
 pc.addFunction(new MyBeerFunction());
 ----
- 
+
 
 == Using 3rd-party properties sources
 
diff --git a/docs/components/modules/ROOT/pages/properties-component.adoc b/docs/components/modules/ROOT/pages/properties-component.adoc
index 17c6486..6850208 100644
--- a/docs/components/modules/ROOT/pages/properties-component.adoc
+++ b/docs/components/modules/ROOT/pages/properties-component.adoc
@@ -288,9 +288,9 @@ ProducerTemplate for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-== Example with xref:manual::simple-language.adoc[Simple] language
+== Example with xref:manual:languages:simple-language.adoc[Simple] language
 
-The xref:manual::simple-language.adoc[Simple] language now also support using property
+The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -547,7 +547,7 @@ placeholder notation with `{{` and `}}`.
 == Clashing Spring property placeholders with Camels Simple language
 
 Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual::simple-language.adoc[Simple] in Camel, and therefore
+syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -558,7 +558,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual::simple-language.adoc[Simple] language in Camel.
+to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
 
 [source,xml]
 ----
@@ -694,7 +694,7 @@ is a `log:foo` and `log:bar` value.
   </camelContext>
 ----
 
- 
+
 
 The service function is for looking up a service which is defined using
 OS environment variables using the service naming idiom, to refer to a
@@ -809,7 +809,7 @@ To register a custom function from Java code is as shown below:
 PropertiesComponent pc = (org.apache.camel.componennt.properties.PropertiesComponent) context.getPropertiesComponent();
 pc.addFunction(new MyBeerFunction());
 ----
- 
+
 
 == Using 3rd-party properties sources
 
diff --git a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
index c59b9ac..5ce541e 100644
--- a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
@@ -56,7 +56,7 @@ do "to*" to match any to. Or use "route-foo*" to match any foo routes.
 
 |traceFilter |`null` |Allow to configure a filter as a xref:predicate.adoc[Predicate] using
 any of the Camel xref:languages.adoc[languages]. But default the
-xref:simple-language.adoc[Simple] language is used. For example to filter on
+xref:languages:simple-language.adoc[Simple] language is used. For example to filter on
 messages with a given header, use `${header.foo} != null`. To use
 xref:components::groovy-language.adoc[Groovy] then prefix the value with "groovy:". And
 similar for the other languages.
diff --git a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
index 6fd955c..0932932 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
@@ -231,9 +231,9 @@ the method option
 * The value is a numeric value such as `123` or `7`
 * The value is a String enclosed with either single or double quotes
 * The value is null which denotes a `null` value
-* It can be evaluated using the xref:simple-language.adoc[Simple] language, which
+* It can be evaluated using the xref:languages:simple-language.adoc[Simple] language, which
 means you can use, e.g., body, header.foo and other
-xref:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
+xref:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
 $\{ }.
 
 Any other value is consider to be a type declaration instead - see the
@@ -276,7 +276,7 @@ body as shown:
 .bean(OrderService.class, "doSomething(${body}, true)") 
 ----
 
-The syntax of the parameters is using the xref:simple-language.adoc[Simple]
+The syntax of the parameters is using the xref:languages:simple-language.adoc[Simple]
 expression language so we have to use $\{ } placeholders in the body to
 refer to the message body.
 
@@ -312,7 +312,7 @@ first has the content 'World' (without quotes), and the 2nd has the
 value of 5.
 Camel will automatically convert these values to the parameters' types.
 
-Having the power of the xref:simple-language.adoc[Simple] language allows us to
+Having the power of the xref:languages:simple-language.adoc[Simple] language allows us to
 bind to message headers and other values such as:
 
 [source,syntaxhighlighter-pre]
@@ -320,7 +320,7 @@ bind to message headers and other values such as:
 .bean(OrderService.class, "doSomething(${body}, ${header.high})") 
 ----
 
-You can also use the OGNL support of the xref:simple-language.adoc[Simple]
+You can also use the OGNL support of the xref:languages:simple-language.adoc[Simple]
 expression language. Now suppose the message body is an object which has
 a method named `asXml`. To invoke the `asXml` method we can do as
 follows:
diff --git a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
index 2c7252d..77fd4d8 100644
--- a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
+++ b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
@@ -135,8 +135,8 @@ confluenceTableSmall
 |`uri` |  |The endpoint uri for the external service to enrich from. You
 must use either `uri` or `ref`. *Important:* From Camel 2.16 onwards,
 this option is removed, and you use an xref:expression.adoc[Expression]
-to configure the uri, such as xref:simple-language.adoc[Simple] or
-xref:constant-language.adoc[Constant] or any other dynamic language that can
+to configure the uri, such as xref:languages:simple-language.adoc[Simple] or
+xref:languages:constant-language.adoc[Constant] or any other dynamic language that can
 compute the uri dynamically using values from the current
 xref:exchange.adoc[Exchange].
 
@@ -144,13 +144,13 @@ xref:exchange.adoc[Exchange].
 from. You must use either `uri` or `ref`.  **Important:** From Camel
 2.16 onwards, this option is removed, and you use an
 xref:expression.adoc[Expression] to configure the uri, such as
-xref:simple-language.adoc[Simple] or xref:constant-language.adoc[Constant] or any other
+xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
 |expression |  |*Camel 2.16:* Mandatory.
 The xref:expression.adoc[Expression] to configure the uri, such as
-xref:simple-language.adoc[Simple] or xref:constant-language.adoc[Constant] or any other
+xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
@@ -348,8 +348,8 @@ polling
 |`uri` |  |The endpoint uri for the external service to enrich from. You
 must use either `uri` or `ref`. **Important:** From Camel 2.16 onwards,
 this option is removed, and you use an xref:expression.adoc[Expression]
-to configure the uri, such as xref:simple-language.adoc[Simple] or
-xref:constant-language.adoc[Constant] or any other dynamic language that can
+to configure the uri, such as xref:languages:simple-language.adoc[Simple] or
+xref:languages:constant-language.adoc[Constant] or any other dynamic language that can
 compute the uri dynamically using values from the current
  xref:exchange.adoc[Exchange].
 
@@ -357,13 +357,13 @@ compute the uri dynamically using values from the current
 from. You must use either `uri` or `ref`. **Important:** From Camel 2.16
 onwards, this option is removed, and you use an
 xref:expression.adoc[Expression] to configure the uri, such as
-xref:simple-language.adoc[Simple] or xref:constant-language.adoc[Constant] or any other
+xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
 |`expression` |  |**Camel 2.16:** Mandatory.
 The xref:expression.adoc[Expression] to configure the uri, such as
-xref:simple-language.adoc[Simple] or xref:constant-language.adoc[Constant] or any other
+xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current xref:exchange.adoc[Exchange].
 
diff --git a/docs/user-manual/modules/ROOT/pages/exception-clause.adoc b/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
index 3c23373..3526fed 100644
--- a/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
+++ b/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
@@ -417,7 +417,7 @@ message instead of the fixed text `Sorry`:
 
 /camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandleAndTransformTest.java
 
-And we can use the xref:simple-language.adoc[Simple] language to set a readable error
+And we can use the xref:languages:simple-language.adoc[Simple] language to set a readable error
 message with the caused exception message:
 
 /camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandleAndTransformTest.java
diff --git a/docs/user-manual/modules/ROOT/pages/expression.adoc b/docs/user-manual/modules/ROOT/pages/expression.adoc
index 61a9cacc7..b0bfc3f 100644
--- a/docs/user-manual/modules/ROOT/pages/expression.adoc
+++ b/docs/user-manual/modules/ROOT/pages/expression.adoc
@@ -69,19 +69,19 @@ public interface Predicate {
 The following languages are supported out of the box
 
 * xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:constant-language.adoc[Constant]
-* xref:header-language.adoc[Header]
+* xref:languages:constant-language.adoc[Constant]
+* xref:languages:header-language.adoc[Header]
 * xref:components::jsonpath-language.adoc[JSonPath]
 * xref:components::mvel-component.adoc[Mvel]
 * xref:components::ognl-language.adoc[OGNL]
-* xref:ref-language.adoc[Ref Language]
+* xref:languages:ref-language.adoc[Ref Language]
 * ExchangeProperty / Property
 * Scripting Languages such as
 ** BeanShell
 ** JavaScript
 ** xref:components::groovy-language.adoc[Groovy]
-* xref:simple-language.adoc[Simple]
-** xref:file-language.adoc[File Language]
+* xref:languages:simple-language.adoc[Simple]
+** xref:languages:file-language.adoc[File Language]
 * xref:components::spel-language.adoc[Spring Expression Language]
 * xref:components::sql-component.adoc[SQL]
 * Tokenizer
diff --git a/docs/user-manual/modules/ROOT/pages/index.adoc b/docs/user-manual/modules/ROOT/pages/index.adoc
index 7e1ff8d..0859151 100644
--- a/docs/user-manual/modules/ROOT/pages/index.adoc
+++ b/docs/user-manual/modules/ROOT/pages/index.adoc
@@ -506,18 +506,18 @@ camel routes without them knowing
 
 * Expression Languages
 ** xref:components::bean-language.adoc[Bean method]
-** xref:constant-language.adoc[Constant]
-** xref:exchangeProperty-language.adoc[ExchangeProperty]
-** xref:file-language.adoc[File]
+** xref:languages:constant-language.adoc[Constant]
+** xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
+** xref:languages:file-language.adoc[File]
 ** xref:components::groovy-language.adoc[Groovy]
-** xref:header-language.adoc[Header]
+** xref:languages:header-language.adoc[Header]
 ** xref:components::hl7terser-language.adoc[HL7 Terser]
 ** xref:components::mvel-language.adoc[MVEL]
 ** xref:components::ognl-language.adoc[OGNL]
-** xref:ref-language.adoc[Ref]
-** xref:simple-language.adoc[Simple]
+** xref:languages:ref-language.adoc[Ref]
+** xref:languages:simple-language.adoc[Simple]
 ** xref:components::spel-language.adoc[SpEL]
-** xref:tokenize-language.adoc[Tokenize]
+** xref:languages:tokenize-language.adoc[Tokenize]
 ** xref:components::xpath-language.adoc[XPath]
 ** xref:components::xquery-language.adoc[XQuery]
 
diff --git a/docs/user-manual/modules/ROOT/pages/intercept.adoc b/docs/user-manual/modules/ROOT/pages/intercept.adoc
index e13fb91..af1926e 100644
--- a/docs/user-manual/modules/ROOT/pages/intercept.adoc
+++ b/docs/user-manual/modules/ROOT/pages/intercept.adoc
@@ -184,7 +184,7 @@ Intercept endpoint is of course also available using Spring DSL.
 
 We start with the first example from above in Spring DSL:
 
-And the 2nd. Notice how we can leverage the xref:simple-language.adoc[Simple]
+And the 2nd. Notice how we can leverage the xref:languages:simple-language.adoc[Simple]
 language for the Predicate:
 
 And the 3rd with the `skip`, notice skip is set with the
diff --git a/docs/user-manual/modules/ROOT/pages/languages.adoc b/docs/user-manual/modules/ROOT/pages/languages.adoc
index 675b26a..fe0466a 100644
--- a/docs/user-manual/modules/ROOT/pages/languages.adoc
+++ b/docs/user-manual/modules/ROOT/pages/languages.adoc
@@ -20,19 +20,19 @@ For more information, see xref:predicate.adoc[Compound Predicates].
 == The following is the list of currently supported languages:
 
 * xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:constant-language.adoc[Constant]
-* xref:header-language.adoc[Header]
+* xref:languages:constant-language.adoc[Constant]
+* xref:languages:header-language.adoc[Header]
 * xref:components::jsonpath-language.adoc[JSonPath]
 * xref:components::mvel-language.adoc[Mvel]
 * xref:components::ognl-language.adoc[OGNL]
-* xref:ref-language.adoc[Ref Language]
-* xref:exchangeProperty-language.adoc[ExchangeProperty]
+* xref:languages:ref-language.adoc[Ref Language]
+* xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
 * xref:scripting-languages.adoc[Scripting Languages] such as:
 ** xref:components::groovy-language.adoc[Groovy]
-* xref:simple-language.adoc[Simple]
-** xref:file-language.adoc[File Language]
+* xref:languages:simple-language.adoc[Simple]
+** xref:languages:file-language.adoc[File Language]
 * xref:components::spel-language.adoc[Spring Expression Language]
-* xref:tokenize-language.adoc[Tokenizer]
+* xref:languages:tokenize-language.adoc[Tokenizer]
 * xref:components::xpath-language.adoc[XPath]
 * xref:components::xquery-language.adoc[XQuery]
 * https://github.com/camel-extra/camel-extra/blob/master/components/camel-vtdxml/src/main/docs/vtdxml-component.adoc[VTD-XML]
diff --git a/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc b/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
index ef958ed..c1f9fd0 100644
--- a/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
+++ b/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
@@ -154,13 +154,13 @@ any of these annotations:
 |Inject a xref:components::bean-language.adoc[Bean] expression
 
 |`org.apache.camel.language.Constant`
-|Inject a xref:constant-language.adoc[Constant] expression
+|Inject a xref:languages:constant-language.adoc[Constant] expression
 
 |`org.apache.camel.builder.script.Groovy`
 |Inject a  xref:components::groovy-language.adoc[Groovy] expression
 
 |`org.apache.camel.Header`
-|Inject a xref:header-language.adoc[Header] expression
+|Inject a xref:languages:header-language.adoc[Header] expression
 
 |`org.apache.camel.language.mvel.MVEL`
 |Inject a xref:components::mvel-language.adoc[MVEL] expression
@@ -169,7 +169,7 @@ any of these annotations:
 |Inject an xref:components::ognl-language.adoc[OGNL] expression
 
 |`org.apache.camel.language.Simple`
-|Inject an xref:simple-language.adoc[Simple] expression
+|Inject an xref:languages:simple-language.adoc[Simple] expression
 
 |`org.apache.camel.language.XPath`
 |Inject an xref:components::xpath-language.adoc[XPath] expression
diff --git a/docs/user-manual/modules/ROOT/pages/predicate.adoc b/docs/user-manual/modules/ROOT/pages/predicate.adoc
index c9ba4cc..50dc481 100644
--- a/docs/user-manual/modules/ROOT/pages/predicate.adoc
+++ b/docs/user-manual/modules/ROOT/pages/predicate.adoc
@@ -153,19 +153,19 @@ xref:languages.adoc[Languages]; the following languages are supported
 out of the box
 
 * xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:constant-language.adoc[Constant]
-* xref:header-language.adoc[Header]
+* xref:languages:constant-language.adoc[Constant]
+* xref:languages:header-language.adoc[Header]
 * xref:components::jsonpath-language.adoc[JSonPath]
 * xref:components::mvel-language.adoc[Mvel]
 * xref:components::ognl-language.adoc[OGNL]
-* xref:ref-language.adoc[Ref Language]
-* xref:exchangeProperty-language.adoc[ExchangeProperty]
+* xref:languages:ref-language.adoc[Ref Language]
+* xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
 * xref:scripting-languages.adoc[Scripting Languages] such as
 ** xref:components::groovy-language.adoc[Groovy]
-* xref:simple-language.adoc[Simple]
-** xref:file-language.adoc[File Language]
+* xref:languages:simple-language.adoc[Simple]
+** xref:languages:file-language.adoc[File Language]
 * xref:components::spel-language.adoc[Spring Expression Language]
-* xref:tokenize-language.adoc[Tokenizer]
+* xref:languages:tokenize-language.adoc[Tokenizer]
 * xref:components::xpath-language.adoc[XPath]
 * xref:components::xquery-language.adoc[XQuery]
 * https://github.com/camel-extra/camel-extra/blob/master/components/camel-vtdxml/src/main/docs/vtdxml-component.adoc[VTD-XML]
diff --git a/docs/user-manual/modules/ROOT/pages/properties-component.adoc b/docs/user-manual/modules/ROOT/pages/properties-component.adoc
index 17c6486..9e1a50f 100644
--- a/docs/user-manual/modules/ROOT/pages/properties-component.adoc
+++ b/docs/user-manual/modules/ROOT/pages/properties-component.adoc
@@ -288,9 +288,9 @@ ProducerTemplate for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-== Example with xref:manual::simple-language.adoc[Simple] language
+== Example with xref:manual:languages:simple-language.adoc[Simple] language
 
-The xref:manual::simple-language.adoc[Simple] language now also support using property
+The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -547,7 +547,7 @@ placeholder notation with `{{` and `}}`.
 == Clashing Spring property placeholders with Camels Simple language
 
 Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual::simple-language.adoc[Simple] in Camel, and therefore
+syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -558,7 +558,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual::simple-language.adoc[Simple] language in Camel.
+to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
 
 [source,xml]
 ----
diff --git a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
index e3117b4..74d5c9f 100644
--- a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
+++ b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
@@ -209,7 +209,7 @@ over xref:components::jms-component.adoc[JMS] where the queue name is dynamic de
 
 See more details at Message Endpoint about
 the dynamic to, and what syntax it supports. By default it uses
-the xref:simple-language.adoc[Simple] language, but it has more power than so.
+the xref:languages:simple-language.adoc[Simple] language, but it has more power than so.
 
 == Embedding Camel routes
 
diff --git a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
index bbb330f..36fe857 100644
--- a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
+++ b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
@@ -351,9 +351,9 @@ the method option
 * The value is a numeric value such as `123` or `7`
 * The value is a String enclosed with either single or double quotes
 * The value is null which denotes a `null` value
-* It can be evaluated using the xref:simple-language.adoc[Simple] language, which
+* It can be evaluated using the xref:languages:simple-language.adoc[Simple] language, which
 means you can use, e.g., body, header.foo and other
-xref:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
+xref:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
 $\{ }.
 
 Any other value is consider to be a type declaration instead - see the
@@ -398,7 +398,7 @@ body as shown:
 .bean(OrderService.class, "doSomething(${body}, true)") 
 ----
 
-The syntax of the parameters is using the xref:simple-language.adoc[Simple]
+The syntax of the parameters is using the xref:languages:simple-language.adoc[Simple]
 expression language so we have to use $\{ } placeholders in the body to
 refer to the message body.
 
@@ -434,7 +434,7 @@ first has the content 'World' (without quotes), and the 2nd has the
 value of 5. +
 Camel will automatically convert these values to the parameters' types.
 
-Having the power of the xref:simple-language.adoc[Simple] language allows us to
+Having the power of the xref:languages:simple-language.adoc[Simple] language allows us to
 bind to message headers and other values such as:
 
 [source,syntaxhighlighter-pre]
@@ -442,7 +442,7 @@ bind to message headers and other values such as:
 .bean(OrderService.class, "doSomething(${body}, ${header.high})") 
 ----
 
-You can also use the OGNL support of the xref:simple-language.adoc[Simple]
+You can also use the OGNL support of the xref:languages:simple-language.adoc[Simple]
 expression language. Now suppose the message body is an object which has
 a method named `asXml`. To invoke the `asXml` method we can do as
 follows:
diff --git a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
index 54cbe8d..98823a8 100644
--- a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
+++ b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
@@ -293,9 +293,9 @@ template.sendBody("{{cool.start}}", "Hello World");
 
 
 [[UsingPropertyPlaceholder-Examplewithlanguage]]
-== Example with xref:simple-language.adoc[Simple] language
+== Example with xref:languages:simple-language.adoc[Simple] language
 
-The xref:simple-language.adoc[Simple] language now also support using property
+The xref:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 
@@ -308,7 +308,7 @@ cheese.quote=Camel rocks
     .transform().simple("Hi ${body} do you think ${properties:cheese.quote}?");
 ----
 
-You can also specify the location in the xref:simple-language.adoc[Simple]
+You can also specify the location in the xref:languages:simple-language.adoc[Simple]
 language for example:
 
 
@@ -822,10 +822,10 @@ the `${}` notation. And in the Camel routes we use the Camel
 placeholder notation with `{{ }}`.
 
 [[UsingPropertyPlaceholder-ClashingSpringPropertyPlaceholderswithCamelsLanguage]]
-== Clashing Spring Property Placeholders with Camels xref:simple-language.adoc[Simple] Language
+== Clashing Spring Property Placeholders with Camels xref:languages:simple-language.adoc[Simple] Language
 
 Take notice when using Spring bridging placeholder then the
-spring `${}` syntax clashes with the xref:simple-language.adoc[Simple] in
+spring `${}` syntax clashes with the xref:languages:simple-language.adoc[Simple] in
 Camel, and therefore take care.
 
 Example:
@@ -838,7 +838,7 @@ Example:
 ----
 
 clashes with Spring property placeholders, and you should
-use `$simple{}` to indicate using the xref:simple-language.adoc[Simple]
+use `$simple{}` to indicate using the xref:languages:simple-language.adoc[Simple]
 language in Camel.
 
 


[camel] 06/18: auto-generated nav change

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 25978bef9e8a4cbef3f2ac49f4dc7cc3378ed43e
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 11:25:21 2020 -0700

    auto-generated nav change
---
 docs/user-manual/modules/ROOT/nav.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/user-manual/modules/ROOT/nav.adoc b/docs/user-manual/modules/ROOT/nav.adoc
index a0df097..799b06c 100644
--- a/docs/user-manual/modules/ROOT/nav.adoc
+++ b/docs/user-manual/modules/ROOT/nav.adoc
@@ -64,7 +64,7 @@
  ** xref:eips:batch-config-eip.adoc[Batch-config EIP]
  ** xref:eips:bean-eip.adoc[Bean EIP]
  ** xref:eips:choice-eip.adoc[Choice EIP]
- ** xref:eips:circuitBreaker-eip.adoc[CircuitBreaker EIP]
+ ** xref:eips:circuitBreaker-eip.adoc[Circuit Breaker EIP]
  ** xref:eips:claimCheck-eip.adoc[Claim Check EIP]
  ** xref:eips:content-based-router-eip.adoc[Content Based Router]
  ** xref:eips:content-filter-eip.adoc[Content Filter]


[camel] 15/18: separate languages nav file

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit c0ed7cf93e8ee570df756708927c7c41e17ac602
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:10:35 2020 -0700

    separate languages nav file
---
 ...plate => component-languages-nav.adoc.template} |  1 +
 docs/component-nav.adoc.template                   |  1 +
 docs/gulpfile.js                                   | 75 ++++++++++++++++++----
 docs/package.json                                  |  1 +
 docs/user-manual-nav.adoc.template                 |  4 +-
 5 files changed, 68 insertions(+), 14 deletions(-)

diff --git a/docs/component-nav.adoc.template b/docs/component-languages-nav.adoc.template
similarity index 87%
copy from docs/component-nav.adoc.template
copy to docs/component-languages-nav.adoc.template
index 169357f..227dc6c 100644
--- a/docs/component-nav.adoc.template
+++ b/docs/component-languages-nav.adoc.template
@@ -1,4 +1,5 @@
 <!-- generated:txt -->
 <!-- endinject -->
+* Languages
 <!-- inject:adoc -->
 <!-- endinject -->
diff --git a/docs/component-nav.adoc.template b/docs/component-nav.adoc.template
index 169357f..133caf3 100644
--- a/docs/component-nav.adoc.template
+++ b/docs/component-nav.adoc.template
@@ -1,4 +1,5 @@
 <!-- generated:txt -->
 <!-- endinject -->
+* Components and Data Formats
 <!-- inject:adoc -->
 <!-- endinject -->
diff --git a/docs/gulpfile.js b/docs/gulpfile.js
index a6f529d..e931d40 100644
--- a/docs/gulpfile.js
+++ b/docs/gulpfile.js
@@ -16,6 +16,7 @@
  */
 const { dest, series, parallel, src, symlink } = require('gulp');
 const del = require('del');
+const filter = require('gulp-filter');
 const inject = require('gulp-inject');
 const map = require('map-stream')
 const path = require('path');
@@ -35,7 +36,9 @@ function deleteComponentImageSymlinks() {
 }
 
 function createComponentSymlinks() {
-    return src(['../core/camel-base/src/main/docs/*.adoc', '../core/camel-core-languages/src/main/docs/*.adoc', '../core/camel-xml-jaxp/src/main/docs/*.adoc', '../components/{*,*/*}/src/main/docs/*.adoc'])
+    const f = filter(['**','!**/*-language.adoc'])
+    return src(['../core/camel-base/src/main/docs/*.adoc','../components/{*,*/*}/src/main/docs/*.adoc'])
+        .pipe(f)
         .pipe(map((file, done) => {
             // this flattens the output to just .../pages/....adoc
             // instead of .../pages/camel-.../src/main/docs/....adoc
@@ -55,6 +58,28 @@ function createComponentSymlinks() {
         .pipe(dest('components/modules/ROOT/pages/'));
 }
 
+function createComponentLanguageSymlinks() {
+    return src(['../components/{*,*/*}/src/main/docs/*-language.adoc'])
+        .pipe(map((file, done) => {
+            // this flattens the output to just .../pages/....adoc
+            // instead of .../pages/camel-.../src/main/docs/....adoc
+            file.base = path.dirname(file.path);
+            console.log(`copying ${file.path}`)
+            done(null, file);
+        }))
+        // Antora disabled symlinks, there is an issue open
+        // https://gitlab.com/antora/antora/issues/188
+        // to reinstate symlink support, until that's resolved
+        // we'll simply copy over instead of creating symlinks
+        // .pipe(symlink('components/modules/ROOT/pages/', {
+        //     relativeSymlinks: true
+        // }));
+        // uncomment above .pipe() and remove the .pipe() below
+        // when antora#188 is resolved
+        .pipe(insertSourceAttribute())
+        .pipe(dest('components/modules/languages/pages/'));
+}
+
 function createComponentImageSymlinks() {
     return src('../components/{*,*/*}/src/main/docs/*.png')
         .pipe(map((file, done) => {
@@ -124,30 +149,45 @@ function insertSourceAttribute() {
 function createComponentNav() {
     return src('component-nav.adoc.template')
         .pipe(insertGeneratedNotice())
-        .pipe(inject(src(['../core/camel-base/src/main/docs/*-component.adoc', '../components/{*,*/*}/src/main/docs/*.adoc']).pipe(sort()), {
+        .pipe(inject(src(['components/modules/ROOT/pages/**/*.adoc']).pipe(sort()), {
             removeTags: true,
             transform: (filename, file) => {
                 const filepath = path.basename(filename);
                 const title = titleFrom(file);
-                return `* xref:${filepath}[${title}]`;
+                return `** xref:${filepath}[${title}]`;
             }
         }))
         .pipe(rename('nav.adoc'))
         .pipe(dest('components/modules/ROOT/'))
 }
 
-function createUserManualNav() {
-    return src('user-manual-nav.adoc.template')
+function createComponentLanguagesNav() {
+    return src('component-languages-nav.adoc.template')
         .pipe(insertGeneratedNotice())
-        .pipe(inject(src('../core/camel-core-languages/src/main/docs/modules/languages/pages/*.adoc').pipe(sort()), {
+        .pipe(inject(src(['components/modules/languages/pages/**/*.adoc', '../core/camel-core-languages/src/main/docs/modules/languages/pages/*.adoc']).pipe(sort()), {
             removeTags: true,
-            name: 'languages',
             transform: (filename, file) => {
                 const filepath = path.basename(filename);
                 const title = titleFrom(file);
-                return ` ** xref:languages:${filepath}[${title}]`;
+                return `** xref:${filepath}[${title}]`;
             }
         }))
+        .pipe(rename('nav.adoc'))
+        .pipe(dest('components/modules/languages/'))
+}
+
+function createUserManualNav() {
+    return src('user-manual-nav.adoc.template')
+        .pipe(insertGeneratedNotice())
+        // .pipe(inject(src('../core/camel-core-languages/src/main/docs/modules/languages/pages/*.adoc').pipe(sort()), {
+        //     removeTags: true,
+        //     name: 'languages',
+        //     transform: (filename, file) => {
+        //         const filepath = path.basename(filename);
+        //         const title = titleFrom(file);
+        //         return ` ** xref:languages:${filepath}[${title}]`;
+        //     }
+        // }))
         .pipe(inject(src('../core/camel-core-engine/src/main/docs/modules/eips/pages/*.adoc').pipe(sort()), {
             removeTags: true,
             name: 'eips',
@@ -168,6 +208,7 @@ const extractExamples = function(file, enc, next) {
     let exampleFiles = new Set()
     while (example = includes.exec(asciidoc)) {
         let examplePath = path.resolve(path.join('..', example[1]));
+        // console.log(`examplePath: ${examplePath}`)
         exampleFiles.add(examplePath);
     }
 
@@ -190,6 +231,18 @@ function createUserManualExamples() {
         .pipe(dest('user-manual/modules/ROOT/examples/'));
 }
 
+function createUserManualEIPExamples() {
+    return src('../core/camel-core-engine/src/main/docs/user-manual/modules/eips/**/*.adoc')
+        .pipe(through2.obj(extractExamples))
+        .pipe(dest('user-manual/modules/ROOT/examples/'));
+}
+
+function createUserManualLanguageExamples() {
+    return src('../core/camel-core-languages/src/main/docs/user-manual/modules/languages/**/*.adoc')
+        .pipe(through2.obj(extractExamples))
+        .pipe(dest('user-manual/modules/ROOT/examples/'));
+}
+
 function createComponentExamples() {
     return src('../components/{*,*/*}/src/main/docs/*.adoc')
         .pipe(through2.obj(extractExamples))
@@ -197,12 +250,12 @@ function createComponentExamples() {
 }
 
 const symlinks = parallel(
-    series(deleteComponentSymlinks, createComponentSymlinks),
+    series(deleteComponentSymlinks, createComponentSymlinks, createComponentLanguageSymlinks),
     series(deleteComponentImageSymlinks, createComponentImageSymlinks)
     // series(deleteUserManualSymlinks, createUserManualSymlinks)
 );
-const nav = parallel(createComponentNav, createUserManualNav);
-const examples = series(deleteExamples, createUserManualExamples, createComponentExamples);
+const nav = parallel(createComponentNav, createComponentLanguagesNav, createUserManualNav);
+const examples = series(deleteExamples, createUserManualExamples, createUserManualEIPExamples, createUserManualLanguageExamples, createComponentExamples);
 
 exports.symlinks = symlinks;
 exports.nav = nav;
diff --git a/docs/package.json b/docs/package.json
index b28be99..f338d23 100644
--- a/docs/package.json
+++ b/docs/package.json
@@ -7,6 +7,7 @@
     "del": "^3.0.0",
     "gulp": "^4.0.0",
     "gulp-cli": "^2.0.1",
+    "gulp-filter": "^6.0.0",
     "gulp-inject": "^5.0.2",
     "gulp-rename": "^1.4.0",
     "gulp-replace": "^1.0.0",
diff --git a/docs/user-manual-nav.adoc.template b/docs/user-manual-nav.adoc.template
index 7a697b0..8fd21cd 100644
--- a/docs/user-manual-nav.adoc.template
+++ b/docs/user-manual-nav.adoc.template
@@ -50,9 +50,7 @@
  ** xref:java-dsl.adoc[Java DSL]
  ** xref:spring.adoc[Spring support]
 * xref:using-osgi-blueprint-with-camel.adoc[Using OSGi blueprint with Camel]
-* Supported expression languages
-<!-- languages:adoc -->
-<!-- endinject -->
+* Supported expression languages -- see Components documentation
 * xref:enterprise-integration-patterns.adoc[Enterprise Integration Patterns]
 <!-- eips:adoc -->
 <!-- endinject -->


[camel] 03/18: constant for playbook location

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d42e6d900175ff6b9b7f217a689f300f4a713244
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 11:21:18 2020 -0700

    constant for playbook location
---
 .../src/main/java/org/apache/camel/maven/packaging/XRefCheckMojo.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XRefCheckMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XRefCheckMojo.java
index 1ab48a5..26a582f 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XRefCheckMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XRefCheckMojo.java
@@ -43,6 +43,7 @@ import org.snakeyaml.engine.v2.api.LoadSettings;
 @Mojo(name = "xref-check", threadSafe = true)
 public class XRefCheckMojo extends AbstractMojo {
 
+    public static final java.lang.String PLAYBOOK = "antora-playbook-local-xref-check.yml";
     /**
      * The maven project.
      */
@@ -69,7 +70,7 @@ public class XRefCheckMojo extends AbstractMojo {
         List<String> unresolved = new ArrayList<>();
         Load yaml = new Load(LoadSettings.builder().build());
         Map site;
-        try (Reader r = Files.newBufferedReader(path.resolve("site.yml"))) {
+        try (Reader r = Files.newBufferedReader(path.resolve(PLAYBOOK))) {
             site = (Map) yaml.loadFromReader(r);
         }
         Map<String, Path> pages = new HashMap<>();


[camel] 17/18: update components index page generation

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit d442b715560de42997189eb3b15122d285aafbc8
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:12:52 2020 -0700

    update components index page generation
---
 .../src/main/resources/website-languages-list.mvel                      | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tooling/maven/camel-package-maven-plugin/src/main/resources/website-languages-list.mvel b/tooling/maven/camel-package-maven-plugin/src/main/resources/website-languages-list.mvel
index 1f0ca1e..9662f8d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/resources/website-languages-list.mvel
+++ b/tooling/maven/camel-package-maven-plugin/src/main/resources/website-languages-list.mvel
@@ -6,7 +6,7 @@ Number of Languages: @{languages.size} in @{numberOfArtifacts} JAR artifacts (@{
 |===
 | Language | Since | Description
 @foreach{row : languages}
-| xref:${row.name}-language.adoc[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated}*deprecated* @end{}@{util.escape(row.description)}
+| xref:languages:${row.name}-language.adoc[@{row.title}] (@{row.artifactId}) | @{row.firstVersionShort} | @if{row.deprecated}*deprecated* @end{}@{util.escape(row.description)}
 @end{}|===
 
 @end{}
\ No newline at end of file


[camel] 01/18: rearrange user-manual sources so they don't need copying

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 2ef4774b1e779d25dd59e304e50974f186195cf8
Author: David Jencks <dj...@apache.org>
AuthorDate: Wed Mar 11 14:50:27 2020 -0700

    rearrange user-manual sources so they don't need copying
---
 core/camel-core-engine/src/main/docs/antora.yml    |  19 +
 .../eips/pages}/aggregate-eip.adoc                 |   0
 .../eips/pages}/batch-config-eip.adoc              |   0
 .../{eips => modules/eips/pages}/bean-eip.adoc     |   0
 .../{eips => modules/eips/pages}/choice-eip.adoc   |   0
 .../eips/pages}/circuitBreaker-eip.adoc            |   0
 .../eips/pages}/claimCheck-eip.adoc                |   0
 .../eips/pages}/content-based-router-eip.adoc      |   0
 .../eips/pages}/content-filter-eip.adoc            |   0
 .../eips/pages}/convertBodyTo-eip.adoc             |   0
 .../eips/pages}/customLoadBalancer-eip.adoc        |   0
 .../{eips => modules/eips/pages}/delay-eip.adoc    |   0
 .../eips/pages}/dynamic-router.adoc                |   0
 .../eips/pages}/dynamicRouter-eip.adoc             |   0
 .../{eips => modules/eips/pages}/enrich-eip.adoc   |   0
 .../eips/pages}/eventDrivenConsumer-eip.adoc       |   0
 .../{eips => modules/eips/pages}/failover-eip.adoc |   0
 .../{eips => modules/eips/pages}/filter-eip.adoc   |   0
 .../{eips => modules/eips/pages}/from-eip.adoc     |   0
 .../{eips => modules/eips/pages}/hystrix-eip.adoc  |   0
 .../eips/pages}/hystrixConfiguration-eip.adoc      |   0
 .../eips/pages}/idempotentConsumer-eip.adoc        |   0
 .../{eips => modules/eips/pages}/inOnly-eip.adoc   |   0
 .../{eips => modules/eips/pages}/inOut-eip.adoc    |   0
 .../eips/pages}/loadBalance-eip.adoc               |   0
 .../docs/{eips => modules/eips/pages}/log-eip.adoc |   0
 .../{eips => modules/eips/pages}/loop-eip.adoc     |   0
 .../{eips => modules/eips/pages}/marshal-eip.adoc  |   0
 .../eips/pages}/multicast-eip.adoc                 |   0
 .../eips/pages}/onFallback-eip.adoc                |   0
 .../eips/pages}/otherwise-eip.adoc                 |   0
 .../{eips => modules/eips/pages}/pipeline-eip.adoc |   0
 .../eips/pages}/pollEnrich-eip.adoc                |   0
 .../{eips => modules/eips/pages}/process-eip.adoc  |   0
 .../{eips => modules/eips/pages}/random-eip.adoc   |   0
 .../eips/pages}/recipientList-eip.adoc             |   0
 .../eips/pages}/removeHeader-eip.adoc              |   0
 .../eips/pages}/removeHeaders-eip.adoc             |   0
 .../eips/pages}/removeProperties-eip.adoc          |   0
 .../eips/pages}/removeProperty-eip.adoc            |   0
 .../eips/pages}/requestReply-eip.adoc              |   0
 .../eips/pages}/resequence-eip.adoc                |   0
 .../eips/pages}/resilience4j-eip.adoc              |   0
 .../eips/pages}/resilience4jConfiguration-eip.adoc |   0
 .../{eips => modules/eips/pages}/rollback-eip.adoc |   0
 .../eips/pages}/roundRobin-eip.adoc                |   0
 .../eips/pages}/routingSlip-eip.adoc               |   0
 .../{eips => modules/eips/pages}/saga-eip.adoc     |   0
 .../{eips => modules/eips/pages}/sample-eip.adoc   |   0
 .../{eips => modules/eips/pages}/script-eip.adoc   |   0
 .../eips/pages}/serviceCall-eip.adoc               |   0
 .../{eips => modules/eips/pages}/setBody-eip.adoc  |   0
 .../eips/pages}/setHeader-eip.adoc                 |   0
 .../eips/pages}/setOutHeader-eip.adoc              |   0
 .../eips/pages}/setProperty-eip.adoc               |   0
 .../{eips => modules/eips/pages}/sort-eip.adoc     |   0
 .../{eips => modules/eips/pages}/split-eip.adoc    |   0
 .../{eips => modules/eips/pages}/step-eip.adoc     |   0
 .../{eips => modules/eips/pages}/sticky-eip.adoc   |   0
 .../{eips => modules/eips/pages}/stop-eip.adoc     |   0
 .../eips/pages}/stream-config-eip.adoc             |   0
 .../{eips => modules/eips/pages}/threads-eip.adoc  |   0
 .../{eips => modules/eips/pages}/throttle-eip.adoc |   0
 .../docs/{eips => modules/eips/pages}/to-eip.adoc  |   0
 .../docs/{eips => modules/eips/pages}/toD-eip.adoc |   0
 .../{eips => modules/eips/pages}/topic-eip.adoc    |   0
 .../eips/pages}/transform-eip.adoc                 |   0
 .../eips/pages}/unmarshal-eip.adoc                 |   0
 .../{eips => modules/eips/pages}/validate-eip.adoc |   0
 .../{eips => modules/eips/pages}/weighted-eip.adoc |   0
 .../{eips => modules/eips/pages}/when-eip.adoc     |   0
 .../{eips => modules/eips/pages}/wireTap-eip.adoc  |   0
 core/camel-core-languages/src/main/docs/antora.yml |  19 +
 .../languages/pages}/constant-language.adoc        |   0
 .../pages}/exchangeProperty-language.adoc          |   0
 .../languages/pages}/file-language.adoc            |   0
 .../languages/pages}/header-language.adoc          |   0
 .../languages/pages}/ref-language.adoc             |   0
 .../languages/pages}/simple-language.adoc          |   0
 .../languages/pages}/tokenize-language.adoc        |   0
 core/camel-xml-jaxp/src/main/docs/antora.yml       |  19 +
 .../languages/pages}/xtokenize-language.adoc       |   0
 .../modules/ROOT/pages/constant-language.adoc      |  75 --
 .../ROOT/pages/exchangeProperty-language.adoc      |  61 --
 .../modules/ROOT/pages/file-language.adoc          | 295 -------
 .../modules/ROOT/pages/header-language.adoc        |  45 --
 .../modules/ROOT/pages/ref-language.adoc           |  58 --
 .../modules/ROOT/pages/simple-language.adoc        | 885 ---------------------
 .../modules/ROOT/pages/tokenize-language.adoc      |  40 -
 .../modules/ROOT/pages/xtokenize-language.adoc     |  32 -
 docs/gulpfile.js                                   |  52 +-
 docs/user-manual/modules/ROOT/nav.adoc             | 150 ++--
 .../modules/ROOT/pages/aggregate-eip.adoc          | 673 ----------------
 .../modules/ROOT/pages/batch-config-eip.adoc       |  19 -
 docs/user-manual/modules/ROOT/pages/bean-eip.adoc  |  97 ---
 .../user-manual/modules/ROOT/pages/choice-eip.adoc |  77 --
 .../modules/ROOT/pages/circuitBreaker-eip.adoc     |  62 --
 .../modules/ROOT/pages/claimCheck-eip.adoc         | 273 -------
 .../modules/ROOT/pages/constant-language.adoc      |  75 --
 .../ROOT/pages/content-based-router-eip.adoc       |  80 --
 .../modules/ROOT/pages/content-filter-eip.adoc     |  66 --
 .../modules/ROOT/pages/convertBodyTo-eip.adoc      |  16 -
 .../modules/ROOT/pages/customLoadBalancer-eip.adoc |  82 --
 docs/user-manual/modules/ROOT/pages/delay-eip.adoc | 173 ----
 .../modules/ROOT/pages/dynamicRouter-eip.adoc      | 159 ----
 .../user-manual/modules/ROOT/pages/enrich-eip.adoc | 198 -----
 .../ROOT/pages/eventDrivenConsumer-eip.adoc        |  59 --
 .../ROOT/pages/exchangeProperty-language.adoc      |  61 --
 .../modules/ROOT/pages/failover-eip.adoc           |  47 --
 .../modules/ROOT/pages/file-language.adoc          | 295 -------
 .../user-manual/modules/ROOT/pages/filter-eip.adoc | 101 ---
 docs/user-manual/modules/ROOT/pages/from-eip.adoc  |  38 -
 .../modules/ROOT/pages/header-language.adoc        |  45 --
 .../modules/ROOT/pages/hystrix-eip.adoc            | 150 ----
 .../ROOT/pages/hystrixConfiguration-eip.adoc       |  44 -
 .../modules/ROOT/pages/idempotentConsumer-eip.adoc |  45 --
 .../user-manual/modules/ROOT/pages/inOnly-eip.adoc |  17 -
 docs/user-manual/modules/ROOT/pages/inOut-eip.adoc |  17 -
 .../modules/ROOT/pages/loadBalance-eip.adoc        | 251 ------
 docs/user-manual/modules/ROOT/pages/log-eip.adoc   | 204 -----
 docs/user-manual/modules/ROOT/pages/loop-eip.adoc  | 171 ----
 .../modules/ROOT/pages/marshal-eip.adoc            |  45 --
 .../modules/ROOT/pages/multicast-eip.adoc          | 145 ----
 .../modules/ROOT/pages/onFallback-eip.adoc         |  84 --
 .../modules/ROOT/pages/otherwise-eip.adoc          |  62 --
 .../modules/ROOT/pages/pipeline-eip.adoc           |  97 ---
 .../modules/ROOT/pages/pollEnrich-eip.adoc         | 124 ---
 .../modules/ROOT/pages/process-eip.adoc            | 101 ---
 .../user-manual/modules/ROOT/pages/random-eip.adoc |   8 -
 .../modules/ROOT/pages/recipientList-eip.adoc      | 375 ---------
 .../modules/ROOT/pages/ref-language.adoc           |  58 --
 .../modules/ROOT/pages/removeHeader-eip.adoc       |  40 -
 .../modules/ROOT/pages/removeHeaders-eip.adoc      |  26 -
 .../modules/ROOT/pages/removeProperties-eip.adoc   |  47 --
 .../modules/ROOT/pages/removeProperty-eip.adoc     |  46 --
 .../modules/ROOT/pages/requestReply-eip.adoc       |  49 --
 .../modules/ROOT/pages/resequence-eip.adoc         | 242 ------
 .../modules/ROOT/pages/resilience4j-eip.adoc       | 150 ----
 .../ROOT/pages/resilience4jConfiguration-eip.adoc  |   7 -
 .../modules/ROOT/pages/rollback-eip.adoc           | 242 ------
 .../modules/ROOT/pages/roundRobin-eip.adoc         |  36 -
 .../modules/ROOT/pages/routingSlip-eip.adoc        | 113 ---
 docs/user-manual/modules/ROOT/pages/saga-eip.adoc  | 455 -----------
 .../user-manual/modules/ROOT/pages/sample-eip.adoc |  85 --
 .../user-manual/modules/ROOT/pages/script-eip.adoc |  76 --
 .../modules/ROOT/pages/serviceCall-eip.adoc        | 619 --------------
 .../modules/ROOT/pages/setBody-eip.adoc            |  40 -
 .../modules/ROOT/pages/setHeader-eip.adoc          |  48 --
 .../modules/ROOT/pages/setOutHeader-eip.adoc       |  50 --
 .../modules/ROOT/pages/setProperty-eip.adoc        |  48 --
 .../modules/ROOT/pages/simple-language.adoc        | 885 ---------------------
 docs/user-manual/modules/ROOT/pages/sort-eip.adoc  |  70 --
 docs/user-manual/modules/ROOT/pages/split-eip.adoc | 703 ----------------
 docs/user-manual/modules/ROOT/pages/step-eip.adoc  |  99 ---
 .../user-manual/modules/ROOT/pages/sticky-eip.adoc |  46 --
 docs/user-manual/modules/ROOT/pages/stop-eip.adoc  |  23 -
 .../modules/ROOT/pages/stream-config-eip.adoc      |  20 -
 .../modules/ROOT/pages/threads-eip.adoc            |  52 --
 .../modules/ROOT/pages/throttle-eip.adoc           |  84 --
 docs/user-manual/modules/ROOT/pages/to-eip.adoc    |  90 ---
 docs/user-manual/modules/ROOT/pages/toD-eip.adoc   | 221 -----
 .../modules/ROOT/pages/tokenize-language.adoc      |  40 -
 docs/user-manual/modules/ROOT/pages/topic-eip.adoc |  36 -
 .../modules/ROOT/pages/transform-eip.adoc          |  13 -
 .../modules/ROOT/pages/unmarshal-eip.adoc          |  44 -
 .../modules/ROOT/pages/validate-eip.adoc           |  74 --
 .../modules/ROOT/pages/weighted-eip.adoc           |  44 -
 docs/user-manual/modules/ROOT/pages/when-eip.adoc  |  62 --
 .../modules/ROOT/pages/wireTap-eip.adoc            | 208 -----
 .../modules/ROOT/pages/xtokenize-language.adoc     |  32 -
 170 files changed, 162 insertions(+), 11547 deletions(-)

diff --git a/core/camel-core-engine/src/main/docs/antora.yml b/core/camel-core-engine/src/main/docs/antora.yml
new file mode 100644
index 0000000..18fe9ae
--- /dev/null
+++ b/core/camel-core-engine/src/main/docs/antora.yml
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: manual
+version: latest
diff --git a/core/camel-core-engine/src/main/docs/eips/aggregate-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/aggregate-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/aggregate-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/batch-config-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/batch-config-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/batch-config-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/batch-config-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/bean-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/bean-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/bean-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/choice-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/choice-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/choice-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/circuitBreaker-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/circuitBreaker-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/claimCheck-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/claimCheck-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/claimCheck-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/content-based-router-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/content-based-router-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/content-based-router-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/content-filter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/content-filter-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/content-filter-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/convertBodyTo-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/convertBodyTo-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/convertBodyTo-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/convertBodyTo-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/customLoadBalancer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/customLoadBalancer-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/customLoadBalancer-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/delay-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/delay-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/delay-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/dynamic-router.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/dynamic-router.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/dynamic-router.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/dynamicRouter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/dynamicRouter-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/dynamicRouter-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/enrich-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/enrich-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/enrich-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/eventDrivenConsumer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/eventDrivenConsumer-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/eventDrivenConsumer-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/failover-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/failover-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/failover-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/filter-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/filter-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/filter-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/from-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/from-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/from-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/from-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/hystrix-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrix-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/hystrix-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/hystrix-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/hystrixConfiguration-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/hystrixConfiguration-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/hystrixConfiguration-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/idempotentConsumer-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/idempotentConsumer-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/idempotentConsumer-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/inOnly-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/inOnly-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/inOnly-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/inOnly-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/inOut-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/inOut-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/inOut-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/inOut-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/loadBalance-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/loadBalance-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/loadBalance-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/loadBalance-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/log-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/log-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/loop-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/loop-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/loop-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/marshal-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/marshal-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/marshal-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/multicast-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/multicast-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/multicast-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/onFallback-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/onFallback-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/onFallback-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/otherwise-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/otherwise-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/otherwise-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/pipeline-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/pipeline-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/pipeline-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/pollEnrich-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/pollEnrich-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/pollEnrich-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/process-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/process-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/process-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/random-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/random-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/random-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/random-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/recipientList-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/recipientList-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/recipientList-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/removeHeader-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/removeHeader-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/removeHeader-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/removeHeader-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/removeHeaders-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/removeHeaders-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/removeHeaders-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/removeHeaders-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/removeProperties-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/removeProperties-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/removeProperties-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/removeProperties-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/removeProperty-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/removeProperty-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/removeProperty-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/removeProperty-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/requestReply-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/requestReply-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/requestReply-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/resequence-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/resequence-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/resequence-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/resequence-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/resilience4j-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4j-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/resilience4j-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4j-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/resilience4jConfiguration-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/resilience4jConfiguration-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/resilience4jConfiguration-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/rollback-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/rollback-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/rollback-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/roundRobin-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/roundRobin-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/roundRobin-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/roundRobin-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/routingSlip-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/routingSlip-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/routingSlip-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/routingSlip-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/saga-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/saga-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/saga-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/sample-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/sample-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/sample-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/sample-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/script-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/script-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/script-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/serviceCall-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/serviceCall-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/serviceCall-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/setBody-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/setBody-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/setBody-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/setBody-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/setHeader-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/setHeader-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/setHeader-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/setHeader-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/setOutHeader-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/setOutHeader-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/setOutHeader-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/setOutHeader-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/setProperty-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/setProperty-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/setProperty-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/setProperty-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/sort-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/sort-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/sort-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/sort-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/split-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/split-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/split-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/step-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/step-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/step-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/sticky-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/sticky-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/sticky-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/stop-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/stop-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/stop-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/stop-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/stream-config-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/stream-config-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/stream-config-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/stream-config-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/threads-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/threads-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/threads-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/throttle-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/throttle-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/throttle-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/to-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/to-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/toD-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/toD-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/toD-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/topic-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/topic-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/topic-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/topic-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/transform-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/transform-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/transform-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/unmarshal-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/unmarshal-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/unmarshal-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/validate-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/validate-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/validate-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/validate-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/weighted-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/weighted-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/weighted-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/when-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/when-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/when-eip.adoc
diff --git a/core/camel-core-engine/src/main/docs/eips/wireTap-eip.adoc b/core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
similarity index 100%
rename from core/camel-core-engine/src/main/docs/eips/wireTap-eip.adoc
rename to core/camel-core-engine/src/main/docs/modules/eips/pages/wireTap-eip.adoc
diff --git a/core/camel-core-languages/src/main/docs/antora.yml b/core/camel-core-languages/src/main/docs/antora.yml
new file mode 100644
index 0000000..18fe9ae
--- /dev/null
+++ b/core/camel-core-languages/src/main/docs/antora.yml
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: manual
+version: latest
diff --git a/core/camel-core-languages/src/main/docs/constant-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/constant-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/constant-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/constant-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/exchangeProperty-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/exchangeProperty-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/exchangeProperty-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/exchangeProperty-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/file-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/file-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/file-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/file-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/header-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/header-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/header-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/header-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/ref-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/ref-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/ref-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/ref-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/simple-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/simple-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
diff --git a/core/camel-core-languages/src/main/docs/tokenize-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/tokenize-language.adoc
similarity index 100%
rename from core/camel-core-languages/src/main/docs/tokenize-language.adoc
rename to core/camel-core-languages/src/main/docs/modules/languages/pages/tokenize-language.adoc
diff --git a/core/camel-xml-jaxp/src/main/docs/antora.yml b/core/camel-xml-jaxp/src/main/docs/antora.yml
new file mode 100644
index 0000000..18fe9ae
--- /dev/null
+++ b/core/camel-xml-jaxp/src/main/docs/antora.yml
@@ -0,0 +1,19 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: manual
+version: latest
diff --git a/core/camel-xml-jaxp/src/main/docs/xtokenize-language.adoc b/core/camel-xml-jaxp/src/main/docs/modules/languages/pages/xtokenize-language.adoc
similarity index 100%
rename from core/camel-xml-jaxp/src/main/docs/xtokenize-language.adoc
rename to core/camel-xml-jaxp/src/main/docs/modules/languages/pages/xtokenize-language.adoc
diff --git a/docs/components/modules/ROOT/pages/constant-language.adoc b/docs/components/modules/ROOT/pages/constant-language.adoc
deleted file mode 100644
index a8ef0e0..0000000
--- a/docs/components/modules/ROOT/pages/constant-language.adoc
+++ /dev/null
@@ -1,75 +0,0 @@
-[[constant-language]]
-= Constant Language
-:page-source: core/camel-core-languages/src/main/docs/constant-language.adoc
-
-*Since Camel 1.5*
-
-The Constant Expression Language is really just a way to specify
-constant strings as a type of expression.
-
-[NOTE]
-====
-This is a fixed constant value that is only set once during starting up the route,
-do not use this if you want dynamic values during routing.
-====
-
-== Constant Options
-
-
-// language options: START
-The Constant language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-== Example usage
-
-The setHeader element of the Spring DSL can utilize a constant
-expression like:
-
-[source,xml]
-----
-<route>
-  <from uri="seda:a"/>
-  <setHeader name="theHeader">
-    <constant>the value</constant>
-  </setHeader>
-  <to uri="mock:b"/>
-</route>
-----
-
-in this case, the Message coming from the seda:a
-Endpoint will have 'theHeader' header set to the
-constant value 'the value'.
-
-And the same example using Java DSL:
-
-[source,java]
-----
-from("seda:a")
-  .setHeader("theHeader", constant("the value"))
-  .to("mock:b");
-----
-
-== Loading constant from external resource
-
-You can externalize the constant and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-----
-.setHeader("myHeader").constant("resource:classpath:constant.txt")
-----
-
-== Dependencies
-
-The Constant language is part of *camel-core*.
diff --git a/docs/components/modules/ROOT/pages/exchangeProperty-language.adoc b/docs/components/modules/ROOT/pages/exchangeProperty-language.adoc
deleted file mode 100644
index c6c0a60..0000000
--- a/docs/components/modules/ROOT/pages/exchangeProperty-language.adoc
+++ /dev/null
@@ -1,61 +0,0 @@
-[[exchangeProperty-language]]
-= ExchangeProperty Language
-:page-source: core/camel-core-languages/src/main/docs/exchangeProperty-language.adoc
-
-*Since Camel 2.0*
-
-The ExchangeProperty Expression Language allows you to extract values of
-named exchange properties.
-
-== Exchange Property Options
-
-// language options: START
-The ExchangeProperty language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The recipientList element of the Spring DSL can utilize a
-exchangeProperty expression like:
-
-In this case, the list of recipients are contained in the property
-'myProperty'.
-
-[source,xml]
-----
-<route>
-  <from uri="direct:a" />
-  <recipientList>
-    <exchangeProperty>myProperty</exchangeProperty>
-  </recipientList>
-</route>
-----
-
-And the same example in Java DSL:
-
-[source,java]
-----
-from("direct:a").recipientList(exchangeProperty("myProperty"));
-----
-
-And with a slightly different syntax where you use the builder to the
-fullest (i.e. avoid using parameters but using stacked operations,
-notice that exchangeProperty is not a parameter but a stacked method
-call)
-
-[source,java]
-----
-from("direct:a").recipientList().exchangeProperty("myProperty");
-----
-
-== Dependencies
-
-The ExchangeProperty language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/file-language.adoc b/docs/components/modules/ROOT/pages/file-language.adoc
deleted file mode 100644
index 88bfa2c..0000000
--- a/docs/components/modules/ROOT/pages/file-language.adoc
+++ /dev/null
@@ -1,295 +0,0 @@
-[[file-language]]
-= File Language
-:page-source: core/camel-core-languages/src/main/docs/file-language.adoc
-
-*Since Camel 1.1*
-
-The file language is merged with
-xref:simple-language.adoc[Simple] language which means you can use all the file
-syntax directly within the simple language.
-
-The File Expression Language is an extension to the
-xref:simple-language.adoc[Simple] language, adding file related capabilities.
-These capabilities are related to common use cases working with file
-path and names. The goal is to allow expressions to be used with the
-File and FTP components for setting
-dynamic file patterns for both consumer and producer.
-
-== File Language options
-
-// language options: START
-The File language supports 2 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| resultType |  | String | Sets the class name of the result type (type from output)
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Syntax
-
-This language is an *extension* to the xref:simple-language.adoc[Simple] language
-so the xref:simple-language.adoc[Simple] syntax applies also. So the table below
-only lists the additional.  +
- As opposed to xref:simple-language.adoc[Simple] language
-xref:file-language.adoc[File Language] also supports
-xref:constant-language.adoc[Constant] expressions so you can enter a fixed
-filename.
-
-All the file tokens use the same expression name as the method on the
-`java.io.File` object, for instance `file:absolute` refers to the
-`java.io.File.getAbsolute()` method. Notice that not all expressions are
-supported by the current Exchange. For instance the xref:components::ftp-component.adoc[FTP]
-component supports some of the options, where as the
-File component supports all of them.
-
-
-[width="100%",cols="10%,10%,10%,10%,10%,25%,25%",options="header",]
-|===
-|Expression |Type |File Consumer |File Producer |FTP Consumer |FTP Producer |Description
-
-|file:name |String |yes |no |yes |no |refers to the file name (is relative to the starting directory, see note
-below)
-
-|file:name.ext |String |yes |no |yes |no |refers to the file extension only
-
-|file:name.ext.single |String |yes |no |yes |no |refers to the file extension. If the file
-extension has mutiple dots, then this expression strips and only returns
-the last part.
-
-|file:name.noext |String |yes |no |yes |no |refers to the file name with no extension (is relative to the starting
-directory, see note below)
-
-|file:name.noext.single |String |yes |no |yes |no |refers to the file name with no extension (is
-relative to the starting directory, see note below). If the file
-extension has multiple dots, then this expression strips only the last
-part, and keep the others.
-
-|file:onlyname |String |yes |no |yes |no |refers to the file name only with no leading paths.
-
-|file:onlyname.noext |String |yes |no |yes |no |refers to the file name only with no extension and with no leading
-paths.
-
-|file:onlyname.noext.single |String |yes |no |yes |no |refers to the file name only with no extension and
-with no leading paths. If the file extension has multiple dots, then
-this expression strips only the last part, and keep the others.
-
-|file:ext |String |yes |no |yes |no |refers to the file extension only
-
-|file:parent |String |yes |no |yes |no |refers to the file parent
-
-|file:path |String |yes |no |yes |no |refers to the file path
-
-|file:absolute |Boolean |yes |no |no |no |refers to whether the file is regarded as absolute or relative
-
-|file:absolute.path |String |yes |no |no |no |refers to the absolute file path
-
-|file:length |Long |yes |no |yes |no |refers to the file length returned as a Long type
-
-|file:size |Long |yes |no |yes |no |refers to the file length returned as a Long type
-
-|file:modified |Date |yes |no |yes |no |Refers to the file last modified returned as a Date type
-
-|date:_command:pattern_ |String |yes |yes |yes |yes |for date formatting using the `java.text.SimpleDateFormat` patterns. Is
-an *extension* to the xref:simple-language.adoc[Simple] language. Additional
-command is: *file* (consumers only) for the last modified timestamp of
-the file. Notice: all the commands from the xref:simple-language.adoc[Simple]
-language can also be used.
-|===
-
-== File token example
-
-=== Relative paths
-
-We have a `java.io.File` handle for the file `hello.txt` in the
-following *relative* directory: `.\filelanguage\test`. And we configure
-our endpoint to use this starting directory `.\filelanguage`. The file
-tokens will return as:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Expression |Returns
-
-|file:name |test\hello.txt
-
-|file:name.ext |txt
-
-|file:name.noext |test\hello
-
-|file:onlyname |hello.txt
-
-|file:onlyname.noext |hello
-
-|file:ext |txt
-
-|file:parent |filelanguage\test
-
-|file:path |filelanguage\test\hello.txt
-
-|file:absolute |false
-
-|file:absolute.path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-|===
-
-=== Absolute paths
-
-We have a `java.io.File` handle for the file `hello.txt` in the
-following *absolute* directory:
-`\workspace\camel\camel-core\target\filelanguage\test`. And we configure
-out endpoint to use the absolute starting directory
-`\workspace\camel\camel-core\target\filelanguage`. The file tokens will
-return as:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Expression |Returns
-
-|file:name |test\hello.txt 
-
-|file:name.ext |txt
-
-|file:name.noext |test\hello
-
-|file:onlyname |hello.txt
-
-|file:onlyname.noext |hello
-
-|file:ext |txt
-
-|file:parent |\workspace\camel\camel-core\target\filelanguage\test
-
-|file:path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-
-|file:absolute |true
-
-|file:absolute.path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-|===
-
-== Samples
-
-You can enter a fixed xref:constant-language.adoc[Constant] expression such as
-`myfile.txt`:
-
-[source]
-----
-fileName="myfile.txt"
-----
-
-Lets assume we use the file consumer to read files and want to move the
-read files to backup folder with the current date as a sub folder. This
-can be archieved using an expression like:
-
-[source]
-----
-fileName="backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"
-----
-
-relative folder names are also supported so suppose the backup folder
-should be a sibling folder then you can append .. as:
-
-[source]
-----
-fileName="../backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"
-----
-
-As this is an extension to the xref:simple-language.adoc[Simple] language we have
-access to all the goodies from this language also, so in this use case
-we want to use the in.header.type as a parameter in the dynamic
-expression:
-
-[source]
-----
-fileName="../backup/${date:now:yyyyMMdd}/type-${in.header.type}/backup-of-${file:name.noext}.bak"
-----
-
-If you have a custom Date you want to use in the expression then Camel
-supports retrieving dates from the message header.
-
-[source]
-----
-fileName="orders/order-${in.header.customerId}-${date:in.header.orderDate:yyyyMMdd}.xml"
-----
-
-And finally we can also use a bean expression to invoke a POJO class
-that generates some String output (or convertible to String) to be used:
-
-[source]
-----
-fileName="uniquefile-${bean:myguidgenerator.generateid}.txt"
-----
-
-And of course all this can be combined in one expression where you can
-use the xref:file-language.adoc[File Language], xref:file-language.adoc[Simple]
-and the xref:components::bean-component.adoc[Bean] language in one combined expression. This
-is pretty powerful for those common file path patterns.
-
-== Using Spring PropertyPlaceholderConfigurer together with the File component
-
-In Camel you can use the xref:file-language.adoc[File Language] directly
-from the xref:simple-language.adoc[Simple] language which makes a
-Content Based Router easier to do in
-Spring XML, where we can route based on file extensions as shown below:
-
-[source,xml]
-----
-<from uri="file://input/orders"/>
-   <choice>
-     <when>
-         <simple>${file:ext} == 'txt'</simple>
-         <to uri="bean:orderService?method=handleTextFiles"/>
-     </when>
-     <when>
-         <simple>${file:ext} == 'xml'</simple>
-         <to uri="bean:orderService?method=handleXmlFiles"/>
-     </when>
-     <otherwise>
-         <to uri="bean:orderService?method=handleOtherFiles"/>
-     </otherwise>
-  </choice>
-----
-
-If you use the `fileName` option on the File endpoint
-to set a dynamic filename using the xref:file-language.adoc[File Language] then make sure you  +
- use the alternative syntax to avoid
-clashing with Springs `PropertyPlaceholderConfigurer`.
-
-*bundle-context.xml*
-
-[source,xml]
-----
-<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-    <property name="location" value="classpath:bundle-context.cfg" />
-</bean>
-
-<bean id="sampleRoute" class="SampleRoute">
-    <property name="fromEndpoint" value="${fromEndpoint}" />
-    <property name="toEndpoint" value="${toEndpoint}" />
-</bean>
-----
-
-*bundle-context.cfg*
-
-[source]
-----
-fromEndpoint=activemq:queue:test
-toEndpoint=file://fileRoute/out?fileName=test-$simple{date:now:yyyyMMdd}.txt
-----
-
-Notice how we use the $simple\{ } syntax in the `toEndpoint` above. +
- If you don't do this, there is a clash and Spring will throw an
-exception like
-
-[source,java]
-----------------------------------------------------------------------------------------------------
-org.springframework.beans.factory.BeanDefinitionStoreException:
-Invalid bean definition with name 'sampleRoute' defined in class path resource [bundle-context.xml]:
-Could not resolve placeholder 'date:now:yyyyMMdd'
-----------------------------------------------------------------------------------------------------
-
-== Dependencies
-
-The File language is part of *camel-core*.
diff --git a/docs/components/modules/ROOT/pages/header-language.adoc b/docs/components/modules/ROOT/pages/header-language.adoc
deleted file mode 100644
index c2134f4..0000000
--- a/docs/components/modules/ROOT/pages/header-language.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-[[header-language]]
-= Header Language
-:page-source: core/camel-core-languages/src/main/docs/header-language.adoc
-
-*Since Camel 1.5*
-
-The Header Expression Language allows you to extract values of named
-headers.
-
-== Header Options
-
-// language options: START
-The Header language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The recipientList element of the Spring DSL can utilize a header
-expression like:
-
-In this case, the list of recipients are contained in the header
-'myHeader'.
-
-And the same example in Java DSL:
-
-And with a slightly different syntax where you use the builder to the
-fullest (i.e. avoid using parameters but using stacked operations,
-notice that header is not a parameter but a stacked method call)
-
-[source,java]
-----
-from("direct:a").recipientList().header("myHeader");
-----
-
-== Dependencies
-
-The Header language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/ref-language.adoc b/docs/components/modules/ROOT/pages/ref-language.adoc
deleted file mode 100644
index 0b86da1..0000000
--- a/docs/components/modules/ROOT/pages/ref-language.adoc
+++ /dev/null
@@ -1,58 +0,0 @@
-[[ref-language]]
-= Ref Language
-:page-source: core/camel-core-languages/src/main/docs/ref-language.adoc
-
-*Since Camel 2.8*
-
-The Ref Expression Language is really just a way to lookup a custom
-Expression or Predicate from the Registry.
-
-This is particular useable in XML DSLs.
-
-== Ref Language options
-
-// language options: START
-The Ref language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The Splitter in XML DSL can utilize a custom
-expression using `<ref>` like:
-
-[source,xml]
-----
-<bean id="myExpression" class="com.mycompany.MyCustomExpression"/>
-
-<route>
-  <from uri="seda:a"/>
-  <split>
-    <ref>myExpression</ref>   
-    <to uri="mock:b"/>
-  </split>     
-</route>
-----
-
-in this case, the Message coming from the seda:a
-Endpoint will be splitted using a custom
-Expression which has the id `myExpression` in the
-Registry.
-
-And the same example using Java DSL:
-
-[source,java]
-----
-from("seda:a").split().ref("myExpression").to("seda:b");
-----
-
-== Dependencies
-
-The Ref language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/simple-language.adoc b/docs/components/modules/ROOT/pages/simple-language.adoc
deleted file mode 100644
index c135562..0000000
--- a/docs/components/modules/ROOT/pages/simple-language.adoc
+++ /dev/null
@@ -1,885 +0,0 @@
-[[simple-language]]
-= Simple Language
-:page-source: core/camel-core-languages/src/main/docs/simple-language.adoc
-
-*Since Camel 1.1*
-
-The Simple Expression Language was a really simple language when it was
-created, but has since grown more powerful. It is primarily intended for
-being a really small and simple language for evaluating
-Expressions and Predicates
-without requiring any new dependencies or knowledge of
-xref:components::xpath-language.adoc[XPath]; so it is ideal for testing in camel-core. The
-idea was to cover 95% of the common use cases when you need a little bit
-of expression based script in your Camel routes.
-
-However for much more complex use cases you are generally recommended to
-choose a more expressive and powerful language such as:
-
-* xref:components::groovy-language.adoc[Groovy]
-* xref:components::spel-language.adoc[SpEL]
-* xref:components::mvel-component.adoc[MVEL]
-* xref:components::ognl-language.adoc[OGNL]
-
-The simple language uses `${body`} placeholders for complex expressions
-where the expression contains constant literals. The $\{ } placeholders
-can be omitted if the expression is only the token itself.
-
-[TIP]
-====
-*Alternative syntax* 
-
-You can also use the alternative syntax which
-uses `$simple{ }` as placeholders. This can be used in situations to avoid clashes when using for example
-Spring property placeholder together with Camel.
-====
-
-== Simple Language options
-
-// language options: START
-The Simple language supports 2 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| resultType |  | String | Sets the class name of the result type (type from output)
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Variables
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Variable |Type |Description
-
-|camelId |String |the CamelContext name
-
-|camelContext.*OGNL* |Object |the CamelContext invoked using a Camel OGNL expression.
-
-|exchange |Exchange |the Exchange
-
-|exchange.*OGNL* |Object |the Exchange invoked using a Camel
-OGNL expression.
-
-|exchangeId |String |the exchange id
-
-|id |String |the input message id
-
-|body |Object |the input body
-
-|in.body |Object |*deprecated* the input body
-
-|body.*OGNL* |Object |the input body invoked using a Camel OGNL expression.
-
-|in.body.*OGNL* |Object |*deprecated* the input body invoked using a Camel OGNL expression.
-
-|bodyAs(_type_) |Type |Converts the body to the given type determined by its
-classname. The converted body can be null.
-
-|bodyAs(_type_).*OGNL* |Object |Converts the body to the given type determined by its
-classname and then invoke methods using a Camel OGNL expression. The
-converted body can be null.
-
-|bodyOneLine | String | Converts the body to a String and removes all line-breaks so the string is in one line.
-
-|mandatoryBodyAs(_type_) |Type |Converts the body to the given type determined by its
-classname, and expects the body to be not null.
-
-|mandatoryBodyAs(_type_).*OGNL* |Object |Converts the body to the given type determined by its
-classname and then invoke methods using a Camel OGNL expression.
-
-|header.foo |Object |refer to the input foo header
-
-|header:foo |Object |refer to the input foo header
-
-|header[foo] |Object |refer to the input foo header
-
-|headers.foo |Object |refer to the input foo header
-
-|headers:foo |Object |refer to the input foo header
-
-|headers[foo] |Object |refer to the input foo header
-
-|in.header.foo |Object |*deprecated* refer to the input foo header
-
-|in.header:foo |Object |*deprecated* refer to the input foo header
-
-|in.header[foo] |Object |*deprecated* refer to the input foo header
-
-|in.headers.foo |Object |*deprecated* refer to the input foo header
-
-|in.headers:foo |Object |*deprecated* refer to the input foo header
-
-|in.headers[foo] |Object |*deprecated* refer to the input foo header
-
-|header.foo[bar] |Object |regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|in.header.foo[bar] |Object |*deprecated* regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|in.headers.foo[bar] |Object |*deprecated* regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|header.foo.*OGNL* |Object |refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|in.header.foo.*OGNL* |Object |*deprecated* refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|in.headers.foo.*OGNL* |Object |*deprecated* refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|headerAs(_key_,_type_) |Type |converts the header to the given type determined by its
-classname
-
-|headers |Map |refer to the input headers
-
-|in.headers |Map |*deprecated* refer to the input headers
-
-|exchangeProperty.foo |Object |refer to the foo property on the exchange
-
-|exchangeProperty[foo] |Object |refer to the foo property on the exchange
-
-|exchangeProperty.foo.*OGNL* |Object |refer to the foo property on the exchange and invoke its
-value using a Camel OGNL expression.
-
-|sys.foo |String |refer to the JVM system property
-
-|sysenv.foo |String |refer to the system environment variable
-
-|env.foo |String |refer to the system environment variable
-
-|exception |Object |refer to the exception object on the exchange, is *null* if
-no exception set on exchange. Will fallback and grab caught exceptions
-(`Exchange.EXCEPTION_CAUGHT`) if the Exchange has any.
-
-|exception.*OGNL* |Object |refer to the exchange exception invoked using a Camel OGNL
-expression object
-
-|exception.message |String |refer to the exception.message on the exchange, is *null* if no
-exception set on exchange. Will fallback and grab caught exceptions
-(`Exchange.EXCEPTION_CAUGHT`) if the Exchange has any.
-
-|exception.stacktrace |String |refer to the exception.stracktrace on the exchange, is
-*null* if no exception set on exchange. Will fallback and grab caught
-exceptions (`Exchange.EXCEPTION_CAUGHT`) if the Exchange has any.
-
-|date:_command_ |Date |evaluates to a Date object.
-Supported commands are: *now* for current timestamp, *in.header.xxx* or
-*header.xxx* to use the Date object header with the key xxx.
-*exchangeProperty.xxx* to use the Date object in the exchange property with the key xxx.
-*file* for the last modified timestamp of the file (available with a File consumer).
-Command accepts offsets such as: *now-24h* or *in.header.xxx+1h* or even *now+1h30m-100*.
-
-|date:_command:pattern_ |String |Date formatting using `java.text.SimpleDateFormat` patterns.
-
-|date-with-timezone:_command:timezone:pattern_ |String |Date formatting using `java.text.SimpleDateFormat` timezones and patterns.
-
-|bean:_bean expression_ |Object |Invoking a bean expression using the xref:components::bean-component.adoc[Bean] language.
-Specifying a method name you must use dot as separator. We also support
-the ?method=methodname syntax that is used by the xref:components::bean-component.adoc[Bean]
-component. Camel will by default lookup a bean by the given name. However if you need to refer
-to a bean class (such as calling a static method) then you can prefix with type, such as `bean:type:fqnClassName`.
-
-|`properties:key:default` |String |Lookup a property with the given key. If the key does
-not exists or has no value, then an optional default value can be
-specified.
-
-|routeId |String |Returns the id of the current route the
-Exchange is being routed.
-
-|stepId |String |Returns the id of the current step the
-Exchange is being routed.
-
-|threadName |String |Returns the name of the current thread. Can be used for
-logging purpose.
-
-|hostname |String |Returns the local hostname (may be empty if not possible to resolve).
-
-|ref:xxx |Object |To lookup a bean from the Registry with
-the given id.
-
-|type:name.field |Object |To refer to a type or field by its FQN name. To refer to a
-field you can append .FIELD_NAME. For example you can refer to the
-constant field from Exchange as: `org.apache.camel.Exchange.FILE_NAME`
-
-|null |null |represents a *null*
-
-|random_(value)_ |Integer |returns a random Integer between 0 (included) and _value_
-(excluded)
-
-|random_(min,max)_ |Integer |returns a random Integer between _min_ (included) and
-_max_ (excluded)
-
-|collate(group) |List |The collate function iterates the message body and groups
-the data into sub lists of specified size. This can be used with the
-Splitter EIP to split a message body and group/batch
-the splitted sub message into a group of N sub lists. This method works
-similar to the collate method in Groovy.
-
-|skip(number) |Iterator |The skip function iterates the message body and skips
-the first number of items. This can be used with the
-Splitter EIP to split a message body and skip the first N number of items.
-
-|messageHistory |String |The message history of the current exchange how it has
-been routed. This is similar to the route stack-trace message history
-the error handler logs in case of an unhandled exception.
-
-|messageHistory(false) |String |As messageHistory but without the exchange details (only
-includes the route strack-trace). This can be used if you do not want to
-log sensitive data from the message itself.
-|=======================================================================
-
-== OGNL expression support
-
-INFO:Camel's OGNL support is for invoking methods only. You cannot access
-fields. Camel support accessing the length field of Java arrays.
-
-
-The xref:simple-language.adoc[Simple] and xref:simple-language.adoc[Bean] language now
-supports a Camel OGNL notation for invoking beans in a chain like
-fashion. Suppose the Message IN body contains a POJO which has a `getAddress()`
-method.
-
-Then you can use Camel OGNL notation to access the address object:
-
-[source,java]
---------------------------------
-simple("${body.address}")
-simple("${body.address.street}")
-simple("${body.address.zip}")
---------------------------------
-
-Camel understands the shorthand names for getters, but you can invoke
-any method or use the real name such as:
-
-[source,java]
---------------------------------------
-simple("${body.address}")
-simple("${body.getAddress.getStreet}")
-simple("${body.address.getZip}")
-simple("${body.doSomething}")
---------------------------------------
-
-You can also use the null safe operator (`?.`) to avoid NPE if for
-example the body does NOT have an address
-
-[source,java]
-----------------------------------
-simple("${body?.address?.street}")
-----------------------------------
-
-It is also possible to index in `Map` or `List` types, so you can do:
-
-[source,java]
----------------------------
-simple("${body[foo].name}")
----------------------------
-
-To assume the body is `Map` based and lookup the value with `foo` as
-key, and invoke the `getName` method on that value.
-
-If the key has space, then you *must* enclose the key with quotes, for
-example 'foo bar':
-
-[source,java]
----------------------------------
-simple("${body['foo bar'].name}")
----------------------------------
-
-You can access the `Map` or `List` objects directly using their key name
-(with or without dots) :
-
-[source,java]
-------------------------------
-simple("${body[foo]}")
-simple("${body[this.is.foo]}")
-------------------------------
-
-Suppose there was no value with the key `foo` then you can use the null
-safe operator to avoid the NPE as shown:
-
-[source,java]
-----------------------------
-simple("${body[foo]?.name}")
-----------------------------
-
-You can also access `List` types, for example to get lines from the
-address you can do:
-
-[source,java]
-----------------------------------
-simple("${body.address.lines[0]}")
-simple("${body.address.lines[1]}")
-simple("${body.address.lines[2]}")
-----------------------------------
-
-There is a special `last` keyword which can be used to get the last
-value from a list.
-
-[source,java]
--------------------------------------
-simple("${body.address.lines[last]}")
--------------------------------------
-
-And to get the 2nd last you can subtract a number, so we can use
-`last-1` to indicate this:
-
-[source,java]
----------------------------------------
-simple("${body.address.lines[last-1]}")
----------------------------------------
-
-And the 3rd last is of course:
-
-[source,java]
----------------------------------------
-simple("${body.address.lines[last-2]}")
----------------------------------------
-
-And you can call the size method on the list with
-
-[source,java]
-------------------------------------
-simple("${body.address.lines.size}")
-------------------------------------
-
-Camel supports the length field for Java arrays as well, eg:
-
-[source,java]
----------------------------------------------------
-String[] lines = new String[]{"foo", "bar", "cat"};
-exchange.getIn().setBody(lines);
-
-simple("There are ${body.length} lines")
----------------------------------------------------
-
-And yes you can combine this with the operator support as shown below:
-
-[source,java]
-------------------------------------
-simple("${body.address.zip} > 1000")
-------------------------------------
-
-== Operator support
-
-The parser is limited to only support a single operator.
-
-To enable it the left value must be enclosed in $\{ }. The syntax is:
-
-[source]
---------------------------
-${leftValue} OP rightValue
---------------------------
-
-Where the `rightValue` can be a String literal enclosed in `' '`,
-`null`, a constant value or another expression enclosed in $\{ }.
-
-IMPORTANT: There *must* be spaces around the operator.
-
-Camel will automatically type convert the rightValue type to the
-leftValue type, so it is able to eg. convert a string into a numeric so
-you can use > comparison for numeric values.
-
-The following operators are supported:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Operator |Description
-
-|== |equals
-
-|=~ |equals ignore case (will ignore case when comparing String values)
-
-|> |greater than
-
-|>= |greater than or equals
-
-|< |less than
-
-|<= |less than or equals
-
-|!= |not equals
-
-|!=~ |not equals ignore case (will ignore case when comparing String values)
-
-|contains |For testing if contains in a string based value
-
-|!contains |For testing if not contains in a string based value
-
-|~~ |For testing if contains by ignoring case sensitivity in a string based value
-
-|!~~ |For testing if not contains by ignoring case sensitivity in a string based value
-
-|regex |For matching against a given regular expression pattern defined as a
-String value
-
-|!regex |For not matching against a given regular expression pattern defined as a
-String value
-
-|in |For matching if in a set of values, each element must be separated by
-comma. If you want to include an empty value, then it must be defined using double comma, eg ',,bronze,silver,gold', which
-is a set of four values with an empty value and then the three medals.
-
-|!in |For matching if not in a set of values, each element must be separated
-by comma. If you want to include an empty value, then it must be defined using double comma, eg ',,bronze,silver,gold', which
-is a set of four values with an empty value and then the three medals.
-
-|is |For matching if the left hand side type is an instanceof the value.
-
-|!is |For matching if the left hand side type is not an instanceof the value.
-
-|range |For matching if the left hand side is within a range of values defined
-as numbers: `from..to`..
-
-|!range |For matching if the left hand side is not within a range of values
-defined as numbers: `from..to`. .
-
-|startsWith |For testing if the left hand side string starts
-with the right hand string.
-
-|endsWith |For testing if the left hand side string ends with
-the right hand string.
-|===
-
-And the following unary operators can be used:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Operator |Description
-
-|++ |To increment a number by one. The left hand side must be a
-function, otherwise parsed as literal.
-
-|-- |To decrement a number by one. The left hand side must be a
-function, otherwise parsed as literal.
-
-|\ |To escape a value, eg \$, to indicate a $ sign.
-Special: Use \n for new line, \t for tab, and \r for carriage return.
-*Notice:* Escaping is *not* supported using the
-xref:file-language.adoc[File Language]. *Notice:* The escape character is not supported, use the
-following three special escaping instead.
-
-|\n |To use newline character.
-
-|\t |To use tab character.
-
-|\r |To use carriage return character.
-
-|\} |To use the } character as text
-|===
-
-And the following logical operators can be used to group expressions:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Operator |Description
-
-|&& |The logical and operator is used to group two expressions.
-
-| \|\| |The logical or operator is used to group two expressions.
-|===
-
-The syntax for AND is:
-
-[source]
-----------------------------------------------------------
-${leftValue} OP rightValue && ${leftValue} OP rightValue
-----------------------------------------------------------
-
-And the syntax for OR is:
-
-[source]
----------------------------------------------------------
-${leftValue} OP rightValue || ${leftValue} OP rightValue
----------------------------------------------------------
-
-Some examples:
-
-[source,java]
-----
-// exact equals match
-simple("${in.header.foo} == 'foo'")
-
-// ignore case when comparing, so if the header has value FOO this will match
-simple("${in.header.foo} =~ 'foo'")
-
-// here Camel will type convert '100' into the type of in.header.bar and if it is an Integer '100' will also be converter to an Integer
-simple("${in.header.bar} == '100'")
-
-simple("${in.header.bar} == 100")
-
-// 100 will be converter to the type of in.header.bar so we can do > comparison
-simple("${in.header.bar} > 100")
-----
-
-=== Comparing with different types
-
-When you compare with different types such as String and int, then you
-have to take a bit care. Camel will use the type from the left hand side
-as 1st priority. And fallback to the right hand side type if both values
-couldn't be compared based on that type. +
- This means you can flip the values to enforce a specific type. Suppose
-the bar value above is a String. Then you can flip the equation:
-
-[source,java]
-----
-simple("100 < ${in.header.bar}")
-----
-
-which then ensures the int type is used as 1st priority.
-
-This may change in the future if the Camel team improves the binary
-comparison operations to prefer numeric types over String based. It's
-most often the String type which causes problem when comparing with
-numbers.
-
-[source,java]
-----
-// testing for null
-simple("${in.header.baz} == null")
-
-// testing for not null
-simple("${in.header.baz} != null")
-----
-
-And a bit more advanced example where the right value is another
-expression
-
-[source,java]
-----
-simple("${in.header.date} == ${date:now:yyyyMMdd}")
-
-simple("${in.header.type} == ${bean:orderService?method=getOrderType}")
-----
-
-And an example with contains, testing if the title contains the word
-Camel
-
-[source,java]
-----
-simple("${in.header.title} contains 'Camel'")
-----
-
-And an example with regex, testing if the number header is a 4 digit
-value:
-
-[source,java]
-----
-simple("${in.header.number} regex '\\d{4}'")
-----
-
-And finally an example if the header equals any of the values in the
-list. Each element must be separated by comma, and no space around. +
- This also works for numbers etc, as Camel will convert each element
-into the type of the left hand side.
-
-[source,java]
-----
-simple("${in.header.type} in 'gold,silver'")
-----
-
-And for all the last 3 we also support the negate test using not:
-
-[source,java]
-----
-simple("${in.header.type} !in 'gold,silver'")
-----
-
-And you can test if the type is a certain instance, eg for instance a
-String
-
-[source,java]
-----
-simple("${in.header.type} is 'java.lang.String'")
-----
-
-We have added a shorthand for all `java.lang` types so you can write it
-as:
-
-[source,java]
-----
-simple("${in.header.type} is 'String'")
-----
-
-Ranges are also supported. The range interval requires numbers and both
-from and end are inclusive. For instance to test whether a value is
-between 100 and 199:
-
-[source,java]
-----
-simple("${in.header.number} range 100..199")
-----
-
-Notice we use `..` in the range without spaces. It is based on the same
-syntax as Groovy.
-
-From *Camel 2.9* onwards the range value must be in single quotes
-
-[source,java]
-----
-simple("${in.header.number} range '100..199'")
-----
-
-=== Using Spring XML
-
-As the Spring XML does not have all the power as the Java DSL with all
-its various builder methods, you have to resort to use some other
-languages for testing with simple operators. Now you can do this with the simple
-language. In the sample below we want to test if the header is a widget
-order:
-
-[source,xml]
-----
-<from uri="seda:orders">
-   <filter>
-       <simple>${in.header.type} == 'widget'</simple>
-       <to uri="bean:orderService?method=handleWidget"/>
-   </filter>
-</from>
-----
-
-== Using and / or
-
-If you have two expressions you can combine them with the `&&` or `||`
-operator.
-
-For instance:
-
-[source,java]
------
-simple("${in.header.title} contains 'Camel' && ${in.header.type'} == 'gold'")
------
-
-And of course the `||` is also supported. The sample would be:
-
-[source,java]
------
-simple("${in.header.title} contains 'Camel' || ${in.header.type'} == 'gold'")
------
-
-*Notice:* Currently `&&` or `||` can only be used *once* in a simple
-language expression. This might change in the future. +
- So you *cannot* do:
-
-[source,java]
------
-simple("${in.header.title} contains 'Camel' && ${in.header.type'} == 'gold' && ${in.header.number} range 100..200")
------
-
-
-== Samples
-
-In the Spring XML sample below we filter based on a header value:
-
-[source,xml]
---------------------------------------------
-<from uri="seda:orders">
-   <filter>
-       <simple>${in.header.foo}</simple>
-       <to uri="mock:fooOrders"/>
-   </filter>
-</from>
---------------------------------------------
-
-The Simple language can be used for the predicate test above in the
-Message Filter pattern, where we test if the
-in message has a `foo` header (a header with the key `foo` exists). If
-the expression evaluates to *true* then the message is routed to the
-`mock:fooOrders` endpoint, otherwise the message is dropped.
-
-The same example in Java DSL:
-
-[source,java]
-----
-from("seda:orders")
-    .filter().simple("${in.header.foo}")
-        .to("seda:fooOrders");
-----
-
-You can also use the simple language for simple text concatenations such
-as:
-
-[source,java]
-----
-from("direct:hello")
-    .transform().simple("Hello ${in.header.user} how are you?")
-    .to("mock:reply");
-----
-
-Notice that we must use $\{ } placeholders in the expression now to
-allow Camel to parse it correctly.
-
-And this sample uses the date command to output current date.
-
-[source,java]
-----
-from("direct:hello")
-    .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
-    .to("mock:reply");
-----
-
-And in the sample below we invoke the bean language to invoke a method
-on a bean to be included in the returned string:
-
-[source,java]
-----
-from("direct:order")
-    .transform().simple("OrderId: ${bean:orderIdGenerator}")
-    .to("mock:reply");
-----
-
-Where `orderIdGenerator` is the id of the bean registered in the
-Registry. If using Spring then it is the Spring bean
-id.
-
-If we want to declare which method to invoke on the order id generator
-bean we must prepend `.method name` such as below where we invoke the
-`generateId` method.
-
-[source,java]
-----
-from("direct:order")
-    .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
-    .to("mock:reply");
-----
-
-We can use the `?method=methodname` option that we are familiar with the
-xref:components::bean-component.adoc[Bean] component itself:
-
-[source,java]
-----
-from("direct:order")
-    .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
-    .to("mock:reply");
-----
-
-You can also convert the body to a given
-type, for example to ensure that it is a String you can do:
-
-[source,xml]
-----
-<transform>
-  <simple>Hello ${bodyAs(String)} how are you?</simple>
-</transform>
-----
-
-There are a few types which have a shorthand notation, so we can use
-`String` instead of `java.lang.String`. These are:
-`byte[], String, Integer, Long`. All other types must use their FQN
-name, e.g. `org.w3c.dom.Document`.
-
-It is also possible to lookup a value from a header `Map`:
-
-[source,xml]
-----
-<transform>
-  <simple>The gold value is ${header.type[gold]}</simple>
-</transform>
-----
-
-In the code above we lookup the header with name `type` and regard it as
-a `java.util.Map` and we then lookup with the key `gold` and return the
-value. If the header is not convertible to Map an exception is thrown. If the
-header with name `type` does not exist `null` is returned.
-
-You can nest functions, such as shown below:
-
-[source,xml]
-----
-<setHeader name="myHeader">
-  <simple>${properties:${header.someKey}}</simple>
-</setHeader>
-----
-
-== Referring to constants or enums
-
-Suppose you have an enum for customers
-
-And in a Content Based Router we can use
-the xref:simple-language.adoc[Simple] language to refer to this enum, to check
-the message which enum it matches.
-
-== Using new lines or tabs in XML DSLs
-
-It is easier to specify new lines or tabs in
-XML DSLs as you can escape the value now
-
-[source,xml]
-----
-<transform>
-  <simple>The following text\nis on a new line</simple>
-</transform>
-----
-
-== Leading and trailing whitespace handling
-
-The trim attribute of the expression can be
-used to control whether the leading and trailing whitespace characters
-are removed or preserved. The default value is true, which removes the
-whitespace characters.
-
-[source,xml]
-----
-<setBody>
-  <simple trim="false">You get some trailing whitespace characters.     </simple>
-</setBody>
-----
-
-== Setting result type
-
-You can now provide a result type to the xref:simple-language.adoc[Simple]
-expression, which means the result of the evaluation will be converted
-to the desired type. This is most usable to define types such as
-booleans, integers, etc.
-
-For example to set a header as a boolean type you can do:
-
-[source,java]
-----
-.setHeader("cool", simple("true", Boolean.class))
-----
-
-And in XML DSL
-
-[source,xml]
-----
-<setHeader name="cool">
-  <!-- use resultType to indicate that the type should be a java.lang.Boolean -->
-  <simple resultType="java.lang.Boolean">true</simple>
-</setHeader>
-----
-
-== Loading script from external resource
-
-You can externalize the script and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-----
-.setHeader("myHeader").simple("resource:classpath:mysimple.txt")
-----
-
-== Setting Spring beans to Exchange properties
-
-You can set a spring bean into an exchange property as shown below:
-
-[source,xml]
-----
-<bean id="myBeanId" class="my.package.MyCustomClass" />
-...
-<route>
-  ...
-  <setProperty name="monitoring.message">
-    <simple>ref:myBeanId</simple>
-  </setProperty>
-  ...
-</route>
-----
-
diff --git a/docs/components/modules/ROOT/pages/tokenize-language.adoc b/docs/components/modules/ROOT/pages/tokenize-language.adoc
deleted file mode 100644
index bf1f30a..0000000
--- a/docs/components/modules/ROOT/pages/tokenize-language.adoc
+++ /dev/null
@@ -1,40 +0,0 @@
-[[tokenize-language]]
-= Tokenize Language
-:page-source: core/camel-core-languages/src/main/docs/tokenize-language.adoc
-
-*Since Camel 2.0*
-
-The tokenizer language is a built-in language in camel-core, which is
-most often used only with the Splitter EIP to split
-a message using a token-based strategy. +
-The tokenizer language is intended to tokenize text documents using a
-specified delimiter pattern. It can also be used to tokenize XML
-documents with some limited capability. For a truly XML-aware
-tokenization, the use of the XMLTokenizer
-language is recommended as it offers a faster, more efficient
-tokenization specifically for XML documents. For more details
-see Splitter.
-
-== Tokenize Options
-
-// language options: START
-The Tokenize language supports 11 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| token |  | String | The (start) token to use as tokenizer, for example you can use the new line token. You can use simple language as the token to support dynamic tokens.
-| endToken |  | String | The end token to use as tokenizer if using start/end token pairs. You can use simple language as the token to support dynamic tokens.
-| inheritNamespaceTagName |  | String | To inherit namespaces from a root/parent tag name when using XML You can use simple language as the tag name to support dynamic names.
-| headerName |  | String | Name of header to tokenize instead of using the message body.
-| regex | false | Boolean | If the token is a regular expression pattern. The default value is false
-| xml | false | Boolean | Whether the input is XML messages. This option must be set to true if working with XML payloads.
-| includeTokens | false | Boolean | Whether to include the tokens in the parts when using pairs The default value is false
-| group |  | String | To group N parts together, for example to split big files into chunks of 1000 lines. You can use simple language as the group to support dynamic group sizes.
-| groupDelimiter |  | String | Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter.
-| skipFirst | false | Boolean | To skip the very first element
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
diff --git a/docs/components/modules/ROOT/pages/xtokenize-language.adoc b/docs/components/modules/ROOT/pages/xtokenize-language.adoc
deleted file mode 100644
index 14b35bf..0000000
--- a/docs/components/modules/ROOT/pages/xtokenize-language.adoc
+++ /dev/null
@@ -1,32 +0,0 @@
-[[xtokenize-language]]
-= XML Tokenize Language
-:page-source: core/camel-xml-jaxp/src/main/docs/xtokenize-language.adoc
-
-*Since Camel 2.14*
-
-The xml tokenizer language is a built-in language in camel-core, which
-is a truly XML-aware tokenizer that can be used with the Splitter as the
-conventional Tokenizer to efficiently and
-effectively tokenize XML documents. XMLTokenizer is capable of not only
-recognizing XML namespaces and hierarchical structures of the document
-but also more efficiently tokenizing XML documents than the conventional
-Tokenizer. 
-
-For more details see Splitter.
-
-== XML Tokenizer Options
-
-// language options: START
-The XML Tokenize language supports 4 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| headerName |  | String | Name of header to tokenize instead of using the message body.
-| mode |  | String | The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element
-| group |  | Integer | To group N parts together
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
\ No newline at end of file
diff --git a/docs/gulpfile.js b/docs/gulpfile.js
index 9a99f71..a6f529d 100644
--- a/docs/gulpfile.js
+++ b/docs/gulpfile.js
@@ -75,24 +75,26 @@ function createComponentImageSymlinks() {
         .pipe(dest('components/modules/ROOT/assets/images/'));
 }
 
-function deleteUserManualSymlinks() {
-    return del(['user-manual/modules/ROOT/pages/*-eip.adoc', 'user-manual/modules/ROOT/pages/*-language.adoc']);
-}
-
-function createUserManualSymlinks() {
-    return src(['../core/camel-base/src/main/docs/*.adoc', '../core/camel-core-languages/src/main/docs/*.adoc', '../core/camel-xml-jaxp/src/main/docs/*.adoc', '../core/camel-core-engine/src/main/docs/eips/*.adoc'])
-        // Antora disabled symlinks, there is an issue open
-        // https://gitlab.com/antora/antora/issues/188
-        // to reinstate symlink support, until that's resolved
-        // we'll simply copy over instead of creating symlinks
-        // .pipe(symlink('user-manual/modules/ROOT/pages/', {
-        //     relativeSymlinks: true
-        // }));
-        // uncomment above .pipe() and remove the .pipe() below
-        // when antora#188 is resolved
-        .pipe(insertSourceAttribute())
-        .pipe(dest('user-manual/modules/ROOT/pages/'));
-}
+// function deleteUserManualSymlinks() {
+//     return del(['user-manual/modules/ROOT/pages/*-eip.adoc', 'user-manual/modules/ROOT/pages/*-language.adoc']);
+// }
+
+// NOTE! the single adoc at ../core/camel-base/src/main/docs/*.adoc doesn't appear to have generated content.  Can it just be moved to the rest of the user manual?
+
+// function createUserManualSymlinks() {
+//     return src(['../core/camel-base/src/main/docs/*.adoc', '../core/camel-core-languages/src/main/docs/*.adoc', '../core/camel-xml-jaxp/src/main/docs/*.adoc', '../core/camel-core-engine/src/main/docs/eips/*.adoc'])
+//         // Antora disabled symlinks, there is an issue open
+//         // https://gitlab.com/antora/antora/issues/188
+//         // to reinstate symlink support, until that's resolved
+//         // we'll simply copy over instead of creating symlinks
+//         // .pipe(symlink('user-manual/modules/ROOT/pages/', {
+//         //     relativeSymlinks: true
+//         // }));
+//         // uncomment above .pipe() and remove the .pipe() below
+//         // when antora#188 is resolved
+//         .pipe(insertSourceAttribute())
+//         .pipe(dest('user-manual/modules/ROOT/pages/'));
+// }
 
 function titleFrom(file) {
     const maybeName = /(?:=|#) (.*)/.exec(file.contents.toString())
@@ -122,7 +124,7 @@ function insertSourceAttribute() {
 function createComponentNav() {
     return src('component-nav.adoc.template')
         .pipe(insertGeneratedNotice())
-        .pipe(inject(src(['../core/camel-base/src/main/docs/*-component.adoc', '../core/camel-core-languages/src/main/docs/*-component.adoc', '../components/{*,*/*}/src/main/docs/*.adoc']).pipe(sort()), {
+        .pipe(inject(src(['../core/camel-base/src/main/docs/*-component.adoc', '../components/{*,*/*}/src/main/docs/*.adoc']).pipe(sort()), {
             removeTags: true,
             transform: (filename, file) => {
                 const filepath = path.basename(filename);
@@ -137,22 +139,22 @@ function createComponentNav() {
 function createUserManualNav() {
     return src('user-manual-nav.adoc.template')
         .pipe(insertGeneratedNotice())
-        .pipe(inject(src('../core/camel-base/src/main/docs/*.adoc').pipe(sort()), {
+        .pipe(inject(src('../core/camel-core-languages/src/main/docs/modules/languages/pages/*.adoc').pipe(sort()), {
             removeTags: true,
             name: 'languages',
             transform: (filename, file) => {
                 const filepath = path.basename(filename);
                 const title = titleFrom(file);
-                return ` ** xref:${filepath}[${title}]`;
+                return ` ** xref:languages:${filepath}[${title}]`;
             }
         }))
-        .pipe(inject(src('../core/camel-core-engine/src/main/docs/eips/*.adoc').pipe(sort()), {
+        .pipe(inject(src('../core/camel-core-engine/src/main/docs/modules/eips/pages/*.adoc').pipe(sort()), {
             removeTags: true,
             name: 'eips',
             transform: (filename, file) => {
                 const filepath = path.basename(filename);
                 const title = titleFrom(file);
-                return ` ** xref:${filepath}[${title}]`;
+                return ` ** xref:eips:${filepath}[${title}]`;
             }
         }))
         .pipe(rename('nav.adoc'))
@@ -196,8 +198,8 @@ function createComponentExamples() {
 
 const symlinks = parallel(
     series(deleteComponentSymlinks, createComponentSymlinks),
-    series(deleteComponentImageSymlinks, createComponentImageSymlinks),
-    series(deleteUserManualSymlinks, createUserManualSymlinks)
+    series(deleteComponentImageSymlinks, createComponentImageSymlinks)
+    // series(deleteUserManualSymlinks, createUserManualSymlinks)
 );
 const nav = parallel(createComponentNav, createUserManualNav);
 const examples = series(deleteExamples, createUserManualExamples, createComponentExamples);
diff --git a/docs/user-manual/modules/ROOT/nav.adoc b/docs/user-manual/modules/ROOT/nav.adoc
index 174090d..a0df097 100644
--- a/docs/user-manual/modules/ROOT/nav.adoc
+++ b/docs/user-manual/modules/ROOT/nav.adoc
@@ -52,79 +52,85 @@
  ** xref:spring.adoc[Spring support]
 * xref:using-osgi-blueprint-with-camel.adoc[Using OSGi blueprint with Camel]
 * Supported expression languages
- ** xref:properties-component.adoc[Properties Component]
+ ** xref:languages:constant-language.adoc[Constant Language]
+ ** xref:languages:exchangeProperty-language.adoc[ExchangeProperty Language]
+ ** xref:languages:file-language.adoc[File Language]
+ ** xref:languages:header-language.adoc[Header Language]
+ ** xref:languages:ref-language.adoc[Ref Language]
+ ** xref:languages:simple-language.adoc[Simple Language]
+ ** xref:languages:tokenize-language.adoc[Tokenize Language]
 * xref:enterprise-integration-patterns.adoc[Enterprise Integration Patterns]
- ** xref:aggregate-eip.adoc[Aggregate EIP]
- ** xref:batch-config-eip.adoc[Batch-config EIP]
- ** xref:bean-eip.adoc[Bean EIP]
- ** xref:choice-eip.adoc[Choice EIP]
- ** xref:circuitBreaker-eip.adoc[CircuitBreaker EIP]
- ** xref:claimCheck-eip.adoc[Claim Check EIP]
- ** xref:content-based-router-eip.adoc[Content Based Router]
- ** xref:content-filter-eip.adoc[Content Filter]
- ** xref:convertBodyTo-eip.adoc[Convert Body To EIP]
- ** xref:customLoadBalancer-eip.adoc[Custom Load Balancer EIP]
- ** xref:delay-eip.adoc[Delay EIP]
- ** xref:dynamic-router.adoc[Dynamic Router]
- ** xref:dynamicRouter-eip.adoc[Dynamic Router EIP]
- ** xref:enrich-eip.adoc[Enrich EIP]
- ** xref:eventDrivenConsumer-eip.adoc[Event Driven Consumer]
- ** xref:failover-eip.adoc[Failover EIP]
- ** xref:filter-eip.adoc[Filter EIP]
- ** xref:from-eip.adoc[From EIP]
- ** xref:hystrix-eip.adoc[Hystrix EIP]
- ** xref:hystrixConfiguration-eip.adoc[Hystrix Configuration EIP]
- ** xref:idempotentConsumer-eip.adoc[Idempotent Consumer EIP]
- ** xref:inOnly-eip.adoc[In Only EIP]
- ** xref:inOut-eip.adoc[In Out EIP]
- ** xref:loadBalance-eip.adoc[Load Balance EIP]
- ** xref:log-eip.adoc[Log EIP]
- ** xref:loop-eip.adoc[Loop EIP]
- ** xref:marshal-eip.adoc[Marshal EIP]
- ** xref:multicast-eip.adoc[Multicast EIP]
- ** xref:onFallback-eip.adoc[On Fallback EIP]
- ** xref:otherwise-eip.adoc[Otherwise EIP]
- ** xref:pipeline-eip.adoc[Pipeline EIP]
- ** xref:pollEnrich-eip.adoc[Poll Enrich EIP]
- ** xref:process-eip.adoc[Process EIP]
- ** xref:random-eip.adoc[Random EIP]
- ** xref:recipientList-eip.adoc[Recipient List EIP]
- ** xref:removeHeader-eip.adoc[Remove Header EIP]
- ** xref:removeHeaders-eip.adoc[Remove Headers EIP]
- ** xref:removeProperties-eip.adoc[Remove Properties EIP]
- ** xref:removeProperty-eip.adoc[Remove Property EIP]
- ** xref:requestReply-eip.adoc[Request Reply]
- ** xref:resequence-eip.adoc[Resequence EIP]
- ** xref:resilience4j-eip.adoc[Resilience4j EIP]
- ** xref:resilience4jConfiguration-eip.adoc[Resilience4j Configuration EIP]
- ** xref:rollback-eip.adoc[Rollback EIP]
- ** xref:roundRobin-eip.adoc[Round Robin EIP]
- ** xref:routingSlip-eip.adoc[Routing Slip EIP]
- ** xref:saga-eip.adoc[Saga EIP]
- ** xref:sample-eip.adoc[Sample EIP]
- ** xref:script-eip.adoc[Script EIP]
- ** xref:serviceCall-eip.adoc[Service Call EIP]
- ** xref:setBody-eip.adoc[Set Body EIP]
- ** xref:setHeader-eip.adoc[Set Header EIP]
- ** xref:setOutHeader-eip.adoc[Set Out Header EIP (deprecated)]
- ** xref:setProperty-eip.adoc[Set Property EIP]
- ** xref:sort-eip.adoc[Sort EIP]
- ** xref:split-eip.adoc[Split EIP]
- ** xref:step-eip.adoc[Step EIP]
- ** xref:sticky-eip.adoc[Sticky EIP]
- ** xref:stop-eip.adoc[Stop EIP]
- ** xref:stream-config-eip.adoc[Stream-config EIP]
- ** xref:threads-eip.adoc[Threads EIP]
- ** xref:throttle-eip.adoc[Throttle EIP]
- ** xref:to-eip.adoc[To EIP]
- ** xref:toD-eip.adoc[To D EIP]
- ** xref:topic-eip.adoc[Topic EIP]
- ** xref:transform-eip.adoc[Transform EIP]
- ** xref:unmarshal-eip.adoc[Unmarshal EIP]
- ** xref:validate-eip.adoc[Validate EIP]
- ** xref:weighted-eip.adoc[Weighted EIP]
- ** xref:when-eip.adoc[When EIP]
- ** xref:wireTap-eip.adoc[Wire Tap EIP]
+ ** xref:eips:aggregate-eip.adoc[Aggregate EIP]
+ ** xref:eips:batch-config-eip.adoc[Batch-config EIP]
+ ** xref:eips:bean-eip.adoc[Bean EIP]
+ ** xref:eips:choice-eip.adoc[Choice EIP]
+ ** xref:eips:circuitBreaker-eip.adoc[CircuitBreaker EIP]
+ ** xref:eips:claimCheck-eip.adoc[Claim Check EIP]
+ ** xref:eips:content-based-router-eip.adoc[Content Based Router]
+ ** xref:eips:content-filter-eip.adoc[Content Filter]
+ ** xref:eips:convertBodyTo-eip.adoc[Convert Body To EIP]
+ ** xref:eips:customLoadBalancer-eip.adoc[Custom Load Balancer EIP]
+ ** xref:eips:delay-eip.adoc[Delay EIP]
+ ** xref:eips:dynamic-router.adoc[Dynamic Router]
+ ** xref:eips:dynamicRouter-eip.adoc[Dynamic Router EIP]
+ ** xref:eips:enrich-eip.adoc[Enrich EIP]
+ ** xref:eips:eventDrivenConsumer-eip.adoc[Event Driven Consumer]
+ ** xref:eips:failover-eip.adoc[Failover EIP]
+ ** xref:eips:filter-eip.adoc[Filter EIP]
+ ** xref:eips:from-eip.adoc[From EIP]
+ ** xref:eips:hystrix-eip.adoc[Hystrix EIP]
+ ** xref:eips:hystrixConfiguration-eip.adoc[Hystrix Configuration EIP]
+ ** xref:eips:idempotentConsumer-eip.adoc[Idempotent Consumer EIP]
+ ** xref:eips:inOnly-eip.adoc[In Only EIP]
+ ** xref:eips:inOut-eip.adoc[In Out EIP]
+ ** xref:eips:loadBalance-eip.adoc[Load Balance EIP]
+ ** xref:eips:log-eip.adoc[Log EIP]
+ ** xref:eips:loop-eip.adoc[Loop EIP]
+ ** xref:eips:marshal-eip.adoc[Marshal EIP]
+ ** xref:eips:multicast-eip.adoc[Multicast EIP]
+ ** xref:eips:onFallback-eip.adoc[On Fallback EIP]
+ ** xref:eips:otherwise-eip.adoc[Otherwise EIP]
+ ** xref:eips:pipeline-eip.adoc[Pipeline EIP]
+ ** xref:eips:pollEnrich-eip.adoc[Poll Enrich EIP]
+ ** xref:eips:process-eip.adoc[Process EIP]
+ ** xref:eips:random-eip.adoc[Random EIP]
+ ** xref:eips:recipientList-eip.adoc[Recipient List EIP]
+ ** xref:eips:removeHeader-eip.adoc[Remove Header EIP]
+ ** xref:eips:removeHeaders-eip.adoc[Remove Headers EIP]
+ ** xref:eips:removeProperties-eip.adoc[Remove Properties EIP]
+ ** xref:eips:removeProperty-eip.adoc[Remove Property EIP]
+ ** xref:eips:requestReply-eip.adoc[Request Reply]
+ ** xref:eips:resequence-eip.adoc[Resequence EIP]
+ ** xref:eips:resilience4j-eip.adoc[Resilience4j EIP]
+ ** xref:eips:resilience4jConfiguration-eip.adoc[Resilience4j Configuration EIP]
+ ** xref:eips:rollback-eip.adoc[Rollback EIP]
+ ** xref:eips:roundRobin-eip.adoc[Round Robin EIP]
+ ** xref:eips:routingSlip-eip.adoc[Routing Slip EIP]
+ ** xref:eips:saga-eip.adoc[Saga EIP]
+ ** xref:eips:sample-eip.adoc[Sample EIP]
+ ** xref:eips:script-eip.adoc[Script EIP]
+ ** xref:eips:serviceCall-eip.adoc[Service Call EIP]
+ ** xref:eips:setBody-eip.adoc[Set Body EIP]
+ ** xref:eips:setHeader-eip.adoc[Set Header EIP]
+ ** xref:eips:setOutHeader-eip.adoc[Set Out Header EIP (deprecated)]
+ ** xref:eips:setProperty-eip.adoc[Set Property EIP]
+ ** xref:eips:sort-eip.adoc[Sort EIP]
+ ** xref:eips:split-eip.adoc[Split EIP]
+ ** xref:eips:step-eip.adoc[Step EIP]
+ ** xref:eips:sticky-eip.adoc[Sticky EIP]
+ ** xref:eips:stop-eip.adoc[Stop EIP]
+ ** xref:eips:stream-config-eip.adoc[Stream-config EIP]
+ ** xref:eips:threads-eip.adoc[Threads EIP]
+ ** xref:eips:throttle-eip.adoc[Throttle EIP]
+ ** xref:eips:to-eip.adoc[To EIP]
+ ** xref:eips:toD-eip.adoc[To D EIP]
+ ** xref:eips:topic-eip.adoc[Topic EIP]
+ ** xref:eips:transform-eip.adoc[Transform EIP]
+ ** xref:eips:unmarshal-eip.adoc[Unmarshal EIP]
+ ** xref:eips:validate-eip.adoc[Validate EIP]
+ ** xref:eips:weighted-eip.adoc[Weighted EIP]
+ ** xref:eips:when-eip.adoc[When EIP]
+ ** xref:eips:wireTap-eip.adoc[Wire Tap EIP]
 * Frequently asked questions
  ** xref:faq/can-i-get-commercial-support.adoc[Can I get commercial support?]
  ** xref:faq/does-camel-work-on-ibms-jdk.adoc[Does Camel work on IBM's JDK?]
diff --git a/docs/user-manual/modules/ROOT/pages/aggregate-eip.adoc b/docs/user-manual/modules/ROOT/pages/aggregate-eip.adoc
deleted file mode 100644
index e129a26..0000000
--- a/docs/user-manual/modules/ROOT/pages/aggregate-eip.adoc
+++ /dev/null
@@ -1,673 +0,0 @@
-[[aggregate-eip]]
-= Aggregate EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/aggregate-eip.adoc
-
-The
-http://www.enterpriseintegrationpatterns.com/Aggregator.html[Aggregator]
-from the xref:enterprise-integration-patterns.adoc[EIP patterns] allows
-you to combine a number of messages together into a single message.
-
-image::eip/Aggregator.gif[image]
-
-A correlation xref:expression.adoc[Expression] is used to determine the
-messages which should be aggregated together. If you want to aggregate
-all messages into a single message, just use a constant expression. An
-AggregationStrategy is used to combine all the message exchanges for a
-single correlation key into a single message exchange.
-
-== Aggregator options
-
-// eip options: START
-The Aggregate EIP supports 27 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *correlationExpression* | *Required* The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this by using the ignoreBadCorrelationKeys option. |  | NamespaceAware Expression
-| *completionPredicate* | A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy object implements Predicate, the aggregationStrategy object will be used as the completionPredicate. |  | NamespaceAware Expression
-| *completionTimeoutExpression* | Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout c [...]
-| *completionSizeExpression* | Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. |  | NamespaceAware Expression
-| *optimisticLockRetryPolicy* | Allows to configure retry settings when using optimistic locking. |  | OptimisticLockRetry PolicyDefinition
-| *parallelProcessing* | When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel creates a default pool with 10 concurrent threads. | false | Boolean
-| *optimisticLocking* | Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by implementing org.apache.camel.spi.OptimisticLockingAggregationRepository. | false | Boolean
-| *executorServiceRef* | If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using parallelProcessing this custom thread pool is used to send out aggregated exchanges as well. |  | String
-| *timeoutCheckerExecutor ServiceRef* | If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used rather than creating a new thread for every aggregator. |  | String
-| *aggregationRepositoryRef* | Sets the custom aggregate repository to use Will by default use org.apache.camel.processor.aggregate.MemoryAggregationRepository |  | String
-| *strategyRef* | A reference to lookup the AggregationStrategy in the Registry. Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains the merged exchanges and newExchange is of course the new incoming Exchange. |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used for the very first aggregation. If this option is true then null values is used as the oldExchange (at the very first aggregation), when using POJOs as the AggregationStrategy. | false | Boolean
-| *completionSize* | Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. |  | Integer
-| *completionInterval* | A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a background task which is triggered every period. You cannot use this option together with completionTimeout, only one of them can be used. |  | Long
-| *completionTimeout* | Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot use this option together with completionInterval, only one of the two can be used. By default the timeout checker run [...]
-| *completionTimeoutChecker Interval* | Interval in millis that is used by the background task that checks for timeouts (org.apache.camel.TimeoutMap). By default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker intervals. | 1000 | Long
-| *completionFromBatchConsumer* | Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with discardOnAggregationFailure. | false | Boolean
-| *completionOnNewCorrelation Group* | Enables completion on all previous groups when a new incoming correlation group. This can for example be used to complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1 correlation group can be in progress as when a new correlation group starts, then the previous groups is forced completed. | false | Boolean
-| *eagerCheckCompletion* | Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange. | false | Boolean
-| *ignoreInvalidCorrelation Keys* | If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the incoming Exchange. | false | Boolean
-| *closeCorrelationKeyOn Completion* | Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been closed, it will be defined and a ClosedCorrelationKeyException is thrown. |  | Integer
-| *discardOnCompletionTimeout* | Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not sent out of the aggregator. | false | Boolean
-| *discardOnAggregationFailure* | Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy. This means the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with completionFromBatchConsumer. | false | Boolean
-| *forceCompletionOnStop* | Indicates to complete all current aggregated exchanges when the context is stopped | false | Boolean
-| *completeAllOnStop* | Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is [...]
-| *aggregateControllerRef* | To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator. |  | String
-|===
-// eip options: END
-
-== About AggregationStrategy
-
-The `AggregationStrategy` is used for aggregating the old (lookup by its
-correlation id) and the new exchanges together into a single exchange.
-Possible implementations include performing some kind of combining or
-delta processing, such as adding line items together into an invoice or
-just using the newest exchange and removing old exchanges such as for
-state tracking or market data prices; where old values are of little
-use.
-
-Notice the aggregation strategy is a mandatory option and must be
-provided to the aggregator.
-
-IMPORTANT: In the aggregate method, do not create a new exchange instance to return,
-instead return either the old or new exchange from the input parameters;
-favor returning the old exchange whenever possible.
-
-Here are a few example `AggregationStrategy` implementations that should
-help you create your own custom strategy.
-
-[source,java]
-----
-//simply combines Exchange String body values using '+' as a delimiter
-class StringAggregationStrategy implements AggregationStrategy {
-
-    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-        if (oldExchange == null) {
-            return newExchange;
-        }
-
-        String oldBody = oldExchange.getIn().getBody(String.class);
-        String newBody = newExchange.getIn().getBody(String.class);
-        oldExchange.getIn().setBody(oldBody + "+" + newBody);
-        return oldExchange;
-    }
-}
-
-//simply combines Exchange body values into an ArrayList<Object>
-class ArrayListAggregationStrategy implements AggregationStrategy {
-
-    public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-        Object newBody = newExchange.getIn().getBody();
-        ArrayList<Object> list = null;
-        if (oldExchange == null) {
-            list = new ArrayList<Object>();
-            list.add(newBody);
-            newExchange.getIn().setBody(list);
-            return newExchange;
-        } else {
-            list = oldExchange.getIn().getBody(ArrayList.class);
-            list.add(newBody);
-            return oldExchange;
-        }
-    }
-}
-----
-
-== About completion
-
-When aggregation xref:exchange.adoc[Exchange]s at some point you need to
-indicate that the aggregated exchanges is complete, so they can be send
-out of the aggregator. Camel allows you to indicate completion in
-various ways as follows:
-
-* completionTimeout - Is an inactivity timeout in which is triggered if
-no new exchanges have been aggregated for that particular correlation
-key within the period.
-* completionInterval - Once every X period all the current aggregated
-exchanges are completed.
-* completionSize - Is a number indicating that after X aggregated
-exchanges it's complete.
-* completionPredicate - Runs a xref:predicate.adoc[Predicate] when a new
-exchange is aggregated to determine if we are complete or not.
-The configured aggregationStrategy can implement the
-Predicate interface and will be used as the completionPredicate if no
-completionPredicate is configured. The configured aggregationStrategy can
-implement `PreCompletionAwareAggregationStrategy` and will be used as
-the completionPredicate in pre-complete check mode. See further below
-for more details.
-* completionFromBatchConsumer - Special option for
-xref:batch-consumer.adoc[Batch Consumer] which allows you to complete
-when all the messages from the batch has been aggregated.
-* forceCompletionOnStop - Indicates to complete all current
-aggregated exchanges when the context is stopped
-* Using a `AggregateController` - which allows to use an
-external source to complete groups or all groups. This can be done using
-Java or JMX API.
-
-Notice that all the completion ways are per correlation key. And you can
-combine them in any way you like. It's basically the first which
-triggers that wins. So you can use a completion size together with a
-completion timeout. Only completionTimeout and completionInterval cannot
-be used at the same time.
-
-Notice the completion is a mandatory option and must be provided to the
-aggregator. If not provided Camel will thrown an Exception on startup.
-
-== Pre-completion mode
-
-There can be use-cases where you want the incoming
-xref:exchange.adoc[Exchange] to determine if the correlation group
-should pre-complete, and then the incoming
-xref:exchange.adoc[Exchange] is starting a new group from scratch. To
-determine this the `AggregationStrategy` can
-implement `PreCompletionAwareAggregationStrategy` which has
-a `preComplete` method:
-
-[source,java]
-----
-    /**
-     * Determines if the aggregation should complete the current group, and start a new group, or the aggregation
-     * should continue using the current group.
-     *
-     * @param oldExchange the oldest exchange (is <tt>null</tt> on first aggregation as we only have the new exchange)
-     * @param newExchange the newest exchange (can be <tt>null</tt> if there was no data possible to acquire)
-     * @return <tt>true</tt> to complete current group and start a new group, or <tt>false</tt> to keep using current
-     */
-    boolean preComplete(Exchange oldExchange, Exchange newExchange);
-----
-
-If the preComplete method returns true, then the existing groups is
-completed (without aggregating the incoming exchange (newExchange). And
-then the newExchange is used to start the correlation group from scratch
-so the group would contain only that new incoming exchange. This is
-known as pre-completion mode. And when the aggregation is in
-pre-completion mode, then only the following completions are in use
-
-* aggregationStrategy must
-implement `PreCompletionAwareAggregationStrategy` xxx
-* completionTimeout or completionInterval can also be used as fallback
-completions
-* any other completion are not used (such as by size, from batch
-consumer etc)
-* eagerCheckCompletion is implied as true, but the option has no effect
-
-== Persistent AggregationRepository
-
-The aggregator provides a pluggable repository which you can implement
-your own `org.apache.camel.spi.AggregationRepository`. +
- If you need persistent repository then you can use either Camel
-xref:components::leveldb.adoc[LevelDB], or xref:components::sql-component.adoc[SQL Component] components.
-
-== Using TimeoutAwareAggregationStrategy
-
-If your aggregation strategy implements
-`TimeoutAwareAggregationStrategy`, then Camel will invoke the `timeout`
-method when the timeout occurs. Notice that the values for index and
-total parameters will be -1, and the timeout parameter will be provided
-only if configured as a fixed value. You must *not* throw any exceptions
-from the `timeout` method.
-
-== Using CompletionAwareAggregationStrategy
-
-If your aggregation strategy implements
-`CompletionAwareAggregationStrategy`, then Camel will invoke the
-`onComplete` method when the aggregated Exchange is completed. This
-allows you to do any last minute custom logic such as to cleanup some
-resources, or additional work on the exchange as it's now completed. +
- You must *not* throw any exceptions from the `onCompletion` method.
-
-== Completing current group decided from the AggregationStrategy
-
-The `AggregationStrategy` can now included a property on the
-returned `Exchange` that contains a boolean to indicate if the current
-group should be completed. This allows to overrule any existing
-completion predicates / sizes / timeouts etc, and complete the group.
-
-For example the following logic (from an unit test) will complete the
-group if the message body size is larger than 5. This is done by setting
-the exchange property `Exchange.AGGREGATION_COMPLETE_CURRENT_GROUP` to `true`.
-
-[source,java]
-----
-    public final class MyCompletionStrategy implements AggregationStrategy {
-        @Override
-        public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-            if (oldExchange == null) {
-                return newExchange;
-            }
-            String body = oldExchange.getIn().getBody(String.class) + "+" 
-                + newExchange.getIn().getBody(String.class);
-            oldExchange.getIn().setBody(body);
-            if (body.length() >= 5) {
-                oldExchange.setProperty(Exchange.AGGREGATION_COMPLETE_CURRENT_GROUP, true);
-            }
-            return oldExchange;
-        }
-    }
-----
-
-
-== Completing all previous group decided from the AggregationStrategy
-
-The `AggregationStrategy` can now included a property on the
-returned `Exchange` that contains a boolean to indicate if all previous
-groups should be completed. This allows to overrule any existing
-completion predicates / sizes / timeouts etc, and complete all the existing
-previous group.
-
-For example the following logic (from an unit test) will complete all the
-previous group when a new aggregation group is started. This is done by
-setting the property `Exchange.AGGREGATION_COMPLETE_ALL_GROUPS` to `true`.
-
-[source,java]
-----
-    public final class MyCompletionStrategy implements AggregationStrategy {
-        @Override
-        public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-            if (oldExchange == null) {
-                // we start a new correlation group, so complete all previous groups
-                newExchange.setProperty(Exchange.AGGREGATION_COMPLETE_ALL_GROUPS, true);
-                return newExchange;
-            }
-
-            String body1 = oldExchange.getIn().getBody(String.class);
-            String body2 = newExchange.getIn().getBody(String.class);
-
-            oldExchange.getIn().setBody(body1 + body2);
-            return oldExchange;
-        }
-    }
-----
-
-== Manually Force the Completion of All Aggregated Exchanges Immediately
-
-You can manually trigger completion of all current aggregated exchanges
-by sending an exchange containing the exchange property
-`Exchange.AGGREGATION_COMPLETE_ALL_GROUPS` set to `true`. The message is
-considered a signal message only, the message headers/contents will not
-be processed otherwise.
-
-You can alternatively set the exchange property
-`Exchange.AGGREGATION_COMPLETE_ALL_GROUPS_INCLUSIVE` to `true` to trigger
-completion of all groups after processing the current message.
-
-== Using a List<V> in AggregationStrategy
-
-If you want to aggregate some value from the messages `<V>` into a `List<V>`
-then we have added a
-`org.apache.camel.processor.aggregate.AbstractListAggregationStrategy`
-abstract class that makes this easier. The completed
-Exchange that is sent out of the aggregator will contain the `List<V>` in
-the message body.
-
-For example to aggregate a `List<Integer>` you can extend this class as
-shown below, and implement the `getValue` method:
-
-== Using AggregateController
-
-The `org.apache.camel.processor.aggregate.AggregateController` allows
-you to control the aggregate at runtime using Java or JMX API. This can
-be used to force completing groups of exchanges, or query its current
-runtime statistics.
-
-The aggregator provides a default implementation if no custom have been
-configured, which can be accessed using `getAggregateController()` method.
-Though it may be easier to configure a controller in the route using
-`aggregateController` as shown below:
-
-[source,java]
-----
-private AggregateController controller = new DefaultAggregateController();
-
-from("direct:start")
-   .aggregate(header("id"), new MyAggregationStrategy())
-      .completionSize(10).id("myAggregator")
-      .aggregateController(controller)
-      .to("mock:aggregated");
-----
-
-Then there is API on AggregateController to force completion. For
-example to complete a group with key foo
-
-[source,java]
-----
-int groups = controller.forceCompletionOfGroup("foo");
-----
-
-The number return would be the number of groups completed. In this case
-it would be 1 if the foo group existed and was completed. If foo does
-not exists then 0 is returned.
-
-There is also an api to complete all groups
-
-[source,java]
-----
-int groups = controller.forceCompletionOfAllGroups();
-----
-
-To configure this from XML DSL
-
-[source,xml]
-----
-<bean id="myController" class="org.apache.camel.processor.aggregate.DefaultAggregateController"/>
- 
-  <camelContext xmlns="http://camel.apache.org/schema/spring">
-        <route>
-            <from uri="direct:start"/>
-            <aggregate strategyRef="myAppender" completionSize="10"
-                       aggregateControllerRef="myController">
-                <correlationExpression>
-                    <header>id</header>
-                </correlationExpression>
-                <to uri="mock:result"/>
-            </aggregate>
-        </route>
-    </camelContext>
-----
-
-There is also JMX API on the aggregator which is available under the
-processors node in the Camel JMX tree.
-
-== Using GroupedExchanges
-
-In the route below we group all the exchanges together using
-`groupExchanges()`:
-
-[source,java]
-----
-from("direct:start")
-    // aggregate all using same expression
-    .aggregate(constant(true))
-    // wait for 0.5 seconds to aggregate
-    .completionTimeout(500L)
-    // group the exchanges so we get one single exchange containing all the others
-    .groupExchanges()
-    .to("mock:result");
-----
-
-As a result we have one outgoing `Exchange` being
-routed the `"mock:result"` endpoint. The exchange is a holder
-containing all the incoming Exchanges.
-
-The output of the aggregator will then contain the exchanges grouped
-together in a list as shown below:
-
-[source,java]
-----
-List<Exchange> grouped = exchange.getIn().getBody(List.class);
-----
-
-== Using POJOs as AggregationStrategy
-
-To use the `AggregationStrategy` you had to implement the
-`org.apache.camel.AggregationStrategy` interface,
-which means your logic would be tied to the Camel API.
-You can use a POJO for the logic and let Camel adapt to your
-POJO. To use a POJO a convention must be followed:
-
-* there must be a public method to use
-* the method must not be void
-* the method can be static or non-static
-* the method must have 2 or more parameters
-* the parameters is paired so the first 50% is applied to the
-`oldExchange` and the reminder 50% is for the `newExchange`
-* .. meaning that there must be an equal number of parameters, eg 2, 4,
-6 etc.
-
-The paired methods is expected to be ordered as follows:
-
-* the first parameter is the message body
-* the 2nd parameter is a Map of the headers
-* the 3rd parameter is a Map of the Exchange properties
-
-This convention is best explained with some examples.
-
-In the method below, we have only 2 parameters, so the 1st parameter is
-the body of the `oldExchange`, and the 2nd is paired to the body of the
-`newExchange`:
-
-[source,java]
-----
-public String append(String existing, String next) {
-  return existing + next;
-}
-----
-
-In the method below, we have only 4 parameters, so the 1st parameter is
-the body of the `oldExchange`, and the 2nd is the Map of the
-`oldExchange` headers, and the 3rd is paired to the body of the `newExchange`,
-and the 4th parameter is the Map of the `newExchange` headers:
-
-[source,java]
-----
-public String append(String existing, Map existingHeaders, String next, Map nextHeaders) {
-  return existing + next;
-}
-----
-
-And finally if we have 6 parameters the we also have the properties of
-the Exchanges:
-
-[source,java]
-----
-public String append(String existing, Map existingHeaders, Map existingProperties,
-                     String next, Map nextHeaders, Map nextProperties) {
-  return existing + next;
-}
-----
-
-To use this with the Aggregate EIP we can use a
-POJO with the aggregate logic as follows:
-
-[source,java]
-----
-public class MyBodyAppender {
-
-    public String append(String existing, String next) {
-        return next + existing;
-    }
-
-}
-----
-
-And then in the Camel route we create an instance of our bean, and then
-refer to the bean in the route using `bean` method from
-`org.apache.camel.builder.AggregationStrategies` as shown:
-
-[source,java]
-----
-private MyBodyAppender appender = new MyBodyAppender();
-
-public void configure() throws Exception {
-    from("direct:start")
-        .aggregate(constant(true), AggregationStrategies.bean(appender, "append"))
-            .completionSize(3)
-            .to("mock:result");
-}
-----
-
-We can also provide the bean type directly:
-
-[source,java]
-----
-public void configure() throws Exception {
-    from("direct:start")
-        .aggregate(constant(true), AggregationStrategies.bean(MyBodyAppender.class, "append"))
-            .completionSize(3)
-            .to("mock:result");
-}
-----
-
-And if the bean has only one method we do not need to specify the name
-of the method:
-
-[source,java]
-----
-public void configure() throws Exception {
-    from("direct:start")
-        .aggregate(constant(true), AggregationStrategies.bean(MyBodyAppender.class))
-            .completionSize(3)
-            .to("mock:result");
-}
-----
-
-And the `append` method could be static:
-
-[source,java]
-----
-public class MyBodyAppender {
-
-    public static String append(String existing, String next) {
-        return next + existing;
-    }
-
-}
-----
-
-If you are using XML DSL then we need to declare a <bean> with the POJO:
-
-[source,xml]
-----
-<bean id="myAppender" class="com.foo.MyBodyAppender"/>
-----
-
-And in the Camel route we use `strategyRef` to refer to the bean by its
-id, and the `strategyMethodName` can be used to define the method name
-to call:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:start"/>
-        <aggregate strategyRef="myAppender" strategyMethodName="append" completionSize="3">
-            <correlationExpression>
-                <constant>true</constant>
-            </correlationExpression>
-            <to uri="mock:result"/>
-        </aggregate>
-    </route>
-</camelContext>
-----
-
-When using XML DSL you must define the POJO as a <bean>.
-
-== Aggregating when no data
-
-By default when using POJOs as AggregationStrategy, then the method is
-*only* invoked when there is data to be aggregated (by default). You can
-use the option `strategyMethodAllowNull` to configure this. Where as
-without using POJOs then you may have `null` as `oldExchange` or
-`newExchange` parameters. For example the
-Aggregate EIP will invoke the
-`AggregationStrategy` with `oldExchange` as null, for the first
-Exchange incoming to the aggregator. And then for
-subsequent xref:exchange.adoc[Exchange]s then `oldExchange` and
-`newExchange` parameters are both not null.
-
-Example with Content Enricher EIP and no data
-
-Though with POJOs as `AggregationStrategy` we made this simpler and only
-call the method when `oldExchange` and `newExchange` is not null, as
-that would be the most common use-case. If you need to allow
-`oldExchange` or `newExchange` to be null, then you can configure this
-with the POJO using the `AggregationStrategyBeanAdapter` as shown below.
-On the bean adapter we call `setAllowNullNewExchange` to allow the new
-exchange to be `null`.
-
-[source,java]
-----
-public void configure() throws Exception {
-    AggregationStrategyBeanAdapter myStrategy = new AggregationStrategyBeanAdapter(appender, "append");
-    myStrategy.setAllowNullOldExchange(true);
-    myStrategy.setAllowNullNewExchange(true);
-
-    from("direct:start")
-        .pollEnrich("seda:foo", 1000, myStrategy)
-            .to("mock:result");
-}
-----
-
-This can be configured a bit easier using the `beanAllowNull` method
-from `AggregationStrategies` as shown:
-
-[source,java]
-----
-public void configure() throws Exception {
-    from("direct:start")
-        .pollEnrich("seda:foo", 1000, AggregationStrategies.beanAllowNull(appender, "append"))
-            .to("mock:result");
-}
-----
-
-Then the `append` method in the POJO would need to deal with the
-situation that `newExchange` can be null:
-
-[source,java]
-----
-public class MyBodyAppender {
-
-    public String append(String existing, String next) {
-        if (next == null) {
-            return "NewWasNull" + existing;
-        } else {
-            return existing + next;
-        }
-    }
-
-}
-----
-
-In the example above we use the xref:content-enricher.adoc[Content Enricher]
-EIP using `pollEnrich`. The `newExchange` will be null in the
-situation we could not get any data from the "seda:foo" endpoint, and
-therefore the timeout was hit after 1 second. So if we need to do some
-special merge logic we would need to set `setAllowNullNewExchange=true`,
-so the `append` method will be invoked. If we do not do that then when
-the timeout was hit, then the append method would normally not be
-invoked, meaning the xref:content-enricher.adoc[Content Enricher] did
-not merge/change the message.
-
-In XML DSL you would configure the `strategyMethodAllowNull` option and
-set it to true as shown below:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:start"/>
-        <aggregate strategyRef="myAppender"
-                   strategyMethodName="append"
-                   strategyMethodAllowNull="true"
-                   completionSize="3">
-            <correlationExpression>
-                <constant>true</constant>
-            </correlationExpression>
-            <to uri="mock:result"/>
-        </aggregate>
-    </route>
-</camelContext>
-----
-
-== Different body types
-
-When for example using `strategyMethodAllowNull` as true, then the
-parameter types of the message bodies does not have to be the same. For
-example suppose we want to aggregate from a `com.foo.User` type to a
-`List<String>` that contains the user name. We could code a POJO doing
-this as follows:
-
-[source,java]
-----
-public static final class MyUserAppender {
-
-    public List addUsers(List names, User user) {
-        if (names == null) {
-            names = new ArrayList();
-        }
-        names.add(user.getName());
-        return names;
-    }
-}
-----
-
-Notice that the return type is a List which we want to contain the user
-names. The 1st parameter is the list of names, and then notice the 2nd
-parameter is the incoming `com.foo.User` type.
diff --git a/docs/user-manual/modules/ROOT/pages/batch-config-eip.adoc b/docs/user-manual/modules/ROOT/pages/batch-config-eip.adoc
deleted file mode 100644
index 4da0466..0000000
--- a/docs/user-manual/modules/ROOT/pages/batch-config-eip.adoc
+++ /dev/null
@@ -1,19 +0,0 @@
-[[batch-config-eip]]
-= Batch-config EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/batch-config-eip.adoc
-
-Batch-processing resequence EIP
-
-// eip options: START
-The Batch-config EIP supports 5 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *batchSize* | Sets the size of the batch to be re-ordered. The default size is 100. | 100 | Integer
-| *batchTimeout* | Sets the timeout for collecting elements to be re-ordered. The default timeout is 1000 msec. | 1000 | Long
-| *allowDuplicates* | Whether to allow duplicates. | false | Boolean
-| *reverse* | Whether to reverse the ordering. | false | Boolean
-| *ignoreInvalidExchanges* | Whether to ignore invalid exchanges | false | Boolean
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/bean-eip.adoc b/docs/user-manual/modules/ROOT/pages/bean-eip.adoc
deleted file mode 100644
index eaf39c8..0000000
--- a/docs/user-manual/modules/ROOT/pages/bean-eip.adoc
+++ /dev/null
@@ -1,97 +0,0 @@
-[[bean-eip]]
-= Bean EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/bean-eip.adoc
-
-The Bean EIP binds beans to Camel message exchanges.
-
-== URI Format
-
-[source]
-----
-bean:beanID[?options]
-----
-
-Where *beanID* can be any string which is used to look up the bean in
-the xref:registry.adoc[Registry]
-
-== EIP options
-
-// eip options: START
-The Bean EIP supports 5 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *ref* | Sets a reference to a bean to use |  | String
-| *method* | Sets the method name on the bean to use |  | String
-| *beanType* | Sets the Class of the bean |  | String
-| *cache* | *Deprecated* Use scope option instead. |  | Boolean
-| *scope* | Scope of bean. See below for more details. | Singleton | String |
-|===
-// eip options: END
-
-=== Bean scope
-
-When using `singleton` scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint.
-The bean should be thread-safe in case concurrent threads is calling the bean at the same time.
-When using `request` scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean
-while processing a request and you want to call the same bean instance multiple times while processing the request.
-The bean does not have to be thread-safe as the instance is only called from the same request.
-When using `prototype` scope, then the bean will be looked up or created per call. However in case of lookup then this is delegated
-to the bean registry such as Spring or CDI (if in use), which depends on their configuration can act as either singleton or prototype scope.
-so when using `prototype` then this depends on the delegated registry.
-
-== Bean as endpoint
-
-Camel also supports invoking xref:components::bean-component.adoc[Bean] as an Endpoint. In the
-route below:
-
-What happens is that when the exchange is routed to the `myBean` Camel
-will use the xref:bean-binding.adoc[Bean Binding] to invoke the bean. +
- The source for the bean is just a plain POJO:
-
-Camel will use xref:bean-binding.adoc[Bean Binding] to invoke the
-`sayHello` method, by converting the Exchange's In body to the `String`
-type and storing the output of the method on the Exchange Out body.
-
-== Java DSL bean syntax
-
-Java DSL comes with syntactic sugar for the xref:components::bean-component.adoc[Bean]
-component. Instead of specifying the bean explicitly as the endpoint
-(i.e. `to("bean:beanName")`) you can use the following syntax:
-
-[source,java]
-----
-// Send message to the bean endpoint
-// and invoke method resolved using Bean Binding.
-from("direct:start").beanRef("beanName");
-
-// Send message to the bean endpoint
-// and invoke given method.
-from("direct:start").beanRef("beanName", "methodName");
-----
-
-Instead of passing name of the reference to the bean (so that Camel will
-lookup for it in the registry), you can specify the bean itself:
-
-[source,java]
-----
-// Send message to the given bean instance.
-from("direct:start").bean(new ExampleBean());
-
-// Explicit selection of bean method to be invoked.
-from("direct:start").bean(new ExampleBean(), "methodName");
-
-// Camel will create the instance of bean and cache it for you.
-from("direct:start").bean(ExampleBean.class);
-----
-
-== Bean binding
-
-How bean methods to be invoked are chosen (if they are not specified
-explicitly through the *method* parameter) and how parameter values are
-constructed from the xref:message.adoc[Message] are all defined by the
-xref:bean-binding.adoc[Bean Binding] mechanism which is used throughout
-all of the various xref:bean-integration.adoc[Bean Integration]
-mechanisms in Camel.
-
diff --git a/docs/user-manual/modules/ROOT/pages/choice-eip.adoc b/docs/user-manual/modules/ROOT/pages/choice-eip.adoc
deleted file mode 100644
index 922fdda..0000000
--- a/docs/user-manual/modules/ROOT/pages/choice-eip.adoc
+++ /dev/null
@@ -1,77 +0,0 @@
-[[choice-eip]]
-= Choice EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/choice-eip.adoc
-
-The
-http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
-patterns] allows you to route messages to the correct destination based
-on the contents of the message exchanges.
-
-image::eip/ContentBasedRouter.gif[image]
-
-== Choice options
-
-// eip options: START
-The Choice EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *whenClauses* | Sets the when clauses |  | List
-| *otherwise* | Sets the otherwise node |  | OtherwiseDefinition
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to route a request from an input
-*seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .choice()
-                .when(simple("${header.foo} == 'bar'"))
-                    .to("direct:b")
-                .when(simple("${header.foo} == 'cheese'"))
-                    .to("direct:c")
-                .otherwise()
-                    .to("direct:d");
-    }
-};
-----
-
-[TIP]
-====
-See xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
-can I not use when or otherwise in a Java Camel route] if you have
-problems with the Java DSL, accepting using `when` or `otherwise`.
-====
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <choice>
-            <when>
-                <simple>${header.foo} == 'bar'</simple>
-                <to uri="direct:b"/>
-            </when>
-            <when>
-                <simple>${header.foo} == 'cheese'</simple>
-                <to uri="direct:c"/>
-            </when>
-            <otherwise>
-                <to uri="direct:d"/>
-            </otherwise>
-        </choice>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/circuitBreaker-eip.adoc b/docs/user-manual/modules/ROOT/pages/circuitBreaker-eip.adoc
deleted file mode 100644
index b3c13e3..0000000
--- a/docs/user-manual/modules/ROOT/pages/circuitBreaker-eip.adoc
+++ /dev/null
@@ -1,62 +0,0 @@
-[[circuitBreaker-eip]]
-= CircuitBreaker EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/circuitBreaker-eip.adoc
-
-The Circuit Breaker pattern is inspired by the real-world electrical circuit breaker,
-which is used to detect excessive current draw and fail fast to protect electrical equipment.
-The software-based circuit breaker works on the same notion, by encapsulating
-the operation and monitoring it for failures. The Circuit Breaker pattern operates in
-three states, as illustrated in the following figure:
-
-image::eip/CircuitBreaker.png[image]
-
-The states are as follows:
-
-* *Closed* — When operating successfully.
-* *Open* — When failure is detected and the breaker opens to short-circuit and fail
-  fast. In this state, the circuit breaker avoids invoking the protected operation and
-  avoids putting additional load on the struggling service.
-* *Half Open* — After a short period in the open state, an operation is attempted to
-  see whether it can complete successfully, and depending on the outcome, it will
-  transfer to either open or closed state.
-
-== Example
-
-Below is an example route showing a circuit breaker endpoint that protects against slow operation by falling back to the in-lined fallback route. By default the timeout request is just *1000ms* so the HTTP endpoint has to be fairly quick to succeed.
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        .to("http://fooservice.com/slow")
-    .onFallback()
-        .transform().constant("Fallback message")
-    .end()
-    .to("mock:result");
-----
-
-And in XML DSL:
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <circuitBreaker>
-      <to uri="http://fooservice.com/slow"/>
-      <onFallback>
-        <transform>
-          <constant>Fallback message</constant>
-        </transform>
-      </onFallback>
-    </circuitBreaker>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== CircuitBreaker Implementations
-
-Camel provides two implementations of this pattern:
-
-* xref:hystrix-eip.adoc[Hystrix] - Using the Netflix Hystrix implementation
-* xref:resilience4j-eip.adoc[Resilience4j] - Using the Resilience4j implementation
-
diff --git a/docs/user-manual/modules/ROOT/pages/claimCheck-eip.adoc b/docs/user-manual/modules/ROOT/pages/claimCheck-eip.adoc
deleted file mode 100644
index 6828830..0000000
--- a/docs/user-manual/modules/ROOT/pages/claimCheck-eip.adoc
+++ /dev/null
@@ -1,273 +0,0 @@
-[[claimCheck-eip]]
-= Claim Check EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/claimCheck-eip.adoc
-
-The http://www.enterpriseintegrationpatterns.com/patterns/messaging/StoreInLibrary.html[Claim Check] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
-allows you to replace message content with a claim check (a unique key), which can be used to retrieve the message content at a later time.
-
-image::eip/StoreInLibrary.gif[image]
-
-It can also be useful in situations where you cannot trust the information with an outside party; in this case, you can use the Claim Check to hide the sensitive portions of data.
-
-[NOTE]
-====
-The Camel implementation of this EIP pattern stores the message content temporarily in an internal memory store.
-====
-
-// eip options: START
-The Claim Check EIP supports 5 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *operation* | *Required* The claim check operation to use. The following operations is supported: Get - Gets (does not remove) the claim check by the given key. GetAndRemove - Gets and remove the claim check by the given key. Set - Sets a new (will override if key already exists) claim check with the given key. Push - Sets a new claim check on the stack (does not use key). Pop - Gets the latest claim check from the stack (does not use key). |  | ClaimCheckOperation
-| *key* | To use a specific key for claim check id (for dynamic keys use simple language syntax as the key). |  | String
-| *filter* | Specified a filter to control what data gets merging data back from the claim check repository. The following syntax is supported: body - to aggregate the message body attachments - to aggregate all the message attachments headers - to aggregate all the message headers header:pattern - to aggregate all the message headers that matches the pattern. The pattern uses the following rules are applied in this order: exact match, returns true wildcard match (pattern ends with a and [...]
-| *strategyRef* | To use a custom AggregationStrategy instead of the default implementation. Notice you cannot use both custom aggregation strategy and configure data at the same time. |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-|===
-// eip options: END
-
-
-== Claim Check Operation
-
-When using this EIP you must specify the operation to use which can be of the following:
-
-* Get - Gets (does not remove) the claim check by the given key.
-* GetAndRemove - Gets and remove the claim check by the given key.
-* Set - Sets a new (will override if key already exists) claim check with the given key.
-* Push - Sets a new claim check on the stack (does not use key).
-* Pop - Gets the latest claim check from the stack (does not use key).
-
-When using the `Get`, `GetAndRemove`, or `Set` operation you must specify a key.
-These operations will then store and retrieve the data using this key. You can use this to store multiple data in different keys.
-
-The `Push` and `Pop` operations do *not* use a key but stores the data in a stack structure.
-
-
-== Filter what data to merge back
-
-The `filter` option is used to define what data to merge back when using the `Get` or `Pop` operation. When data is merged back
-then its merged using a `AggregationStrategy`. The default strategy uses the `filter` option to easily specify what data to merge back.
-
-The `filter` option takes a `String` value with the following syntax:
-
-* `body` = to aggregate the message body
-* `attachments` = to aggregate all the message attachments
-* `headers` = to aggregate all the message headers
-* `header:pattern` = to aggregate all the message headers that matches the pattern.
-
-The pattern rule supports wildcard and regular expression:
-
-* wildcard match (pattern ends with a `*` and the name starts with the pattern)
-* regular expression match
-
-You can specify multiple rules separated by comma.
-
-=== Basic filter examples
-
-For example to include the message body and all headers starting with _foo_:
-
-----
-body,header:foo*
-----
-
-To only merge back the message body:
-
-----
-body
-----
-
-To only merge back the message attachments:
-
-----
-attachments
-----
-
-To only merge back headers:
-
-----
-headers
-----
-
-To only merge back a header name foo:
-
-----
-header:foo
-----
-
-If the filter rule is specified as empty or as wildcard then everything is merged.
-
-Notice that when merging back data, then any existing data is overwritten, and any other existing data is preserved.
-
-=== Fine grained filtering with include and exclude pattern
-
-The syntax also supports the following prefixes which can be used to specify include,exclude, or remove
-
-* `+` = to include (which is the default mode)
-* `-` = to exclude (exclude takes precedence over include)
-* `--` = to remove (remove takes precedence)
-
-For example to skip the message body, and merge back everything else
-----
--body
-----
-
-Or to skip the message header foo, and merge back everything else
-----
--header:foo
-----
-
-You can also instruct to remove headers when merging data back, for example to remove all headers starting with _bar_:
-----
---headers:bar*
-----
-
-Note you cannot have both include (`+`) and exclude (`-`) `header:pattern` at the same time.
-
-== Dynamic keys
-
-The claim check key are static, but you can use the `simple` language syntax to define dynamic keys,
-for example to use a header from the message named `myKey`:
-
-[source,java]
-----
-from("direct:start")
-    .to("mock:a")
-    .claimCheck(ClaimCheckOperation.Set, "${header.myKey}")
-    .transform().constant("Bye World")
-    .to("mock:b")
-    .claimCheck(ClaimCheckOperation.Get, "${header.myKey}")
-    .to("mock:c")
-    .transform().constant("Hi World")
-    .to("mock:d")
-    .claimCheck(ClaimCheckOperation.Get, "${header.myKey}")
-    .to("mock:e");
-----
-
-
-== Java Examples
-
-The following example shows the `Push` and `Pop` operations in action;
-
-[source,java]
-----
-from("direct:start")
-    .to("mock:a")
-    .claimCheck(ClaimCheckOperation.Push)
-    .transform().constant("Bye World")
-    .to("mock:b")
-    .claimCheck(ClaimCheckOperation.Pop)
-    .to("mock:c");
-----
-
-For example if the message body from the beginning is `Hello World` then that data is pushed on the stack of the Claim Check EIP.
-And then the message body is transformed to `Bye World`, which is what `mock:b` endpoint receives. When we `Pop` from the Claim Check EIP
-then the original message body is retrieved and merged back so `mock:c` will retrieve the message body with `Hello World`.
-
-Here is an example using `Get` and `Set` operations, which uses the key `foo`:
-
-[source,java]
-----
-from("direct:start")
-    .to("mock:a")
-    .claimCheck(ClaimCheckOperation.Set, "foo")
-    .transform().constant("Bye World")
-    .to("mock:b")
-    .claimCheck(ClaimCheckOperation.Get, "foo")
-    .to("mock:c")
-    .transform().constant("Hi World")
-    .to("mock:d")
-    .claimCheck(ClaimCheckOperation.Get, "foo")
-    .to("mock:e");
-----
-
-Notice how we can `Get` the same data twice using the `Get` operation as it will not remove the data. If you only want
-to get the data once, you can use `GetAndRemove`.
-
-The last example shows how to use the `filter` option where we only want to get back header named `foo` or `bar`:
-
-[source,java]
-----
-from("direct:start")
-    .to("mock:a")
-    .claimCheck(ClaimCheckOperation.Push)
-    .transform().constant("Bye World")
-    .setHeader("foo", constant(456))
-    .removeHeader("bar")
-    .to("mock:b")
-    // only merge in the message headers foo or bar
-    .claimCheck(ClaimCheckOperation.Pop, null, "header:(foo|bar)")
-    .to("mock:c");
-----
-
-== XML examples
-
-The following example shows the `Push` and `Pop` operations in action;
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <to uri="mock:a"/>
-  <claimCheck operation="Push"/>
-  <transform>
-    <constant>Bye World</constant>
-  </transform>
-  <to uri="mock:b"/>
-  <claimCheck operation="Pop"/>
-  <to uri="mock:c"/>
-</route>
-----
-
-For example if the message body from the beginning is `Hello World` then that data is pushed on the stack of the Claim Check EIP.
-And then the message body is transformed to `Bye World`, which is what `mock:b` endpoint receives. When we `Pop` from the Claim Check EIP
-then the original message body is retrieved and merged back so `mock:c` will retrieve the message body with `Hello World`.
-
-Here is an example using `Get` and `Set` operations, which uses the key `foo`:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <to uri="mock:a"/>
-  <claimCheck operation="Set" key="foo"/>
-  <transform>
-    <constant>Bye World</constant>
-  </transform>
-  <to uri="mock:b"/>
-  <claimCheck operation="Get" key="foo"/>
-  <to uri="mock:c"/>
-  <transform>
-    <constant>Hi World</constant>
-  </transform>
-  <to uri="mock:d"/>
-  <claimCheck operation="Get" key="foo"/>
-  <to uri="mock:e"/>
-</route>
-----
-
-Notice how we can `Get` the same data twice using the `Get` operation as it will not remove the data. If you only want
-to get the data once, you can use `GetAndRemove`.
-
-The last example shows how to use the `filter` option where we only want to get back header named `foo` or `bar`:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <to uri="mock:a"/>
-  <claimCheck operation="Push"/>
-  <transform>
-    <constant>Bye World</constant>
-  </transform>
-  <setHeader name="foo">
-    <constant>456</constant>
-  </setHeader>
-  <removeHeader headerName="bar"/>
-  <to uri="mock:b"/>
-  <!-- only merge in the message headers foo or bar -->
-  <claimCheck operation="Pop" filter="header:(foo|bar)"/>
-  <to uri="mock:c"/>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/constant-language.adoc b/docs/user-manual/modules/ROOT/pages/constant-language.adoc
deleted file mode 100644
index a8ef0e0..0000000
--- a/docs/user-manual/modules/ROOT/pages/constant-language.adoc
+++ /dev/null
@@ -1,75 +0,0 @@
-[[constant-language]]
-= Constant Language
-:page-source: core/camel-core-languages/src/main/docs/constant-language.adoc
-
-*Since Camel 1.5*
-
-The Constant Expression Language is really just a way to specify
-constant strings as a type of expression.
-
-[NOTE]
-====
-This is a fixed constant value that is only set once during starting up the route,
-do not use this if you want dynamic values during routing.
-====
-
-== Constant Options
-
-
-// language options: START
-The Constant language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-
-== Example usage
-
-The setHeader element of the Spring DSL can utilize a constant
-expression like:
-
-[source,xml]
-----
-<route>
-  <from uri="seda:a"/>
-  <setHeader name="theHeader">
-    <constant>the value</constant>
-  </setHeader>
-  <to uri="mock:b"/>
-</route>
-----
-
-in this case, the Message coming from the seda:a
-Endpoint will have 'theHeader' header set to the
-constant value 'the value'.
-
-And the same example using Java DSL:
-
-[source,java]
-----
-from("seda:a")
-  .setHeader("theHeader", constant("the value"))
-  .to("mock:b");
-----
-
-== Loading constant from external resource
-
-You can externalize the constant and have Camel load it from a resource
-such as `"classpath:"`, `"file:"`, or `"http:"`. +
- This is done using the following syntax: `"resource:scheme:location"`,
-eg to refer to a file on the classpath you can do:
-
-[source,java]
-----
-.setHeader("myHeader").constant("resource:classpath:constant.txt")
-----
-
-== Dependencies
-
-The Constant language is part of *camel-core*.
diff --git a/docs/user-manual/modules/ROOT/pages/content-based-router-eip.adoc b/docs/user-manual/modules/ROOT/pages/content-based-router-eip.adoc
deleted file mode 100644
index 761ac92..0000000
--- a/docs/user-manual/modules/ROOT/pages/content-based-router-eip.adoc
+++ /dev/null
@@ -1,80 +0,0 @@
-[[contentBasedRouter-eip]]
-= Content Based Router
-:page-source: core/camel-core-engine/src/main/docs/eips/content-based-router-eip.adoc
-
-The
-http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
-patterns] allows you to route messages to the correct destination based
-on the contents of the message exchanges.
-
-image::eip/ContentBasedRouter.gif[image]
-
-The following example shows how to route a request from an input
-*seda:a* endpoint to either *seda:b*, *seda:c* or *seda:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
-
-== Using the xref:fluent-builders.adoc[Fluent Builders]
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        errorHandler(deadLetterChannel("mock:error"));
- 
-        from("direct:a")
-            .choice()
-                .when(header("foo").isEqualTo("bar"))
-                    .to("direct:b")
-                .when(header("foo").isEqualTo("cheese"))
-                    .to("direct:c")
-                .otherwise()
-                    .to("direct:d");
-    }
-};
-----
-
-[TIP]
-====
-See
-xref:faq/why-can-i-not-use-when-or-otherwise-in-a-java-camel-route.adoc[Why
-can I not use when or otherwise in a Java Camel route] if you have
-problems with the Java DSL, accepting using `when` or `otherwise`.
-====
-
-== Using the xref:spring-xml-extensions.adoc[Spring XML Extensions]
-
-[source,java]
-----
-<camelContext errorHandlerRef="errorHandler" xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <choice>
-            <when>
-                <xpath>$foo = 'bar'</xpath>
-                <to uri="direct:b"/>
-            </when>
-            <when>
-                <xpath>$foo = 'cheese'</xpath>
-                <to uri="direct:c"/>
-            </when>
-            <otherwise>
-                <to uri="direct:d"/>
-            </otherwise>
-        </choice>
-    </route>
-</camelContext>
-----
-
-For further examples of this pattern in use you could look at the
-https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/ChoiceTest.java[junit test case].
-
-[[ContentBasedRouter-UsingThisPattern]]
-== Using This Pattern
-
-If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started]. You may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
-this pattern out.
diff --git a/docs/user-manual/modules/ROOT/pages/content-filter-eip.adoc b/docs/user-manual/modules/ROOT/pages/content-filter-eip.adoc
deleted file mode 100644
index b3cdb81..0000000
--- a/docs/user-manual/modules/ROOT/pages/content-filter-eip.adoc
+++ /dev/null
@@ -1,66 +0,0 @@
-[[ContentFilter-eip]]
-= Content Filter
-:page-source: core/camel-core-engine/src/main/docs/eips/content-filter-eip.adoc
-
-Camel supports the
-http://www.enterpriseintegrationpatterns.com/ContentFilter.html[Content
-Filter] from the
-xref:enterprise-integration-patterns.adoc[EIP patterns]
-using one of the following mechanisms in the routing logic to transform
-content from the inbound message.
-
-* xref:message-translator.adoc[Message Translator]
-* invoking a xref:bean-integration.adoc[Java bean]
-* xref:processor.adoc[Processor] object
-
-image::eip/ContentFilter.gif[image]
-
-A common way to filter messages is to use an
-xref:expression.adoc[Expression] in the xref:dsl.adoc[DSL] like
-xref:components::xquery-language.adoc[XQuery] or one of the supported
-xref:scripting-languages.adoc[Scripting Languages].
-
-== Using the xref:fluent-builders.adoc[Fluent Builders]
-
-Here is a simple example using the xref:dsl.adoc[DSL] directly
-
-In this example we add our own xref:processor.adoc[Processor]
-
-For further examples of this pattern in use you could look at one of the
-JUnit tests
-
-* https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/TransformTest.java[TransformTest]
-* https://github.com/apache/camel/blob/master/core/camel-core/src/test/java/org/apache/camel/processor/TransformViaDSLTest.java[TransformViaDSLTest]
-
-== Using Spring XML
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:Input"/>
-  <bean ref="myBeanName" method="doTransform"/>
-  <to uri="activemq:Output"/>
-</route>
-----
-
-You can also use XPath to filter out part of the message you are
-interested in:
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:Input"/>
-  <setBody><xpath resultType="org.w3c.dom.Document">//foo:bar</xpath></setBody>
-  <to uri="activemq:Output"/>
-</route> 
-----
-
-[[ContentFilter-UsingThisPattern]]
-== Using This Pattern
-
-If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started], you may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
-this pattern out.
diff --git a/docs/user-manual/modules/ROOT/pages/convertBodyTo-eip.adoc b/docs/user-manual/modules/ROOT/pages/convertBodyTo-eip.adoc
deleted file mode 100644
index f075792..0000000
--- a/docs/user-manual/modules/ROOT/pages/convertBodyTo-eip.adoc
+++ /dev/null
@@ -1,16 +0,0 @@
-[[convertBodyTo-eip]]
-= Convert Body To EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/convertBodyTo-eip.adoc
-
-The ConvertBodyTo EIP allows you to transform your body to a different type.
-
-// eip options: START
-The Convert Body To EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *type* | *Required* The java type to convert to |  | String
-| *charset* | To use a specific charset when converting |  | String
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/customLoadBalancer-eip.adoc b/docs/user-manual/modules/ROOT/pages/customLoadBalancer-eip.adoc
deleted file mode 100644
index 50d413e..0000000
--- a/docs/user-manual/modules/ROOT/pages/customLoadBalancer-eip.adoc
+++ /dev/null
@@ -1,82 +0,0 @@
-[[customLoadBalancer-eip]]
-= Custom Load Balancer EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/customLoadBalancer-eip.adoc
-
-This EIP allows you to use your own Load Balancer implementation
-
-// eip options: START
-The Custom Load Balancer EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *ref* | *Required* Refers to the custom load balancer to lookup from the registry |  | String
-|===
-// eip options: END
-
-
-An example using Java DSL:
-[source,java]
-----
-from("direct:start")
-    // using our custom load balancer
-    .loadBalance(new MyLoadBalancer())
-    .to("mock:x", "mock:y", "mock:z");
-----
-
-And the same example using XML DSL:
-[source,xml]
-----
-<!-- this is the implementation of our custom load balancer -->
-<bean id="myBalancer" class="org.apache.camel.processor.CustomLoadBalanceTest$MyLoadBalancer"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <loadBalance>
-      <!-- refer to my custom load balancer -->
-      <custom ref="myBalancer"/>
-      <!-- these are the endpoints to balancer -->
-      <to uri="mock:x"/>
-      <to uri="mock:y"/>
-      <to uri="mock:z"/>
-    </loadBalance>
-  </route>
-</camelContext>
-----
-
-Notice in the XML DSL above we use `<custom>` which is only available in *Camel 2.8* onwards. In older releases you would have to do as follows instead:
-[source,xml]
-----
-<loadBalance ref="myBalancer">
-  <!-- these are the endpoints to balancer -->
-  <to uri="mock:x"/>
-  <to uri="mock:y"/>
-  <to uri="mock:z"/>
-</loadBalance>
-----
-
-To implement a custom load balancer you can extend some support classes such as `LoadBalancerSupport` and `SimpleLoadBalancerSupport`.
-The former supports the asynchronous routing engine, and the latter does not. Here is an example of a custom load balancer implementation:
-[source,java]
-----
-public static class MyLoadBalancer extends LoadBalancerSupport {
-
-    public boolean process(Exchange exchange, AsyncCallback callback) {
-        String body = exchange.getIn().getBody(String.class);
-        try {
-            if ("x".equals(body)) {
-                getProcessors().get(0).process(exchange);
-            } else if ("y".equals(body)) {
-                getProcessors().get(1).process(exchange);
-            } else {
-                getProcessors().get(2).process(exchange);
-            }
-        } catch (Throwable e) {
-            exchange.setException(e);
-        }
-        callback.done(true);
-        return true;
-    }
-}
-----
diff --git a/docs/user-manual/modules/ROOT/pages/delay-eip.adoc b/docs/user-manual/modules/ROOT/pages/delay-eip.adoc
deleted file mode 100644
index 20e524e..0000000
--- a/docs/user-manual/modules/ROOT/pages/delay-eip.adoc
+++ /dev/null
@@ -1,173 +0,0 @@
-[[delay-eip]]
-= Delay EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/delay-eip.adoc
-The Delayer Pattern allows you to delay the delivery of messages to some destination.
-
-== Options
-
-// eip options: START
-The Delay EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *executorServiceRef* | Refers to a custom Thread Pool if asyncDelay has been enabled. |  | String
-| *asyncDelayed* | Enables asynchronous delay which means the thread will not block while delaying. | true | Boolean
-| *callerRunsWhenRejected* | Whether or not the caller should run the task when it was rejected by the thread pool. Is by default true | true | Boolean
-|===
-// eip options: END
-
-[NOTE]
-====
-The expression is a value in millis to wait from the current time, so the expression should just be 3000.
-
-However you can use a long value for a fixed value to indicate the delay in millis.
-
-See the Spring DSL samples for Delayer.
-====
-
-[CAUTION]
-.Using Delayer in Java DSL
-===
-See this ticket: https://issues.apache.org/jira/browse/CAMEL-2654[https://issues.apache.org/jira/browse/CAMEL-2654]
-===
-
-== Samples
-
-The example below will delay all messages received on *seda:b* 1 second before sending them to *mock:result*.
-
-[source,java]
-----
-from("seda:b")
-  .delay(1000)
-  .to("mock:result");
-----
-
-You can just delay things a fixed amount of time from the point at which the delayer receives the message. For example to delay things 2 seconds
-
-[source,java]
-----
-delayer(2000)
-----
-
-The above assume that the delivery order is maintained and that the messages are delivered in delay order. If you want to reorder the messages based on delivery time, you can use the Resequencer with this pattern. For example
-
-[source,java]
-----
-from("activemq:someQueue")
-  .resequencer(header("MyDeliveryTime"))
-  .delay("MyRedeliveryTime")
-  .to("activemq:aDelayedQueue");
-----
-
-You can of course use many different Expression languages such as XPath, XQuery, SQL or various Scripting Languages. For example to delay the message for the time period specified in the header, use the following syntax:
-
-[source,java]
-----
-from("activemq:someQueue")
-  .delay(header("delayValue"))
-  .to("activemq:aDelayedQueue");
-----
-
-And to delay processing using the Simple language you can use the following DSL:
-
-[source,java]
-----
-from("activemq:someQueue")
-  .delay(simple("${body.delayProperty}"))
-  .to("activemq:aDelayedQueue");
-----
-
-=== Spring DSL
-The sample below demonstrates the delay in Spring DSL:
-
-[source,xml]
-----
-<bean id="myDelayBean" class="org.apache.camel.processor.MyDelayCalcBean"/>
-<bean id="exchangeAwareBean" class="org.apache.camel.processor.ExchangeAwareDelayCalcBean"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="seda:a"/>
-        <delay>
-            <header>MyDelay</header>
-        </delay>
-        <to uri="mock:result"/>
-    </route>
-    <route>
-        <from uri="seda:b"/>
-        <delay>
-            <constant>1000</constant>
-        </delay>
-        <to uri="mock:result"/>
-    </route>
-    <route>
-        <from uri="seda:c"/>
-        <delay>
-            <method ref="myDelayBean" method="delayMe"/>
-        </delay>
-        <to uri="mock:result"/>
-    </route>
-    <route>
-        <from uri="seda:d"/>
-        <delay>
-            <method ref="exchangeAwareBean" method="delayMe"/>
-        </delay>
-        <to uri="mock:result"/>
-    </route>
-</camelContext>
-----
-
-== Asynchronous delaying
-
-You can let the Delayer use non blocking asynchronous delaying, which means Camel will use a scheduler to schedule a task to be executed in the future. The task will then continue routing. This allows the caller thread to not block and be able to service other messages etc.
-
-=== From Java DSL
-You use the `asyncDelayed()` to enable the async behavior.
-
-[source,java]
-----
-from("activemq:queue:foo")
-  .delay(1000).asyncDelayed()
-  .to("activemq:aDelayedQueue");
-----
-
-=== From Spring XML
-
-You use the `asyncDelayed="true"` attribute to enable the async behavior.
-
-[source,xml]
-----
-<route>
-   <from uri="activemq:queue:foo"/>
-   <delay asyncDelayed="true">
-       <constant>1000</constant>
-   </delay>
-   <to uri="activemq:aDealyedQueue"/>
-</route>
-----
-
-== Creating a custom delay
-
-You can use an expression, such as calling a method on a bean, to determine when to send a message using something like this
-
-[source,java]
-----
-from("activemq:foo").
-  delay().method("someBean", "computeDelay").
-  to("activemq:bar");
-----
-
-then the bean would look like this...
-
-[source,java]
-----
-public class SomeBean {
-  public long computeDelay() {
-     long delay = 0;
-     // use java code to compute a delay value in millis
-     return delay;
- }
-}
-----
-
diff --git a/docs/user-manual/modules/ROOT/pages/dynamicRouter-eip.adoc b/docs/user-manual/modules/ROOT/pages/dynamicRouter-eip.adoc
deleted file mode 100644
index 6f04383..0000000
--- a/docs/user-manual/modules/ROOT/pages/dynamicRouter-eip.adoc
+++ /dev/null
@@ -1,159 +0,0 @@
-[[dynamicRouter-eip]]
-= Dynamic Router EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/dynamicRouter-eip.adoc
-
-The http://www.enterpriseintegrationpatterns.com/DynamicRouter.html[Dynamic Router] from the xref:enterprise-integration-patterns.adoc[EIP patterns] allows you to route messages while avoiding the dependency of the router on all possible destinations while maintaining its efficiency.
-
-image::eip/DynamicRouter.gif[image]
-
-The `dynamicRouter` in the DSL is similar to
-a dynamic Routing Slip which evaluates the slip
-_on-the-fly_.
-
-[IMPORTANT]
-.Avoid endless looping
-===
-You must ensure the expression used for the `dynamicRouter` such as a bean, will return `null` to indicate the end. Otherwise the `dynamicRouter` will keep repeating endlessly.
-===
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-== Options
-
-// eip options: START
-The Dynamic Router EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uriDelimiter* | Sets the uri delimiter to use | , | String
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this dynamic router, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
-|===
-// eip options: END
-
-The Dynamic Router will set the property `Exchange.SLIP_ENDPOINT` on the Exchange which contains the current endpoint as it advanced though the slip. This allows you to know how far we have processed in the slip.
-(It's a slip because the Dynamic Router implementation is based on top of Routing Slip).
-
-== Samples
-
-In Java DSL you can use the `dynamicRouter` as shown below:
-
-[source,java]
-----
-from("direct:start")
-    // use a bean as the dynamic router
-    .dynamicRouter(method(DynamicRouterTest.class, "slip"));
-----
-
-Which will leverage a Bean to compute the slip _on-the-fly_, which could be implemented as follows:
-
-[source,java]
-----
-/**
- * Use this method to compute dynamic where we should route next.
- *
- * @param body the message body
- * @return endpoints to go, or <tt>null</tt> to indicate the end
- */
-public String slip(String body) {
-    bodies.add(body);
-    invoked++;
-
-    if (invoked == 1) {
-        return "mock:a";
-    } else if (invoked == 2) {
-        return "mock:b,mock:c";
-    } else if (invoked == 3) {
-        return "direct:foo";
-    } else if (invoked == 4) {
-        return "mock:result";
-    }
-
-    // no more so return null
-    return null;
-}
-----
-
-Mind that this example is only for show and tell. The current implementation is not thread safe. You would have to store the state on the Exchange, to ensure thread safety, as shown below:
-
-[source,java]
-----
-/**
- * Use this method to compute dynamic where we should route next.
- *
- * @param body the message body
- * @param properties the exchange properties where we can store state between invocations
- * @return endpoints to go, or <tt>null</tt> to indicate the end
- */
-public String slip(String body, @Properties Map<String, Object> properties) {
-    bodies.add(body);
-
-    // get the state from the exchange properties and keep track how many times
-    // we have been invoked
-    int invoked = 0;
-    Object current = properties.get("invoked");
-    if (current != null) {
-        invoked = Integer.valueOf(current.toString());
-    }
-    invoked++;
-    // and store the state back on the properties
-    properties.put("invoked", invoked);
-
-    if (invoked == 1) {
-        return "mock:a";
-    } else if (invoked == 2) {
-        return "mock:b,mock:c";
-    } else if (invoked == 3) {
-        return "direct:foo";
-    } else if (invoked == 4) {
-        return "mock:result";
-    }
-
-    // no more so return null
-    return null;
-}
-----
-
-You could also store state as message headers, but they are not guaranteed to be preserved during routing, where as properties on the Exchange are. Although there was a bug in the method call expression, see the warning below.
-
-=== Spring XML
-The same example in Spring XML would be:
-
-[source,xml]
-----
-<bean id="mySlip" class="org.apache.camel.processor.DynamicRouterTest"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:start"/>
-        <dynamicRouter>
-            <!-- use a method call on a bean as dynamic router -->
-            <method ref="mySlip" method="slip"/>
-        </dynamicRouter>
-    </route>
-
-    <route>
-        <from uri="direct:foo"/>
-        <transform><constant>Bye World</constant></transform>
-    </route>
-
-</camelContext>
-----
-
-== @DynamicRouter annotation
-You can also use the `@DynamicRouter` annotation. The `route` method would then be invoked repeatedly as the message is processed dynamically.
-The idea is to return the next endpoint uri where to go. Return `null` to indicate the end. You can return multiple endpoints if you like, just as the Routing Slip, where each endpoint is separated by a delimiter.
-
-[source,java]
-----
-public class MyDynamicRouter {
-
-    @Consume(uri = "activemq:foo")
-    @DynamicRouter
-    public String route(@XPath("/customer/id") String customerId, @Header("Location") String location, Document body) {
-        // query a database to find the best match of the endpoint based on the input parameteres
-        // return the next endpoint uri, where to go. Return null to indicate the end.
-    }
-}
-----
diff --git a/docs/user-manual/modules/ROOT/pages/enrich-eip.adoc b/docs/user-manual/modules/ROOT/pages/enrich-eip.adoc
deleted file mode 100644
index e2a9eb9..0000000
--- a/docs/user-manual/modules/ROOT/pages/enrich-eip.adoc
+++ /dev/null
@@ -1,198 +0,0 @@
-[[enrich-eip]]
-= Enrich EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/enrich-eip.adoc
-
-Camel supports the Content Enricher from the EIP patterns using a Message Translator, an arbitrary Processor in the routing logic, or using the enrich DSL element to enrich the message.
-
-image::eip/DataEnricher.gif[image]
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-// eip options: START
-The Enrich EIP supports 7 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *strategyRef* | Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message. |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. | false | Boolean
-| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. | false | Boolean
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource exchange. Enrich will by default not share unit of work between the parent exchange and the resource exchange. This means the resource exchange has its own individual unit of work. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producer when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This reduc [...]
-| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-|===
-// eip options: END
-
-== Content enrichment using a Message Translator or a Processor
-
-You can use Templating to consume a message from one destination, transform it with something like Velocity or XQuery, and then send it on to another destination. For example using InOnly (one way messaging)
-
-== Samples
-
-[source,java]
-----
-from("activemq:My.Queue").
-  to("velocity:com/acme/MyResponse.vm").
-  to("activemq:Another.Queue");
-----
-
-If you want to use InOut (request-reply) semantics to process requests on the *My.Queue* queue on ActiveMQ with a template generated response, then sending responses back to the JMSReplyTo Destination you could use this:
-
-[source,java]
-----
-from("activemq:My.Queue").
-  to("velocity:com/acme/MyResponse.vm");
-----
-
-Here is a simple example using the DSL directly to transform the message body
-
-[source,java]
-----
-from("direct:start").setBody(body().append(" World!")).to("mock:result");
-----
-
-In this example we add our own Processor using explicit Java code
-
-[source,java]
-----
-from("direct:start").process(new Processor() {
-    public void process(Exchange exchange) {
-        Message in = exchange.getIn();
-        in.setBody(in.getBody(String.class) + " World!");
-    }
-}).to("mock:result");
-----
-
-Finally we can use Bean Integration to use any Java method on any bean to act as the transformer
-
-[source,java]
-----
-from("activemq:My.Queue").
-  beanRef("myBeanName", "myMethodName").
-  to("activemq:Another.Queue");
-----
-
-=== Using Spring XML
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:Input"/>
-  <bean ref="myBeanName" method="doTransform"/>
-  <to uri="activemq:Output"/>
-</route>
-----
-
-== Content enrichment using the enrich DSL element
-
-Camel comes with flavor `enrich` as a choice of content enricher in the DSL.
-The other one is `pollEnrich`
-
-`enrich` uses a Producer to obtain the additional data. It is usually used for Request Reply messaging, for instance to invoke an external web service.
-
-Both `enrich` and `pollEnrich` supports dynamic endpoints that uses an Expression to compute the uri, which allows to use data from the current Exchange.
-
-=== Enrich example using Java
-
-[source,java]
-----
-AggregationStrategy aggregationStrategy = ...
-
-from("direct:start")
-  .enrich("direct:resource", aggregationStrategy)
-  .to("direct:result");
-
-from("direct:resource")
-...
-----
-
-The content enricher (`enrich`) retrieves additional data from a _resource endpoint_ in order to enrich an incoming message (contained in the _original exchange_).
-An aggregation strategy is used to combine the original exchange and the _resource exchange_. The first parameter of the `AggregationStrategy.aggregate(Exchange, Exchange)` method corresponds to the original exchange, the second parameter the resource exchange.
-The results from the resource endpoint are stored in the resource exchange's out-message. Here's an example template for implementing an aggregation strategy:
-
-[source,java]
-----
-public class ExampleAggregationStrategy implements AggregationStrategy {
-
-    public Exchange aggregate(Exchange original, Exchange resource) {
-        Object originalBody = original.getIn().getBody();
-        Object resourceResponse = resource.getIn().getBody();
-        Object mergeResult = ... // combine original body and resource response
-        if (original.getPattern().isOutCapable()) {
-            original.getOut().setBody(mergeResult);
-        } else {
-            original.getIn().setBody(mergeResult);
-        }
-        return original;
-    }
-
-}
-----
-
-Using this template the original exchange can be of any pattern. The resource exchange created by the enricher is always an in-out exchange.
-
-=== Enrich example using XML
-
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <enrich strategyRef="aggregationStrategy">
-      <constant>direct:resource</constant>
-    </enrich>
-    <to uri="direct:result"/>
-  </route>
-  <route>
-    <from uri="direct:resource"/>
-    ...
-  </route>
-</camelContext>
-
-<bean id="aggregationStrategy" class="..." />
-----
-
-== Aggregation strategy is optional
-The aggregation strategy is optional. If you do not provide it Camel will by default just use the body obtained from the resource.
-[source,java]
-----
-from("direct:start")
-  .enrich("direct:resource")
-  .to("direct:result");
-----
-
-In the route above the message sent to the direct:result endpoint will contain the output from the direct:resource as we do not use any custom aggregation.
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <enrich>
-    <constant>direct:resource</constant>
-  </enrich>
-  <to uri="direct:result"/>
-</route>
-----
-
-== Using dynamic uris
-
-Both `enrich` and `pollEnrich` supports using dynamic uris computed based on information from the current Exchange. For example to enrich from a HTTP endpoint where the header with key orderId is used as part of the content-path of the HTTP url:
-[source,java]
-----
-from("direct:start")
-  .enrich().simple("http:myserver/${header.orderId}/order")
-  .to("direct:result");
-----
-
-And in XML DSL
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <enrich>
-    <simple>http:myserver/${header.orderId}/order</simple>
-  </enrich>
-  <to uri="direct:result"/>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/eventDrivenConsumer-eip.adoc b/docs/user-manual/modules/ROOT/pages/eventDrivenConsumer-eip.adoc
deleted file mode 100644
index af93dbd..0000000
--- a/docs/user-manual/modules/ROOT/pages/eventDrivenConsumer-eip.adoc
+++ /dev/null
@@ -1,59 +0,0 @@
-[[eventDrivenConsumer-eip]]
-= Event Driven Consumer
-:page-source: core/camel-core-engine/src/main/docs/eips/eventDrivenConsumer-eip.adoc
-
-Camel supports the
-http://www.enterpriseintegrationpatterns.com/EventDrivenConsumer.html[Event Driven Consumer]
-from the
-xref:enterprise-integration-patterns.adoc[EIP patterns].
-The default consumer model is event based (i.e. asynchronous)
-as this means that the Camel container can then manage pooling,
-threading and concurrency for you in a declarative manner.
-
-image::eip/EventDrivenConsumerSolution.gif[image]
-
-The Event Driven Consumer is implemented by consumers implementing the
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
-interface which is invoked by the xref:message-endpoint.adoc[Message Endpoint]
-when a xref:message.adoc[Message] is available for processing.
-
-[[eventDrivenConsumer-Example]]
-== Example
-
-The following demonstrates a
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
-defined in the Camel xref:registry.adoc[Registry] which is
-invoked when an event occurs from a xref:components::jms-component.adoc[JMS] queue.
-
-*Using the xref:fluent-builders.adoc[Fluent Builders]*
-
-[source,java]
-----
-from("jms:queue:foo")
-    .processRef("processor");
-----
-
-**Using the xref:spring-xml-extensions.adoc[Spring XML Extensions]**
-
-[source,xml]
-----
-<route>
-    <from uri="jms:queue:foo"/>
-    <to uri="processor"/>
-</route>
-----
-
-For more details see:
-
-* xref:message.adoc[Message]
-* xref:message-endpoint.adoc[Message Endpoint]
-
-[[eventDrivenConsumer-UsingThisPattern]]
-== Using This Pattern
-
-If you would like to use this EIP Pattern then please read the
-xref:getting-started.adoc[Getting Started], you may also find the
-xref:architecture.adoc[Architecture] useful particularly the description
-of xref:endpoint.adoc[Endpoint] and xref:uris.adoc[URIs]. Then you could
-try out some of the xref:examples.adoc[Examples] first before trying
-this pattern out.
diff --git a/docs/user-manual/modules/ROOT/pages/exchangeProperty-language.adoc b/docs/user-manual/modules/ROOT/pages/exchangeProperty-language.adoc
deleted file mode 100644
index c6c0a60..0000000
--- a/docs/user-manual/modules/ROOT/pages/exchangeProperty-language.adoc
+++ /dev/null
@@ -1,61 +0,0 @@
-[[exchangeProperty-language]]
-= ExchangeProperty Language
-:page-source: core/camel-core-languages/src/main/docs/exchangeProperty-language.adoc
-
-*Since Camel 2.0*
-
-The ExchangeProperty Expression Language allows you to extract values of
-named exchange properties.
-
-== Exchange Property Options
-
-// language options: START
-The ExchangeProperty language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The recipientList element of the Spring DSL can utilize a
-exchangeProperty expression like:
-
-In this case, the list of recipients are contained in the property
-'myProperty'.
-
-[source,xml]
-----
-<route>
-  <from uri="direct:a" />
-  <recipientList>
-    <exchangeProperty>myProperty</exchangeProperty>
-  </recipientList>
-</route>
-----
-
-And the same example in Java DSL:
-
-[source,java]
-----
-from("direct:a").recipientList(exchangeProperty("myProperty"));
-----
-
-And with a slightly different syntax where you use the builder to the
-fullest (i.e. avoid using parameters but using stacked operations,
-notice that exchangeProperty is not a parameter but a stacked method
-call)
-
-[source,java]
-----
-from("direct:a").recipientList().exchangeProperty("myProperty");
-----
-
-== Dependencies
-
-The ExchangeProperty language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/failover-eip.adoc b/docs/user-manual/modules/ROOT/pages/failover-eip.adoc
deleted file mode 100644
index 0b66117..0000000
--- a/docs/user-manual/modules/ROOT/pages/failover-eip.adoc
+++ /dev/null
@@ -1,47 +0,0 @@
-[[failover-eip]]
-= Failover EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/failover-eip.adoc
-
-Failover Load Balancer, with this policy in case of failures the exchange will be tried on the next endpoint.
-
-== Options
-
-// eip options: START
-The Failover EIP supports 4 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *exception* | A list of class names for specific exceptions to monitor. If no exceptions is configured then all exceptions is monitored |  | List
-| *roundRobin* | Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use wh [...]
-| *sticky* | Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to use when starting the load balanci [...]
-| *maximumFailoverAttempts* | A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. his option can be used whether or not roundRobin is enabled or not. | -1 | Integer
-|===
-// eip options: END
-
-== Examples
-
-In this case we are using the header test as correlation expression:
-
-[source,java]
-----
-from("direct:start")
-    .loadBalance()
-    .failover(MyException.class)
-    .to("seda:x", "seda:y", "seda:z");
-----
-
-In XML you'll have a route like this
-
-[source,xml]
-----
-<from uri="direct:start"/>
-    <loadBalance>
-       <failover>
-           <exception>com.example.camel.MyException</exception>
-       </failover>
-       <to uri="seda:x"/>      
-       <to uri="seda:y"/>      
-       <to uri="seda:z"/>       
-    </loadBalance> 
-----
diff --git a/docs/user-manual/modules/ROOT/pages/file-language.adoc b/docs/user-manual/modules/ROOT/pages/file-language.adoc
deleted file mode 100644
index 88bfa2c..0000000
--- a/docs/user-manual/modules/ROOT/pages/file-language.adoc
+++ /dev/null
@@ -1,295 +0,0 @@
-[[file-language]]
-= File Language
-:page-source: core/camel-core-languages/src/main/docs/file-language.adoc
-
-*Since Camel 1.1*
-
-The file language is merged with
-xref:simple-language.adoc[Simple] language which means you can use all the file
-syntax directly within the simple language.
-
-The File Expression Language is an extension to the
-xref:simple-language.adoc[Simple] language, adding file related capabilities.
-These capabilities are related to common use cases working with file
-path and names. The goal is to allow expressions to be used with the
-File and FTP components for setting
-dynamic file patterns for both consumer and producer.
-
-== File Language options
-
-// language options: START
-The File language supports 2 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| resultType |  | String | Sets the class name of the result type (type from output)
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Syntax
-
-This language is an *extension* to the xref:simple-language.adoc[Simple] language
-so the xref:simple-language.adoc[Simple] syntax applies also. So the table below
-only lists the additional.  +
- As opposed to xref:simple-language.adoc[Simple] language
-xref:file-language.adoc[File Language] also supports
-xref:constant-language.adoc[Constant] expressions so you can enter a fixed
-filename.
-
-All the file tokens use the same expression name as the method on the
-`java.io.File` object, for instance `file:absolute` refers to the
-`java.io.File.getAbsolute()` method. Notice that not all expressions are
-supported by the current Exchange. For instance the xref:components::ftp-component.adoc[FTP]
-component supports some of the options, where as the
-File component supports all of them.
-
-
-[width="100%",cols="10%,10%,10%,10%,10%,25%,25%",options="header",]
-|===
-|Expression |Type |File Consumer |File Producer |FTP Consumer |FTP Producer |Description
-
-|file:name |String |yes |no |yes |no |refers to the file name (is relative to the starting directory, see note
-below)
-
-|file:name.ext |String |yes |no |yes |no |refers to the file extension only
-
-|file:name.ext.single |String |yes |no |yes |no |refers to the file extension. If the file
-extension has mutiple dots, then this expression strips and only returns
-the last part.
-
-|file:name.noext |String |yes |no |yes |no |refers to the file name with no extension (is relative to the starting
-directory, see note below)
-
-|file:name.noext.single |String |yes |no |yes |no |refers to the file name with no extension (is
-relative to the starting directory, see note below). If the file
-extension has multiple dots, then this expression strips only the last
-part, and keep the others.
-
-|file:onlyname |String |yes |no |yes |no |refers to the file name only with no leading paths.
-
-|file:onlyname.noext |String |yes |no |yes |no |refers to the file name only with no extension and with no leading
-paths.
-
-|file:onlyname.noext.single |String |yes |no |yes |no |refers to the file name only with no extension and
-with no leading paths. If the file extension has multiple dots, then
-this expression strips only the last part, and keep the others.
-
-|file:ext |String |yes |no |yes |no |refers to the file extension only
-
-|file:parent |String |yes |no |yes |no |refers to the file parent
-
-|file:path |String |yes |no |yes |no |refers to the file path
-
-|file:absolute |Boolean |yes |no |no |no |refers to whether the file is regarded as absolute or relative
-
-|file:absolute.path |String |yes |no |no |no |refers to the absolute file path
-
-|file:length |Long |yes |no |yes |no |refers to the file length returned as a Long type
-
-|file:size |Long |yes |no |yes |no |refers to the file length returned as a Long type
-
-|file:modified |Date |yes |no |yes |no |Refers to the file last modified returned as a Date type
-
-|date:_command:pattern_ |String |yes |yes |yes |yes |for date formatting using the `java.text.SimpleDateFormat` patterns. Is
-an *extension* to the xref:simple-language.adoc[Simple] language. Additional
-command is: *file* (consumers only) for the last modified timestamp of
-the file. Notice: all the commands from the xref:simple-language.adoc[Simple]
-language can also be used.
-|===
-
-== File token example
-
-=== Relative paths
-
-We have a `java.io.File` handle for the file `hello.txt` in the
-following *relative* directory: `.\filelanguage\test`. And we configure
-our endpoint to use this starting directory `.\filelanguage`. The file
-tokens will return as:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Expression |Returns
-
-|file:name |test\hello.txt
-
-|file:name.ext |txt
-
-|file:name.noext |test\hello
-
-|file:onlyname |hello.txt
-
-|file:onlyname.noext |hello
-
-|file:ext |txt
-
-|file:parent |filelanguage\test
-
-|file:path |filelanguage\test\hello.txt
-
-|file:absolute |false
-
-|file:absolute.path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-|===
-
-=== Absolute paths
-
-We have a `java.io.File` handle for the file `hello.txt` in the
-following *absolute* directory:
-`\workspace\camel\camel-core\target\filelanguage\test`. And we configure
-out endpoint to use the absolute starting directory
-`\workspace\camel\camel-core\target\filelanguage`. The file tokens will
-return as:
-
-[width="100%",cols="50%,50%",options="header",]
-|===
-|Expression |Returns
-
-|file:name |test\hello.txt 
-
-|file:name.ext |txt
-
-|file:name.noext |test\hello
-
-|file:onlyname |hello.txt
-
-|file:onlyname.noext |hello
-
-|file:ext |txt
-
-|file:parent |\workspace\camel\camel-core\target\filelanguage\test
-
-|file:path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-
-|file:absolute |true
-
-|file:absolute.path |\workspace\camel\camel-core\target\filelanguage\test\hello.txt
-|===
-
-== Samples
-
-You can enter a fixed xref:constant-language.adoc[Constant] expression such as
-`myfile.txt`:
-
-[source]
-----
-fileName="myfile.txt"
-----
-
-Lets assume we use the file consumer to read files and want to move the
-read files to backup folder with the current date as a sub folder. This
-can be archieved using an expression like:
-
-[source]
-----
-fileName="backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"
-----
-
-relative folder names are also supported so suppose the backup folder
-should be a sibling folder then you can append .. as:
-
-[source]
-----
-fileName="../backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"
-----
-
-As this is an extension to the xref:simple-language.adoc[Simple] language we have
-access to all the goodies from this language also, so in this use case
-we want to use the in.header.type as a parameter in the dynamic
-expression:
-
-[source]
-----
-fileName="../backup/${date:now:yyyyMMdd}/type-${in.header.type}/backup-of-${file:name.noext}.bak"
-----
-
-If you have a custom Date you want to use in the expression then Camel
-supports retrieving dates from the message header.
-
-[source]
-----
-fileName="orders/order-${in.header.customerId}-${date:in.header.orderDate:yyyyMMdd}.xml"
-----
-
-And finally we can also use a bean expression to invoke a POJO class
-that generates some String output (or convertible to String) to be used:
-
-[source]
-----
-fileName="uniquefile-${bean:myguidgenerator.generateid}.txt"
-----
-
-And of course all this can be combined in one expression where you can
-use the xref:file-language.adoc[File Language], xref:file-language.adoc[Simple]
-and the xref:components::bean-component.adoc[Bean] language in one combined expression. This
-is pretty powerful for those common file path patterns.
-
-== Using Spring PropertyPlaceholderConfigurer together with the File component
-
-In Camel you can use the xref:file-language.adoc[File Language] directly
-from the xref:simple-language.adoc[Simple] language which makes a
-Content Based Router easier to do in
-Spring XML, where we can route based on file extensions as shown below:
-
-[source,xml]
-----
-<from uri="file://input/orders"/>
-   <choice>
-     <when>
-         <simple>${file:ext} == 'txt'</simple>
-         <to uri="bean:orderService?method=handleTextFiles"/>
-     </when>
-     <when>
-         <simple>${file:ext} == 'xml'</simple>
-         <to uri="bean:orderService?method=handleXmlFiles"/>
-     </when>
-     <otherwise>
-         <to uri="bean:orderService?method=handleOtherFiles"/>
-     </otherwise>
-  </choice>
-----
-
-If you use the `fileName` option on the File endpoint
-to set a dynamic filename using the xref:file-language.adoc[File Language] then make sure you  +
- use the alternative syntax to avoid
-clashing with Springs `PropertyPlaceholderConfigurer`.
-
-*bundle-context.xml*
-
-[source,xml]
-----
-<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-    <property name="location" value="classpath:bundle-context.cfg" />
-</bean>
-
-<bean id="sampleRoute" class="SampleRoute">
-    <property name="fromEndpoint" value="${fromEndpoint}" />
-    <property name="toEndpoint" value="${toEndpoint}" />
-</bean>
-----
-
-*bundle-context.cfg*
-
-[source]
-----
-fromEndpoint=activemq:queue:test
-toEndpoint=file://fileRoute/out?fileName=test-$simple{date:now:yyyyMMdd}.txt
-----
-
-Notice how we use the $simple\{ } syntax in the `toEndpoint` above. +
- If you don't do this, there is a clash and Spring will throw an
-exception like
-
-[source,java]
-----------------------------------------------------------------------------------------------------
-org.springframework.beans.factory.BeanDefinitionStoreException:
-Invalid bean definition with name 'sampleRoute' defined in class path resource [bundle-context.xml]:
-Could not resolve placeholder 'date:now:yyyyMMdd'
-----------------------------------------------------------------------------------------------------
-
-== Dependencies
-
-The File language is part of *camel-core*.
diff --git a/docs/user-manual/modules/ROOT/pages/filter-eip.adoc b/docs/user-manual/modules/ROOT/pages/filter-eip.adoc
deleted file mode 100644
index effb4a4..0000000
--- a/docs/user-manual/modules/ROOT/pages/filter-eip.adoc
+++ /dev/null
@@ -1,101 +0,0 @@
-[[filter-eip]]
-= Filter EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/filter-eip.adoc
-
-The http://www.enterpriseintegrationpatterns.com/Filter.html[Message
-Filter] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
-allows you to filter messages
-
-image::eip/MessageFilter.gif[image]
-
-The following example shows how to create a Message Filter route
-consuming messages from an endpoint called *queue:a*, which if the
-xref:predicate.adoc[Predicate] is true will be dispatched to *queue:b*
-
-== EIP options
-
-// eip options: START
-The Filter EIP has no options.
-// eip options: END
-
-== Samples
-
-Here is a little example in Java DSL:
-
-[source,java]
-----
-from("direct:a")
-    .filter(simple("${header.foo} == 'bar'"))
-        .to("direct:b");
-----
-
-You can use many different languages as the predicate, such as XPath:
-[source,java]
-----
-from("direct:start").
-        filter().xpath("/person[@name='James']").
-        to("mock:result");
-----
-
-Here is another example of using a bean to define the filter behavior
-
-[source,java]
-----
-from("direct:start")
-    .filter().method(MyBean.class, "isGoldCustomer")
-      .to("mock:gold")
-    .end()
-    .to("mock:all");
-
-public static class MyBean {
-    public boolean isGoldCustomer(@Header("level") String level) { 
-        return level.equals("gold"); 
-    }
-}
-----
-
-And the example in XML:
-
-[source,xml]
-----
-<bean id="myBean" class="com.foo.MyBean"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <filter>
-            <method ref="myBean" method="isGoldCustomer"/>
-            <to uri="direct:b"/>
-        </filter>
-    </route>
-</camelContext>
-----
-
-
-== Using stop
-
-Stop is a bit different than a message filter as it will filter out all
-messages and end the route entirely (filter only applies to its child
-processor). Stop is convenient to use in a
-xref:content-based-router-eip.adoc[Content Based Router] when you for
-example need to stop further processing in one of the predicates.
-
-In the example below we do not want to route messages any further that
-has the word `Bye` in the message body. Notice how we prevent this in
-the when predicate by using the `.stop()`.
-
-== Knowing if Exchange was filtered or not
-
-The xref:filter-eip.adoc[Message Filter] EIP will add a property on
-the xref:exchange.adoc[Exchange] that states if it was filtered or not.
-
-The property has the key `Exchange.FILTER_MATCHED`, which has the String
-value of `CamelFilterMatched`. Its value is a boolean indicating `true`
-or `false`. If the value is `true` then the xref:exchange.adoc[Exchange]
-was routed in the filter block. This property will be visible within the
-xref:filter-eip.adoc[Message Filter] block who's
-xref:predicate.adoc[Predicate] matches (value set to `true`), and to the
-steps immediately following the xref:filter-eip.adoc[Message Filter]
-with the value set based on the results of the last
-xref:filter-eip.adoc[Message Filter] xref:predicate.adoc[Predicate]
-evaluated.
diff --git a/docs/user-manual/modules/ROOT/pages/from-eip.adoc b/docs/user-manual/modules/ROOT/pages/from-eip.adoc
deleted file mode 100644
index 255ed88..0000000
--- a/docs/user-manual/modules/ROOT/pages/from-eip.adoc
+++ /dev/null
@@ -1,38 +0,0 @@
-[[from-eip]]
-= From EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/from-eip.adoc
-Starting point for a Camel route that starts a route with a given endpoint. The endpoint can be from one of the many Camel https://github.com/apache/camel/tree/master/components[Components]. The component creates Camel exchanges from their respective sources and puts them into the route.
-
-== Options
-
-// eip options: START
-The From EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uri* | *Required* Sets the URI of the endpoint to use |  | String
-|===
-// eip options: END
-
-== Samples
-
-Start a route with the File endpoint. Each file in the directory creates an exchange that is put into the camel route.
-
-A camel route is started using from inside the configure method of the class *RouteBuilder*
-
-[source,java]
-----
-from("file:c:/in")
-----
-
-And examples in Spring XML Schema:
-
-The route is defined inside a CamelContext.
-
-[source,xml]
-----
-<route>
-  <from uri="file:c:/in" />
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/header-language.adoc b/docs/user-manual/modules/ROOT/pages/header-language.adoc
deleted file mode 100644
index c2134f4..0000000
--- a/docs/user-manual/modules/ROOT/pages/header-language.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-[[header-language]]
-= Header Language
-:page-source: core/camel-core-languages/src/main/docs/header-language.adoc
-
-*Since Camel 1.5*
-
-The Header Expression Language allows you to extract values of named
-headers.
-
-== Header Options
-
-// language options: START
-The Header language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The recipientList element of the Spring DSL can utilize a header
-expression like:
-
-In this case, the list of recipients are contained in the header
-'myHeader'.
-
-And the same example in Java DSL:
-
-And with a slightly different syntax where you use the builder to the
-fullest (i.e. avoid using parameters but using stacked operations,
-notice that header is not a parameter but a stacked method call)
-
-[source,java]
-----
-from("direct:a").recipientList().header("myHeader");
-----
-
-== Dependencies
-
-The Header language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/hystrix-eip.adoc b/docs/user-manual/modules/ROOT/pages/hystrix-eip.adoc
deleted file mode 100644
index fa4e0b3..0000000
--- a/docs/user-manual/modules/ROOT/pages/hystrix-eip.adoc
+++ /dev/null
@@ -1,150 +0,0 @@
-[[hystrix-eip]]
-= Hystrix EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/hystrix-eip.adoc
-
-The Hystrix EIP provides integration with Netflix https://github.com/Netflix/Hystrix[Hystrix] to be used as circuit breaker in the Camel routes. Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.
-
-
-[NOTE]
-====
-Camel provides the Circuit Breaker EIP in the route model, which allows to plugin different implementations.
-Hystrix is one such implementation.
-====
-
-Maven users will need to add the following dependency to their pom.xml to use this EIP:
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-hystrix</artifactId>
-    <version>x.x.x</version><!-- use the same version as your Camel core version -->
-</dependency>
-----
-
-== Configuration options
-
-// eip options: START
-The Hystrix EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *hystrixConfiguration* | Configures the Hystrix EIP Use end when configuration is complete, to return back to the Hystrix EIP. |  | HystrixConfigurationDefinition
-| *hystrixConfigurationRef* | Refers to a Hystrix configuration to use for configuring the Hystrix EIP. |  | String
-|===
-// eip options: END
-
-See xref:hystrixConfiguration-eip.adoc[Hystrix Configuration] for all the configuration options on Hystrix EIP.
-
-== Samples
-
-Below is an example route showing an Hystrix endpoint that protects against slow operation by falling back to the in-lined fallback route. By default the timeout request is just *1000ms* so the HTTP endpoint has to be fairly quick to succeed.
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        .to("http://fooservice.com/slow")
-    .onFallback()
-        .transform().constant("Fallback message")
-    .end()
-    .to("mock:result");
-----
-
-And in XML DSL:
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <circuitBreaker>
-      <to uri="http://fooservice.com/slow"/>
-      <onFallback>
-        <transform>
-          <constant>Fallback message</constant>
-        </transform>
-      </onFallback>
-    </circuitBreaker>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Configuring Hystrix
-
-You can fine-tune Hystrix by the many xref:hystrixConfiguration-eip.adoc[Hystrix Configuration] options.
-For example to use a 2 second execution timeout, you can do as follows:
-
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        // use 2 second timeout
-        .hystrixConfiguration().executionTimeoutInMilliseconds(2000).end()
-        .log("Hystrix processing start: ${threadName}")
-        .toD("direct:${body}")
-        .log("Hystrix processing end: ${threadName}")
-    .end()
-    .log("After Hystrix ${body}");
-----
-
-And in XML:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <circuitBreaker>
-    <hystrixConfiguration executionTimeoutInMilliseconds="2000"/>
-    <log message="Hystrix processing start: ${threadName}"/>
-    <toD uri="direct:${body}"/>
-    <log message="Hystrix processing end: ${threadName}"/>
-  </circuitBreaker>
-  <log message="After Hystrix: ${body}"/>
-</route>
-----
-
-== Fallback
-
-See xref:onFallback-eip.adoc[onFallback].
-
-== Other examples
-
-You can find an example with the source code: https://github.com/apache/camel-spring-boot/tree/master/examples/camel-example-spring-boot-hystrix[camel-example-spring-boot-hystrix].
-
-== Using Hystrix with Spring Boot
-
-See the xref:components::hystrix.adoc[Hystrix Component].
-
-== Camel's Error Handler and Circuit Breaker EIP
-
-By default the Circuit Breaker EIP handles errors by itself. This means if the circuit breaker is open and
-the message fails, then Camel's error handler is not reacting also.
-However, you can enable Camels error handler with circuit breaker by enabling the `inheritErrorHandler` option, as shown:
-
-[source,java]
-----
-// Camel's error handler that will attempt to redeliver the message 3 times
-errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(3).redeliveryDelay(0));
-
-from("direct:start")
-    .to("log:start")
-    // turn on Camel's error handler on circuit breaker so Camel can do redeliveries
-    .circuitBreaker().inheritErrorHandler(true)
-        .to("mock:a")
-        .throwException(new IllegalArgumentException("Forced"))
-    .end()
-    .to("log:result")
-    .to("mock:result");
-----
-
-This example is from an unit test, where you can see the Circuit Breaker EIP block has been hardcoded
-to always fail by throwing an exception. Because the `inheritErrorHandler` has been enabled,
-then Camel's error handler will attempt to call the Circuit Breaker EIP block again.
-
-That means the `mock:a` endpoint will receive the message again, and a total of 1 + 3 = 4 message
-(first time + 3 redeliveries).
-
-If we turn off the `inheritErrorHandler` option (default) then the Circuit Breaker EIP will only be
-executed once because it handled the error itself.
-
diff --git a/docs/user-manual/modules/ROOT/pages/hystrixConfiguration-eip.adoc b/docs/user-manual/modules/ROOT/pages/hystrixConfiguration-eip.adoc
deleted file mode 100644
index 1e294e8..0000000
--- a/docs/user-manual/modules/ROOT/pages/hystrixConfiguration-eip.adoc
+++ /dev/null
@@ -1,44 +0,0 @@
-[[hystrixConfiguration-eip]]
-= Hystrix Configuration EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/hystrixConfiguration-eip.adoc
-
-
-// eip options: START
-The Hystrix Configuration EIP supports 31 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *groupKey* | Sets the group key to use. The default value is CamelHystrix. | CamelHystrix | String
-| *threadPoolKey* | Sets the thread pool key to use. Will by default use the same value as groupKey has been configured to use. | CamelHystrix | String
-| *circuitBreakerEnabled* | Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic will be used and all requests permitted. This is similar in effect to circuitBreakerForceClosed() except that continues tracking metrics and knowing whether it should be open/closed, this property results in not even instantiating a circuit-breaker. | true | Boolean
-| *circuitBreakerError ThresholdPercentage* | Error percentage threshold (as whole number such as 50) at which point the circuit breaker will trip open and reject requests. It will stay tripped for the duration defined in circuitBreakerSleepWindowInMilliseconds; The error percentage this is compared against comes from HystrixCommandMetrics.getHealthCounts(). | 50 | Integer
-| *circuitBreakerForceClosed* | If true the HystrixCircuitBreaker#allowRequest() will always return true to allow requests regardless of the error percentage from HystrixCommandMetrics.getHealthCounts(). The circuitBreakerForceOpen() property takes precedence so if it set to true this property does nothing. | false | Boolean
-| *circuitBreakerForceOpen* | If true the HystrixCircuitBreaker.allowRequest() will always return false, causing the circuit to be open (tripped) and reject all requests. This property takes precedence over circuitBreakerForceClosed(); | false | Boolean
-| *circuitBreakerRequestVolume Threshold* | Minimum number of requests in the metricsRollingStatisticalWindowInMilliseconds() that must exist before the HystrixCircuitBreaker will trip. If below this number the circuit will not trip regardless of error percentage. | 20 | Integer
-| *circuitBreakerSleepWindow InMilliseconds* | The time in milliseconds after a HystrixCircuitBreaker trips open that it should wait before trying requests again. | 5000 | Integer
-| *executionIsolationSemaphore MaxConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.run(). Requests beyond the concurrent limit will be rejected. Applicable only when executionIsolationStrategy == SEMAPHORE. | 20 | Integer
-| *executionIsolationStrategy* | What isolation strategy HystrixCommand.run() will be executed with. If THREAD then it will be executed on a separate thread and concurrent requests limited by the number of threads in the thread-pool. If SEMAPHORE then it will be executed on the calling thread and concurrent requests limited by the semaphore count. | THREAD | String
-| *executionIsolationThread InterruptOnTimeout* | Whether the execution thread should attempt an interrupt (using Future#cancel) when a thread times out. Applicable only when executionIsolationStrategy() == THREAD. | true | Boolean
-| *executionTimeoutIn Milliseconds* | Time in milliseconds at which point the command will timeout and halt execution. If executionIsolationThreadInterruptOnTimeout == true and the command is thread-isolated, the executing thread will be interrupted. If the command is semaphore-isolated and a HystrixObservableCommand, that command will get unsubscribed. | 1000 | Integer
-| *executionTimeoutEnabled* | Whether the timeout mechanism is enabled for this command | true | Boolean
-| *fallbackIsolationSemaphore MaxConcurrentRequests* | Number of concurrent requests permitted to HystrixCommand.getFallback(). Requests beyond the concurrent limit will fail-fast and not attempt retrieving a fallback. | 10 | Integer
-| *fallbackEnabled* | Whether HystrixCommand.getFallback() should be attempted when failure occurs. | true | Boolean
-| *metricsHealthSnapshot IntervalInMilliseconds* | Time in milliseconds to wait between allowing health snapshots to be taken that calculate success and error percentages and affect HystrixCircuitBreaker.isOpen() status. On high-volume circuits the continual calculation of error percentage can become CPU intensive thus this controls how often it is calculated. | 500 | Integer
-| *metricsRollingPercentile BucketSize* | Maximum number of values stored in each bucket of the rolling percentile. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10 | Integer
-| *metricsRollingPercentile Enabled* | Whether percentile metrics should be captured using HystrixRollingPercentile inside HystrixCommandMetrics. | true | Boolean
-| *metricsRollingPercentile WindowInMilliseconds* | Duration of percentile rolling window in milliseconds. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10000 | Integer
-| *metricsRollingPercentile WindowBuckets* | Number of buckets the rolling percentile window is broken into. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 6 | Integer
-| *metricsRollingStatistical WindowInMilliseconds* | This property sets the duration of the statistical rolling window, in milliseconds. This is how long metrics are kept for the thread pool. The window is divided into buckets and rolls by those increments. | 10000 | Integer
-| *metricsRollingStatistical WindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside HystrixCommandMetrics. | 10 | Integer
-| *requestLogEnabled* | Whether HystrixCommand execution and events should be logged to HystrixRequestLog. | true | Boolean
-| *corePoolSize* | Core thread-pool size that gets passed to java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) | 10 | Integer
-| *maximumSize* | Maximum thread-pool size that gets passed to ThreadPoolExecutor#setMaximumPoolSize(int). This is the maximum amount of concurrency that can be supported without starting to reject HystrixCommands. Please note that this setting only takes effect if you also set allowMaximumSizeToDivergeFromCoreSize | 10 | Integer
-| *keepAliveTime* | Keep-alive time in minutes that gets passed to {link ThreadPoolExecutor#setKeepAliveTime(long, TimeUnit)} | 1 | Integer
-| *maxQueueSize* | Max queue size that gets passed to BlockingQueue in HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect the instantiation of a threadpool - it is not eliglible to change a queue size on the fly. For that, use queueSizeRejectionThreshold(). | -1 | Integer
-| *queueSizeRejectionThreshold* | Queue size rejection threshold is an artificial max size at which rejections will occur even if maxQueueSize has not been reached. This is done because the maxQueueSize of a BlockingQueue can not be dynamically changed and we want to support dynamically changing the queue size that affects rejections. This is used by HystrixCommand when queuing a thread for execution. | 5 | Integer
-| *threadPoolRollingNumber StatisticalWindowIn Milliseconds* | Duration of statistical rolling window in milliseconds. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10000 | Integer
-| *threadPoolRollingNumber StatisticalWindowBuckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10 | Integer
-| *allowMaximumSizeToDiverge FromCoreSize* | Allows the configuration for maximumSize to take effect. That value can then be equal to, or higher, than coreSize | false | Boolean
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/idempotentConsumer-eip.adoc b/docs/user-manual/modules/ROOT/pages/idempotentConsumer-eip.adoc
deleted file mode 100644
index cc379e1..0000000
--- a/docs/user-manual/modules/ROOT/pages/idempotentConsumer-eip.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-[[idempotentConsumer-eip]]
-= Idempotent Consumer EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/idempotentConsumer-eip.adoc
-
-The
-http://www.enterpriseintegrationpatterns.com/IdempotentReceiver.html[Idempotent
-Consumer] from the xref:enterprise-integration-patterns.adoc[EIP
-patterns] is used to filter out duplicate messages.
-
-The Idempotent Consumer essentially acts like a
-xref:filter-eip.adoc[Message Filter] to filter out duplicates.
-
-Camel will add the message id eagerly to the repository to detect
-duplication also for Exchanges currently in progress. 
- On completion Camel will remove the message id from the repository if
-the Exchange failed, otherwise it stays there.
-
-Camel provides the following Idempotent Consumer implementations:
-
-* MemoryIdempotentRepository
-* xref:components::file-component.adoc[FileIdempotentRepository]
-* xref:components::hazelcast.adoc[HazelcastIdempotentRepository]
-* xref:components::sql-component.adoc[JdbcMessageIdRepository]
-* xref:components::jpa-component.adoc[JpaMessageIdRepository]
-* xref:components::infinispan-component.adoc[InfinispanIdempotentRepository]
-* xref:components::jcache-component.adoc[JCacheIdempotentRepository]
-* xref:spring.adoc[SpringCacheIdempotentRepository]
-* xref:components::ehcache-component.adoc[EhcacheIdempotentRepository]
-* xref:components::kafka-component.adoc[KafkaIdempotentRepository]
-
-== Options
-
-// eip options: START
-The Idempotent Consumer EIP supports 5 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *messageIdRepositoryRef* | *Required* Sets the reference name of the message id repository |  | String
-| *eager* | Sets whether to eagerly add the key to the idempotent repository or wait until the exchange is complete. Eager is default enabled. | true | Boolean
-| *completionEager* | Sets whether to complete the idempotent consumer eager or when the exchange is done. If this option is true to complete eager, then the idempotent consumer will trigger its completion when the exchange reached the end of the block of the idempotent consumer pattern. So if the exchange is continued routed after the block ends, then whatever happens there does not affect the state. If this option is false (default) to not complete eager, then the idempotent consumer w [...]
-| *skipDuplicate* | Sets whether to skip duplicates or not. The default behavior is to skip duplicates. A duplicate message would have the Exchange property org.apache.camel.Exchange#DUPLICATE_MESSAGE set to a Boolean#TRUE value. A none duplicate message will not have this property set. | true | Boolean
-| *removeOnFailure* | Sets whether to remove or keep the key on failure. The default behavior is to remove the key on failure. | true | Boolean
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/inOnly-eip.adoc b/docs/user-manual/modules/ROOT/pages/inOnly-eip.adoc
deleted file mode 100644
index b359088..0000000
--- a/docs/user-manual/modules/ROOT/pages/inOnly-eip.adoc
+++ /dev/null
@@ -1,17 +0,0 @@
-[[inOnly-eip]]
-= In Only EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/inOnly-eip.adoc
-
-The *inOnly:* EIP define an InOnly ExchangePattern.
-
-== EIP options
-
-// eip options: START
-The In Only EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uri* | *Required* Sets the uri of the endpoint to send to. |  | String
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/inOut-eip.adoc b/docs/user-manual/modules/ROOT/pages/inOut-eip.adoc
deleted file mode 100644
index ff1b4ec..0000000
--- a/docs/user-manual/modules/ROOT/pages/inOut-eip.adoc
+++ /dev/null
@@ -1,17 +0,0 @@
-[[inOut-eip]]
-= In Out EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/inOut-eip.adoc
-
-The *inOut:* EIP define an InOut ExchangePattern.
-
-== EIP options
-
-// eip options: START
-The In Out EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uri* | *Required* Sets the uri of the endpoint to send to. |  | String
-|===
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/loadBalance-eip.adoc b/docs/user-manual/modules/ROOT/pages/loadBalance-eip.adoc
deleted file mode 100644
index 512291e..0000000
--- a/docs/user-manual/modules/ROOT/pages/loadBalance-eip.adoc
+++ /dev/null
@@ -1,251 +0,0 @@
-[[loadBalance-eip]]
-= Load Balance EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/loadBalance-eip.adoc
-
-The Load Balancer Pattern allows you to delegate to one of a number of endpoints using a variety of different load balancing policies.
-
-== Built-in load balancing policies
-
-Camel provides the following policies out-of-the-box:
-
-[width="100%",cols="3,6",options="header"]
-|=======================================================================
-| Policy | Description
-| Round Robin | The exchanges are selected from in a round robin fashion. This is a well known and classic policy, which spreads the load evenly.
-| Random | A random endpoint is selected for each exchange.
-| Sticky | Sticky load balancing using an Expression to calculate a correlation key to perform the sticky load balancing; rather like jsessionid in the web or JMSXGroupID in JMS.
-| Topic | Topic which sends to all destinations (rather like JMS Topics)
-| Failover | In case of failures the exchange will be tried on the next endpoint.
-| Weighted Round-Robin |The weighted load balancing policy allows you to specify a processing load distribution ratio for each server with respect to the others. In addition to the weight, endpoint selection is then further refined using *round-robin* distribution based on weight.
-| Weighted Random |The weighted load balancing policy allows you to specify a processing load distribution ratio for each server with respect to others.In addition to the weight, endpoint selection is then further refined using *random* distribution based on weight.
-| Custom |The preferred way of using a custom Load Balancer is to use this policy, as the ref attribute is not supported anymore.
-|=======================================================================
-
-== Options
-
-// eip options: START
-The Load Balance EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *loadBalancerType* | *Required* The load balancer to be used |  | LoadBalancerDefinition
-| *inheritErrorHandler* | Sets whether or not to inherit the configured error handler. The default value is true. You can use this to disable using the inherited error handler for a given DSL such as a load balancer where you want to use a custom error handler strategy. | false | Boolean
-|===
-// eip options: END
-
-
-== Round Robin
-
-The round robin load balancer is not meant to work with failover, for that you should use the dedicated *failover* load balancer. The round robin load balancer will only change to next endpoint per message.
-The round robin load balancer is stateful as it keeps state of which endpoint to use next time.
-
-Here is a little example:
-
-[source,java]
-----
-from("direct:start")
-    .loadBalance().roundRobin()
-        .to("mock:x")
-        .to("mock:y")
-        .to("mock:z")
-    .end() // end load balancer
-----
-
-And in XML:
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <loadBalance>
-        <roundRobin/>
-        <to uri="mock:x"/>
-        <to uri="mock:y"/>
-        <to uri="mock:z"/>
-    </loadBalance>
-  </route>
-</camelContext>
-----
-
-The above example loads balance requests from *direct:start* to one of the available *mock endpoint* instances, in this case using a round robin policy.
-
-== Failover
-
-The failover load balancer is capable of trying the next processor in case an Exchange failed with an exception during processing.
-You can constrain the failover to activate only when one exception of a list you specify occurs. If you do not specify a list any exception will cause fail over to occur. This balancer uses the same strategy for matching exceptions as the Exception Clause does for the `onException`.
-
-[TIP]
-====
-**Enable stream caching if using streams:**
-
-If you use streaming then you should enable Stream caching when using the failover load balancer. This is needed so the stream can be re-read after failing over to the next processor.
-====
-
-Here is a sample to failover only if a IOException related exception was thrown:
-[source,java]
-----
-from("direct:start")
-    // here we will load balance if IOException was thrown
-    // any other kind of exception will result in the Exchange as failed
-    // to failover over any kind of exception we can just omit the exception
-    // in the failOver DSL
-    .loadBalance().failover(IOException.class)
-        .to("mock:x")
-        .to("mock:y")
-        .to("mock:z");
-----
-You can specify multiple exceptions to failover as the option is varargs, for instance:
-
-[source,java]
-----
-// enable maximum redelivery so failover can react
-errorHandler(defaultErrorHandler().maximumRedeliveries(5));
-
-from("direct:foo").
-    loadBalance().failover(IOException.class, MyOtherException.class)
-        .to("direct:a")
-        .to("direct:b");
-----
-
-And in XML:
-
-Failover can also be used from Spring DSL and you configure it as:
-[source,xml]
-----
-<route errorHandlerRef="myErrorHandler">
-   <from uri="direct:foo"/>
-   <loadBalance>
-       <failover>
-           <exception>java.io.IOException</exception>
-           <exception>com.mycompany.MyOtherException</exception>
-       </failover>
-       <to uri="direct:a"/>
-       <to uri="direct:b"/>
-   </loadBalance>
- </route>
-----
-
-== Using failover in round robin mode
-
-An example using Java DSL:
-[source,java]
-----
-from("direct:start")
-    // Use failover load balancer in stateful round robin mode
-    // which mean it will failover immediately in case of an exception
-    // as it does NOT inherit error handler. It will also keep retrying as
-    // its configured to newer exhaust.
-    .loadBalance().failover(-1, false, true)
-        .to("direct:bad")
-        .to("direct:bad2")
-        .to("direct:good")
-        .to("direct:good2");
-----
-
-And the same example using Spring XML:
-[source,xml]
-----
-<route>
-    <from uri="direct:start"/>
-    <loadBalance>
-        <!-- failover using stateful round robin,
-             which will keep retrying forever those 4 endpoints until success.
-             You can set the maximumFailoverAttempt to break out after X attempts -->
-        <failover roundRobin="true"/>
-        <to uri="direct:bad"/>
-        <to uri="direct:bad2"/>
-        <to uri="direct:good"/>
-        <to uri="direct:good2"/>
-    </loadBalance>
-</route>
-----
-
-[TIP]
-====
-*Disabled inheritErrorHandler*
-
-You can configure `inheritErrorHandler=false` if you want to failover to the next endpoint as fast as possible.
-By disabling the Error Handler you ensure it does not _intervene_ which allows the `failover` load balancer to handle failover asap.
-By also enabling `roundRobin` mode, then it will keep retrying until it success. You can then configure the `maximumFailoverAttempts` option to a high value to let it eventually exhaust (give up) and fail.
-====
-
-== Weighted Round-Robin and Random Load Balancing
-
-In many enterprise environments where server nodes of unequal processing power & performance characteristics are utilized to host services and processing endpoints, it is frequently necessary to distribute processing load based on their individual server capabilities so that some endpoints are not unfairly burdened with requests. Obviously simple round-robin or random load balancing do not alleviate problems of this nature. A Weighted Round-Robin and/or Weighted Random load balancer can  [...]
-The weighted load balancing policy allows you to specify a processing load distribution ratio for each server with respect to others. You can specify this as a positive processing weight for each server. A larger number indicates that the server can handle a larger load. The weight is utilized to determine the payload distribution ratio to different processing endpoints with respect to others.
-
-The parameters that can be used are
-
-[width="100%",cols="3,1,2,6",options="header"]
-|=======================================================================
-| Option | Type | Default | Description
-| roundRobin | boolean | false | The default value for round-robin is false. In the absence of this setting or parameter the load balancing algorithm used is random.
-| distributionRatio | String | none | The distributionRatio is a delimited String consisting on integer weights separated by delimiters for example "2,3,5". The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.
-| distributionRatioDelimiter | String | , | The distributionRatioDelimiter is the delimiter used to specify the distributionRatio. If this attribute is not specified a default delimiter "," is expected as the delimiter used for specifying the distributionRatio.
-|=======================================================================
-
-== Using Weighted round-robin & random load balancing
-
-An example using Java DSL:
-[source,java]
-----
-List<integer> distributionRatio = new ArrayList<integer>();
-distributionRatio.add(4);
-distributionRatio.add(2);
-distributionRatio.add(1);
-
-// round-robin
-from("direct:start")
-    .loadBalance().weighted(true, distributionRatio)
-    .to("mock:x", "mock:y", "mock:z");
-
-//random
-from("direct:start")
-    .loadBalance().weighted(false, distributionRatio)
-    .to("mock:x", "mock:y", "mock:z");
-----
-
-And the same example using Spring XML:
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <loadBalance>
-    <weighted roundRobin="false"
-              distributionRatio="4 2 1"/>
-      <to uri="mock:x"/>
-      <to uri="mock:y"/>
-      <to uri="mock:z"/>
-  </loadBalance>
-</route>
-----
-
-An example using Java DSL:
-[source,java]
-----
-// round-robin
-from("direct:start")
-    .loadBalance().weighted(true, "4:2:1" distributionRatioDelimiter=":")
-    .to("mock:x", "mock:y", "mock:z");
-
-//random
-from("direct:start")
-    .loadBalance().weighted(false, "4,2,1")
-    .to("mock:x", "mock:y", "mock:z");
-----
-
-And the same example using Spring XML:
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <loadBalance>
-    <weighted roundRobin="false"
-              distributionRatio="4-2-1" distributionRatioDelimiter="-" />
-      <to uri="mock:x"/>
-      <to uri="mock:y"/>
-      <to uri="mock:z"/>
-  </loadBalance>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/log-eip.adoc b/docs/user-manual/modules/ROOT/pages/log-eip.adoc
deleted file mode 100644
index 18ecb14..0000000
--- a/docs/user-manual/modules/ROOT/pages/log-eip.adoc
+++ /dev/null
@@ -1,204 +0,0 @@
-[[log-eip]]
-= Log EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/log-eip.adoc
-
-How can I log the processing of a xref:message.adoc[Message]?
-
-Camel provides many ways to log the fact that you are processing a message. Here are just a few examples:
-* You can use the xref:components::log-component.adoc[Log] component which logs the Message content.
-* You can use the xref:tracer.adoc[Tracer] which trace logs message flow.
-* You can also use a xref:processor.adoc[Processor] or xref:bean-binding.adoc[Bean] and log from Java code.
-* You can use the log DSL.
-
-== Options
-
-// eip options: START
-The Log EIP supports 5 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *message* | *Required* Sets the log message (uses simple language) |  | String
-| *loggingLevel* | Sets the logging level. The default value is INFO | INFO | LoggingLevel
-| *logName* | Sets the name of the logger |  | String
-| *marker* | To use slf4j marker |  | String
-| *loggerRef* | To refer to a custom logger instance to lookup from the registry. |  | String
-|===
-// eip options: END
-
-
-=== Difference between log in the DSL and Log component
-The log DSL is much lighter and meant for logging human logs such as Starting to do ... etc. It can only log a message based on the Simple language. On the other hand Log component is a full fledged component which involves using endpoints and etc. The Log component is meant for logging the Message itself and you have many URI options to control what you would like to be logged.
-
-== Samples
-
-You can use the log DSL which allows you to use xref:simple-language.adoc[Simple] language to construct a dynamic message which gets logged.
-
-For example you can do
-
-[source,java]
-----
-from("direct:start")
-    .log("Processing ${id}")
-    .to("bean:foo");
-----
-
-Which will construct a String message at runtime using the Simple language. The log message will by logged at INFO level using the route id as the log name. By default a route is named route-1, route-2 etc. But you can use the routeId("myCoolRoute") to set a route name of choice.
-
-[TIP]
-====
-*Logging message body with streamed messages:*
-
-If the message body is stream based, then logging the message body, may cause the message body to be empty afterwards. See this FAQ. For streamed messages you can use Stream caching to allow logging the message body and be able to read the message body afterwards again.
-====
-
-The log DSL have overloaded methods to set the logging level and/or name as well.
-[source,java]
-----
-from("direct:start")
-    .log(LoggingLevel.DEBUG, "Processing ${id}")
-    .to("bean:foo");
-----
-
-and to set a logger name
-[source,java]
-----
-from("direct:start")
-    .log(LoggingLevel.DEBUG, "com.mycompany.MyCoolRoute", "Processing ${id}")
-    .to("bean:foo");
-----
-
-The logger instance may be used as well:
-[source,java]
-----
-from("direct:start")
-    .log(LoggingLeven.DEBUG, org.slf4j.LoggerFactory.getLogger("com.mycompany.mylogger"), "Processing ${id}")
-    .to("bean:foo");
-----
-
-For example you can use this to log the file name being processed if you consume files.
-[source,java]
-----
-from("file://target/files")
-    .log(LoggingLevel.DEBUG, "Processing file ${file:name}")
-    .to("bean:foo");
-----
-
-In Spring DSL it is also easy to use log DSL as shown below:
-[source,xml]
-----
-<route id="foo">
-    <from uri="direct:foo"/>
-    <log message="Got ${body}"/>
-    <to uri="mock:foo"/>
-</route>
-----
-
-The log tag has attributes to set the message, loggingLevel and logName. For example:
-[source,xml]
-----
-<route id="baz">
-    <from uri="direct:baz"/>
-    <log message="Me Got ${body}" loggingLevel="FATAL" logName="com.mycompany.MyCoolRoute"/>
-    <to uri="mock:baz"/>
-</route>
-----
-
-Since Camel *2.12.4/2.13.1* it is possible to reference logger instance. For example:
-[source,xml]
-----
-<bean id="myLogger" class="org.slf4j.LoggerFactory" factory-method="getLogger" xmlns="http://www.springframework.org/schema/beans">
-    <constructor-arg value="com.mycompany.mylogger" />
-</bean>
- 
-<route id="moo" xmlns="http://camel.apache.org/schema/spring">
-    <from uri="direct:moo"/>
-    <log message="Me Got ${body}" loggingLevel="INFO" loggerRef="myLogger"/>
-    <to uri="mock:baz"/>
-</route>
-----
-
-=== Using Logger instance from the Registry
-
-If no logger name or logger instance is passed to log DSL,
- there is a Registry lookup performed to find single instance of org.slf4j.Logger.
- If such an instance is found, it is used instead of creating a new logger instance.
- If more instances are found, the behavior defaults to creating a new instance of logger.
-
-== Configuring log name globally
-
-By default the log name is the route id. If you want to use a different log name, you would need to configure the logName option. However if you have many logs and you want all of them to use the same log name, then you would need to set that logName option on all of them.
-
-You can configure a global log name that is used instead of the route id, eg
-[source,java]
-----
-camelContext.getGlobalOptions().put(Exchange.LOG_EIP_NAME, "com.foo.myapp");
-----
-
-And in XML
-[source,xml]
-----
-<camelContext ...>
-  <properties>
-    <property key="CamelLogEipName" value="com.foo.myapp"/>
-  </properties>
-</camelContext>
-----
-
-== Using slf4j Marker
-
-You can specify a marker name in the DSL
-[source,xml]
-----
-<route id="baz">
-    <from uri="direct:baz"/>
-    <log loggingLevel="FATAL" logName="com.mycompany.MyCoolRoute" marker="myMarker"
-         message="Me Got ${body}"/>
-    <to uri="mock:baz"/>
-</route>
-----
-
-== Using log DSL in OSGi
-
-When using log DSL inside OSGi (e.g., in Karaf), the underlying logging mechanisms are provided by PAX logging. It searches for a bundle which invokes org.slf4j.LoggerFactory.getLogger() method and associates the bundle with the logger instance. Passing only logger name to log DSL results in associating camel-core bundle with the logger instance created.
-
-In some scenarios it is required that the bundle associated with logger should be the bundle which contains route definition. This is possible using provided logger instance both for Java DSL and Spring DSL (see the examples above).
-
-== Masking sensitive information like password
-
-You can enable security masking for logging by setting `logMask` flag to `true`.
-Note that this option also affects xref:components::log-component.adoc[Log] component.
-
-To enable mask in Java DSL at CamelContext level:
-[source,java]
-----
-camelContext.setLogMask(true);
-----
-
-And in XML:
-[source,java]
-----
-<camelContext logMask="true">
-...
-</camelContext>
-----
-
-You can also turn it on|off at route level. To enable mask in Java DSL at route level:
-[source,java]
-----
-from("direct:start").logMask()
-    .log("Processing ${id}")
-    .to("bean:foo");
-----
-
-And in XML:
-[source,java]
-----
-<route logMask="true">
-...
-</route>
-----
-
-`org.apache.camel.support.processor.DefaultMaskingFormatter` is used for the masking by default.
-If you want to use a custom masking formatter, put it into registry with the name `CamelCustomLogMask`.
-Note that the masking formatter must implement `org.apache.camel.spi.MaskingFormatter`.
diff --git a/docs/user-manual/modules/ROOT/pages/loop-eip.adoc b/docs/user-manual/modules/ROOT/pages/loop-eip.adoc
deleted file mode 100644
index b283763..0000000
--- a/docs/user-manual/modules/ROOT/pages/loop-eip.adoc
+++ /dev/null
@@ -1,171 +0,0 @@
-[[loop-eip]]
-= Loop EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/loop-eip.adoc
-
-The Loop allows for processing a message a number of times, possibly in a different way for each iteration. Useful mostly during testing.
-
-[NOTE]
-.Default mode
-===
-Notice by default the loop uses the same exchange throughout the looping. So the result from the previous iteration will be used for the next (eg Pipes and Filters). You can enable copy mode instead. See the options table for more details.
-===
-
-== Options
-
-// eip options: START
-The Loop EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *copy* | If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content. | false | Boolean
-| *doWhile* | Enables the while loop that loops until the predicate evaluates to false or null. | false | Boolean
-|===
-// eip options: END
-
-
-== Exchange properties
-
-For each iteration two properties are set on the Exchange. Processors can rely on these properties to process the Message in different ways.
-
-[width="100%",cols="3,6",options="header"]
-|===
-| Property | Description
-| CamelLoopSize | Total number of loops. This is not available if running the loop in while loop mode.
-| CamelLoopIndex | Index of the current iteration (0 based)
-|===
-
-== Samples
-The following example shows how to take a request from the *direct:x* endpoint, then send the message repetitively to *mock:result*. The number of times the message is sent is either passed as an argument to `loop()`, or determined at runtime by evaluating an expression. The expression *must* evaluate to an int, otherwise a `RuntimeCamelException` is thrown.
-
-Pass loop count as an argument
-[source,java]
-----
-from("direct:a")
-    .loop(8)
-        .to("mock:result");
-----
-
-Use expression to determine loop count
-[source,java]
-----
-from("direct:b")
-    .loop(header("loop"))
-        .to("mock:result");
-----
-
-Use expression to determine loop count
-[source,java]
-----
-from("direct:c")
-    .loop(xpath("/hello/@times"))
-        .to("mock:result");
-----
-
-And examples in XML:
-
-Pass loop count as an argument
-[source,xml]
-----
-<route>
-  <from uri="direct:a"/>
-  <loop>
-    <constant>8</constant>
-    <to uri="mock:result"/>
-  </loop>
-</route>
-----
-
-Use expression to determine loop count
-[source,xml]
-----
-<route>
-  <from uri="direct:b"/>
-  <loop>
-    <header>loop</header>
-    <to uri="mock:result"/>
-  </loop>
-</route>
-----
-
-== Using copy mode
-
-Now suppose we send a message to "direct:start" endpoint containing the letter A. +
-The output of processing this route will be that, each "mock:loop" endpoint will receive "AB" as message.
-
-[source,java]
-----
-from("direct:start")
-    // instruct loop to use copy mode, which mean it will use a copy of the input exchange
-    // for each loop iteration, instead of keep using the same exchange all over
-    .loop(3).copy()
-        .transform(body().append("B"))
-        .to("mock:loop")
-    .end() // end loop
-    .to("mock:result");
-----
-
-However if we do *not* enable copy mode then "mock:loop" will receive "AB", "ABB", "ABBB", etc. messages.
-
-[source,java]
-----
-from("direct:start")
-    // by default loop will keep using the same exchange so on the 2nd and 3rd iteration its
-    // the same exchange that was previous used that are being looped all over
-    .loop(3)
-        .transform(body().append("B"))
-        .to("mock:loop")
-    .end() // end loop
-    .to("mock:result");
-----
-
-The equivalent example in XML DSL in copy mode is as follows:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <!-- enable copy mode for loop eip -->
-  <loop copy="true">
-    <constant>3</constant>
-    <transform>
-      <simple>${body}B</simple>
-    </transform>
-    <to uri="mock:loop"/>
-  </loop>
-  <to uri="mock:result"/>
-</route>
-----
-
-== Using while mode
-
-The loop can act like a while loop that loops until the expression evaluates to false or null. +
-For example the route below loops while the length of the message body is 5 or less characters. Notice that the DSL uses *loopDoWhile*.
-
-[source,java]
-----
-from("direct:start")
-    .loopDoWhile(simple("${body.length} <= 5"))
-        .to("mock:loop")
-        .transform(body().append("A"))
-    .end() // end loop
-    .to("mock:result");
-----
-
-And the same example in XML:
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <loop doWhile="true">
-    <simple>${body.length} &lt;= 5</simple>
-    <to uri="mock:loop"/>
-    <transform>
-      <simple>A${body}</simple>
-    </transform>
-  </loop>
-  <to uri="mock:result"/>
-</route>
-----
-
-Notice in XML that the while loop is turned on using the *doWhile* attribute.
diff --git a/docs/user-manual/modules/ROOT/pages/marshal-eip.adoc b/docs/user-manual/modules/ROOT/pages/marshal-eip.adoc
deleted file mode 100644
index 4dd8a18..0000000
--- a/docs/user-manual/modules/ROOT/pages/marshal-eip.adoc
+++ /dev/null
@@ -1,45 +0,0 @@
-[[marshal-eip]]
-= Marshal EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/marshal-eip.adoc
-
-Marshalling is the opposite of unmarshalling, where a bean is marshalled into some binary or textual format for transmission over some transport via a Camel xref:components::index.adoc[Components]. Marshalling is used in the same way as unmarshalling above; in the xref:dsl.adoc[DSL] you can use a DataFormat instance, you can configure the DataFormat dynamically using the DSL or you can refer to a named instance of the format in the xref:registry.adoc[Registry].
-
-== Options
-
-// eip options: START
-The Marshal EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *dataFormatType* | *Required* The data format to be used |  | DataFormatDefinition
-|===
-// eip options: END
-
-== Samples
-
-The following example unmarshals via serialization then marshals using a named JAXB data format to perform a kind of xref:message-translator.adoc[Message Translator].
-
-[source,java]
-----
-from("file://foo/bar").
-  unmarshal().serialization().
-  marshal("jaxb").
-  to("activemq:Some.Queue");
-----
-
-[[DataFormat-UsingSpringXML]]
-=== Using Spring XML
-
-This example shows how to configure the data type just once and reuse it
-on multiple routes
-
-You can also define reusable data formats as Spring beans
-
-[source,xml]
---------------------------------------------------------
-<bean id="myJaxb" class="org.apache.camel.model.dataformat.JaxbDataFormat">
-  <property name="prettyPrint" value="true"/>
-  <property name="contextPath" value="org.apache.camel.example"/>
-</bean> 
---------------------------------------------------------
diff --git a/docs/user-manual/modules/ROOT/pages/multicast-eip.adoc b/docs/user-manual/modules/ROOT/pages/multicast-eip.adoc
deleted file mode 100644
index 7090974..0000000
--- a/docs/user-manual/modules/ROOT/pages/multicast-eip.adoc
+++ /dev/null
@@ -1,145 +0,0 @@
-[[multicast-eip]]
-= Multicast EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/multicast-eip.adoc
-
-The Multicast EIP allows to route the same message to a number of endpoints
-and process them in a different way. The main difference between the
-Multicast and Splitter is that Splitter will split the message into
-several pieces but the Multicast will not modify the request message.
-
-== Options
-
-// eip options: START
-The Multicast EIP supports 12 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *parallelProcessing* | If enabled then sending messages to the multicasts occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the multicasts which happens concurrently. | false | Boolean
-| *strategyRef* | Refers to an AggregationStrategy to be used to assemble the replies from the multicasts, into a single outgoing message from the Multicast. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy | false | Boolean
-| *executorServiceRef* | Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well. |  | String
-| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the multicast. | false | Boolean
-| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the multicast will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The defau [...]
-| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Multicast hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Multicast breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in  [...]
-| *onPrepareRef* | Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send. |  | String
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Multicast will by default not share unit of work between the parent exchange and each multicasted exchange. This means each sub exchange has its own individual unit of work. | false | Boolean
-| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. | false | Boolean
-| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. | false | Boolean
-|===
-// eip options: END
-
-== Multicast example
-
-The following example shows how to take a request from the *direct:a*
-endpoint , then multicast these request to *direct:x*, *direct:y*,
-*direct:z*.
-
-== Using the fluent builder
-
-By default Multicast invokes each endpoint sequentially. If parallel
-processing is desired, simply use
-
-[source,java]
-----
-from("direct:a").multicast().parallelProcessing().to("direct:x", "direct:y", "direct:z");
-----
-
-In case of using InOut MEP, an AggregationStrategy is used for
-aggregating all reply messages. The default is to only use the latest
-reply message and discard any earlier replies. The aggregation strategy
-is configurable:
-
-[source,java]
-----
-from("direct:start")
-  .multicast(new MyAggregationStrategy())
-  .parallelProcessing().timeout(500).to("direct:a", "direct:b", "direct:c")
-  .end()
-  .to("mock:result");
-----
-
-[NOTE]
-====
-The Multicast, Recipient List, and Splitter EIPs have special support for using `AggregationStrategy` with
-access to the original input exchange. You may want to use this when you aggregate messages and
-there has been a failure in one of the messages, which you then want to enrich on the original
-input message and return as response; its the aggregate method with 3 exchange parameters.
-====
-
-== Stop processing in case of exception
-
-The mutlicast EIP will by default continue to process
-the entire exchange even in case one of the
-multicasted messages will thrown an exception during routing. 
-For example if you want to multicast to 3 destinations and the 2nd
-destination fails by an exception. What Camel does by default is to
-process the remainder destinations. You have the chance to remedy or
-handle this in the `AggregationStrategy`.
-
-But sometimes you just want Camel to stop and let the exception be
-propagated back, and let the Camel error handler handle it. You can do
-this by specifying that it should stop in case of an
-exception occurred. This is done by the `stopOnException` option as
-shown below:
-
-[source,java]
-----
-    from("direct:start")
-        .multicast()
-            .stopOnException().to("direct:foo", "direct:bar", "direct:baz")
-        .end()
-        .to("mock:result");
-
-        from("direct:foo").to("mock:foo");
-
-        from("direct:bar").process(new MyProcessor()).to("mock:bar");
-
-        from("direct:baz").to("mock:baz");
-----
-
-And using XML DSL you specify it as follows:
-
-[source,xml]
-----
-        <route>
-            <from uri="direct:start"/>
-            <multicast stopOnException="true">
-                <to uri="direct:foo"/>
-                <to uri="direct:bar"/>
-                <to uri="direct:baz"/>
-            </multicast>
-            <to uri="mock:result"/>
-        </route>
-
-        <route>
-            <from uri="direct:foo"/>
-            <to uri="mock:foo"/>
-        </route>
-
-        <route>
-            <from uri="direct:bar"/>
-            <process ref="myProcessor"/>
-            <to uri="mock:bar"/>
-        </route>
-
-        <route>
-            <from uri="direct:baz"/>
-            <to uri="mock:baz"/>
-        </route>
-----
-
-== Using onPrepare to execute custom logic when preparing messages
-
-The multicast EIP will copy the source
-exchange and multicast each copy. However the copy
-is a shallow copy, so in case you have mutateable message bodies, then
-any changes will be visible by the other copied messages. If you want to
-use a deep clone copy then you need to use a custom `onPrepare` which
-allows you to do this using the processor
-interface.
-
-Notice the `onPrepare` can be used for any kind of custom logic which
-you would like to execute before the xref:exchange.adoc[Exchange] is
-being multicasted.
diff --git a/docs/user-manual/modules/ROOT/pages/onFallback-eip.adoc b/docs/user-manual/modules/ROOT/pages/onFallback-eip.adoc
deleted file mode 100644
index 54264ad..0000000
--- a/docs/user-manual/modules/ROOT/pages/onFallback-eip.adoc
+++ /dev/null
@@ -1,84 +0,0 @@
-[[onFallback-eip]]
-= On Fallback EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/onFallback-eip.adoc
-
-If you are using *onFallback* then that is intended to be local processing only where you can do a message transformation or call a bean or something as the fallback.
-
-If you need to call an external service over the network then you should use *onFallbackViaNetwork* that runs in another independent *HystrixCommand* that uses its own thread pool to not exhaust the first command.
-
-== Options
-
-// eip options: START
-The On Fallback EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *fallbackViaNetwork* | Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure and so it also needs to be wrapped by a HystrixCommand. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool. | false | Boolean
-|===
-// eip options: END
-
-Hystrix has many options as listed in xref:hystrixConfiguration-eip.adoc[Hystrix Configuration].
-For example to set a higher timeout to *5* seconds, and also let the circuit breaker wait *10* seconds before attempting a request again when the state was tripped to be open.
-
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        .hystrixConfiguration()
-             .executionTimeoutInMilliseconds(5000)
-             .circuitBreakerSleepWindowInMilliseconds(10000)
-        .end() // end Hystrix configuration
-        .to("http://fooservice.com/slow")
-    .onFallback()
-        .transform().constant("Fallback message")
-    .end()
-    .to("mock:result");
-----
-
-And in XML DSL:
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <circuitBreaker>
-      <hystrixConfiguration executionTimeoutInMilliseconds="5000"
-                            circuitBreakerSleepWindowInMilliseconds="10000"/>
-      <to uri="http://fooservice.com/slow"/>
-      <onFallback>
-        <transform>
-          <constant>Fallback message</constant>
-        </transform>
-      </onFallback>
-    </circuitBreaker>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-You can also configure Hystrix globally and then refer to that configuration:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-
-  <!-- a shared config which you can refer to from all your Hystrix EIPs -->
-  <hystrixConfiguration id="sharedConfig"
-                        executionTimeoutInMilliseconds="5000"
-                        circuitBreakerSleepWindowInMilliseconds="10000"/>
-
-  <route>
-    <from uri="direct:start"/>
-    <circuitBreaker configurationRef="sharedConfig">
-      <to uri="http://fooservice.com/slow"/>
-      <onFallback>
-        <transform>
-          <constant>Fallback message</constant>
-        </transform>
-      </onFallback>
-    </hystrix>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/otherwise-eip.adoc b/docs/user-manual/modules/ROOT/pages/otherwise-eip.adoc
deleted file mode 100644
index 312be74..0000000
--- a/docs/user-manual/modules/ROOT/pages/otherwise-eip.adoc
+++ /dev/null
@@ -1,62 +0,0 @@
-[[otherwise-eip]]
-= Otherwise EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/otherwise-eip.adoc
-
-The Otherwise EIP is related to http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html[Content
-Based Router] from the xref:enterprise-integration-patterns.adoc[EIP
-patterns]
-
-image::eip/ContentBasedRouter.gif[image]
-
-== Options
-
-// eip options: START
-The Otherwise EIP has no options.
-// eip options: END
-
-== Examples
-
-The following example shows how to route a request from an input
-*direct:a* endpoint to either *direct:b*, *direct:c* or *direct:d* depending on
-the evaluation of various xref:predicate.adoc[Predicate] expressions
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .choice()
-                .when(simple("${header.foo} == 'bar'"))
-                    .to("direct:b")
-                .when(simple("${header.foo} == 'cheese'"))
-                    .to("direct:c")
-                .otherwise()
-                    .to("direct:d");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <choice>
-            <when>
-                <simple>${header.foo} == 'bar'</simple>
-                <to uri="direct:b"/>
-            </when>
-            <when>
-                <simple>${header.foo} == 'cheese'</simple>
-                <to uri="direct:c"/>
-            </when>
-            <otherwise>
-                <to uri="direct:d"/>
-            </otherwise>
-        </choice>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/pipeline-eip.adoc b/docs/user-manual/modules/ROOT/pages/pipeline-eip.adoc
deleted file mode 100644
index e0c1cbd..0000000
--- a/docs/user-manual/modules/ROOT/pages/pipeline-eip.adoc
+++ /dev/null
@@ -1,97 +0,0 @@
-[[pipeline-eip]]
-= Pipeline EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/pipeline-eip.adoc
-
-Camel supports the http://www.enterpriseintegrationpatterns.com/PipesAndFilters.html[Pipes and Filters] from the xref:enterprise-integration-patterns.adoc[EIP patterns] in various ways.
-
-image::eip/PipesAndFilters.gif[image]
-
-With Camel you can split your processing across multiple independent
-xref:endpoint.adoc[Endpoint] instances which can then be chained
-together.
-
-== Options
-
-// eip options: START
-The Pipeline EIP has no options.
-// eip options: END
-
-[[pipeline-Examples]]
-== Examples
-
-You can create pipelines of logic using multiple
-xref:endpoint.adoc[Endpoint] or xref:message-translator.adoc[Message
-Translator] instances as follows
-
-Though pipeline is the default mode of operation when you specify
-multiple outputs in Camel. The opposite to pipeline is multicast; which
-fires the same message into each of its outputs. (See the example
-below).
-
-In Java you do:
-[source,java]
-----
-from("activemq:SomeQueue")
-    .pipeline()
-      .bean("foo")
-      .bean("bar")
-      .to("acitvemq:OutputQueueu");
-----
-
-The pipeline is the default mode, which can be omitted, and therefore you almost often write as:
-
-[source,java]
-----
-from("activemq:SomeQueue")
-    .bean("foo")
-    .bean("bar")
-    .to("acitvemq:OutputQueueu");
-----
-
-In XML you can use the `<pipeline>` element
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:SomeQueue"/>
-  <pipeline>
-    <bean ref="foo"/>
-    <bean ref="bar"/>
-    <to uri="activemq:OutputQueue"/>
-  </pipeline>
-</route>
-----
-
-In the above the pipeline element is actually unnecessary, you could use this:
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:SomeQueue"/>
-  <bean ref="foo"/>
-  <bean ref="bar"/>
-  <to uri="activemq:OutputQueue"/>
-</route>
-----
-
-Its just a bit more explicit. However if you wish to use `<multicast/>` to
-avoid a pipeline - to send the same message into multiple pipelines -
-then the `<pipeline>` element comes into its own.
-
-[source,xml]
-----
-<route>
-  <from uri="activemq:SomeQueue"/>
-  <multicast>
-    <pipeline>
-      <bean ref="something"/>
-      <to uri="log:Something"/>
-    </pipeline>
-    <pipeline>
-      <bean ref="foo"/>
-      <bean ref="bar"/>
-      <to uri="activemq:OutputQueue"/>
-    </pipeline>
-  </multicast>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/pollEnrich-eip.adoc b/docs/user-manual/modules/ROOT/pages/pollEnrich-eip.adoc
deleted file mode 100644
index 8b4d65b..0000000
--- a/docs/user-manual/modules/ROOT/pages/pollEnrich-eip.adoc
+++ /dev/null
@@ -1,124 +0,0 @@
-[[pollEnrich-eip]]
-= Poll Enrich EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/pollEnrich-eip.adoc
-
-Camel comes with flavor `pollEnrich` as a choice of content enricher in the DSL.
-The other one is `enrich`
-
-`pollEnrich` uses a Polling Consumer to obtain the additional data. It is usually used for Event Message messaging, for instance to read a file or download a FTP file.
-
-[NOTE]
-Good practice to use timeout value. By default Camel will use the receive. Which may block until there is a message available. It is therefore recommended to always provide a timeout value, to make this clear that we may wait for a message, until the timeout is hit.
-
-If there is no data then the `newExchange` in the aggregation strategy is `null`.
-
-You can pass in a timeout value that determines which method to use
-
-* if timeout is -1 or other negative number then `receive` is selected (*Important:* the `receive` method may block if there is no message)
-* if timeout is 0 then `receiveNoWait` is selected
-* otherwise `receive(timeout)` is selected
-
-The timeout values is in millis.
-
-`pollEnrich` does *not* access any data from the current Exchange which means when polling it cannot use any of the existing headers you may have set on the Exchange. For example you cannot set a filename in the `Exchange.FILE_NAME` header and use `pollEnrich` to consume only that file. For that you *must* set the filename in the endpoint URI.
-Both `enrich` and `pollEnrich` supports dynamic endpoints that uses an Expression to compute the uri, which allows to use data from the current Exchange. In other words all what is told above no longer apply and it just works.
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-== Content enrichment using pollEnrich
-The `pollEnrich` works just as the `enrich` however as it uses a Polling Consumer we have 3 methods when polling
-
-* `receive`
-* `receiveNoWait`
-* `receive(timeout)`
-
-== PollEnrich Options
-
-// eip options: START
-The Poll Enrich EIP supports 7 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *timeout* | Timeout in millis when polling from the external service. The timeout has influence about the poll enrich behavior. It basically operations in three different modes: negative value - Waits until a message is available and then returns it. Warning that this method could block indefinitely if no messages are available. 0 - Attempts to receive a message exchange immediately without waiting and returning null if a message exchange is not available yet. positive value - Attempts [...]
-| *strategyRef* | Refers to an AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message. |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy. | false | Boolean
-| *aggregateOnException* | If this option is false then the aggregate method is not used if there was an exception thrown while trying to retrieve the data to enrich from the resource. Setting this option to true allows end users to control what to do if there was an exception in the aggregate method. For example to suppress the exception or set a custom message body etc. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ConsumerCache which is used to cache and reuse consumers when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and discarded after use. This redu [...]
-| *ignoreInvalidEndpoint* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-|===
-// eip options: END
-
-== PollEnrich Example
-
-In this example we enrich the message by loading the content from the file named inbox/data.txt.
-[source,java]
-----
-from("direct:start")
-  .pollEnrich("file:inbox?fileName=data.txt")
-  .to("direct:result");
-----
-
-And in XML DSL you do:
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <pollEnrich>
-    <constant>file:inbox?fileName=data.txt</constant>
-  </pollEnrich>
-  <to uri="direct:result"/>
-</route>
-----
-
-If there is no file then the message is empty. We can use a timeout to either wait (potentially forever) until a file exists, or use a timeout to wait a certain period.
-
-For example to wait up to 5 seconds you can do:
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <pollEnrich timeout="5000">
-    <constant>file:inbox?fileName=data.txt</constant>
-  </pollEnrich>
-  <to uri="direct:result"/>
-</route>
-----
-
-To use it as a consumer in the middle of a REST Get route downloading a file from AWS S3 as the response of an API call.
-[source,xml]
-----
-<rest path="/report">
-    <description>Report REST API</description>
-    <get uri="/{id}/payload">
-        <route id="report-payload-download">
-            <pollEnrich id="pollEnrich">
-                <simple>aws-s3:xavier-dev?amazonS3Client=#s3client&amp;deleteAfterRead=false&amp;fileName=report-file.pdf</simple>
-            </pollEnrich>
-        </route>
-    </get>
-</rest>
-----
-
-== Using dynamic uris
-
-Both `enrich` and `pollEnrich` supports using dynamic uris computed based on information from the current Exchange. For example to `pollEnrich` from an endpoint that uses a header to indicate a SEDA queue name:
-[source,java]
-----
-from("direct:start")
-  .pollEnrich().simple("seda:${header.name}")
-  .to("direct:result");
-----
-
-And in XML DSL
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <pollEnrich>
-    <simple>seda:${header.name}</simple>
-  </pollEnrich>
-  <to uri="direct:result"/>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/process-eip.adoc b/docs/user-manual/modules/ROOT/pages/process-eip.adoc
deleted file mode 100644
index 6b4c3c6..0000000
--- a/docs/user-manual/modules/ROOT/pages/process-eip.adoc
+++ /dev/null
@@ -1,101 +0,0 @@
-[[process-eip]]
-= Process EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/process-eip.adoc
-
-The http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor] interface is used to implement consumers of message exchanges or to implement a xref:message-translator.adoc[Message Translator]
-
-== Options
-
-// eip options: START
-The Process EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *ref* | *Required* Reference to the Processor to lookup in the registry to use. |  | String
-|===
-// eip options: END
-
-== Samples
-
-=== Using a processor in a route
-
-Once you have written a class which implements processor like this...
-
-[source,java]
-----
-public class MyProcessor implements Processor {
-  public void process(Exchange exchange) throws Exception {
-    // do something...
-  }
-}
-----
-
-You can then easily use this inside a route by declaring the bean in
-Spring, say via the XML (or registering it in JNDI if that is your
-xref:registry.adoc[Registry])
-
-[source,xml]
---------------------------------------------------------
-<bean id="myProcessor" class="com.acme.MyProcessor"/>
---------------------------------------------------------
-
-Then in Camel you can do
-
-[source,java]
-----
-from("activemq:myQueue").to("myProcessor");
-----
-
-=== Using the process DSL
-
-In your route you can also use the `process` DSL syntax for invoking a
-processor.
-
-[source,java]
-----
-Processor myProcessor = new MyProcessor();
-...
-from("activemq:myQueue").process(myProcessor);
-----
-
-If you need to lookup the processor in the xref:registry.adoc[Registry]
-then you should use the *processRef* DSL:
-
-[source,java]
-----
-from("activemq:myQueue").processRef("myProcessor");
-----
-
-== Why use process when you can use to instead?
-
-The process can be used in routes as an anonymous inner class such:
-
-[source,java]
-----
-    from("activemq:myQueue").process(new Processor() {
-        public void process(Exchange exchange) throws Exception {
-            String payload = exchange.getIn().getBody(String.class);
-            // do something with the payload and/or exchange here
-           exchange.getIn().setBody("Changed body");
-       }
-    }).to("activemq:myOtherQueue");
-----
-
-This is usable for quickly whirling up some code. If the code in the
-inner class gets a bit more complicated it is of course advised to
-refactor it into a separate class.
-
-== Turning your processor into a full Component
-
-There is a base class called
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/ProcessorEndpoint.html[ProcessorEndpoint]
-which supports the full xref:endpoint.adoc[Endpoint] semantics given a
-Processor instance.
-
-So you just need to create a https://github.com/apache/camel/tree/master/components[Component] class by
-deriving from
-http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/impl/DefaultComponent.html[DefaultComponent]
-which returns instances of ProcessorEndpoint. For more details see
-xref:writing-components.adoc[Writing Components]
-
diff --git a/docs/user-manual/modules/ROOT/pages/random-eip.adoc b/docs/user-manual/modules/ROOT/pages/random-eip.adoc
deleted file mode 100644
index 87cdfa4..0000000
--- a/docs/user-manual/modules/ROOT/pages/random-eip.adoc
+++ /dev/null
@@ -1,8 +0,0 @@
-[[random-eip]]
-= Random EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/random-eip.adoc
-
-
-// eip options: START
-The Random EIP has no options.
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/recipientList-eip.adoc b/docs/user-manual/modules/ROOT/pages/recipientList-eip.adoc
deleted file mode 100644
index eec1ef3..0000000
--- a/docs/user-manual/modules/ROOT/pages/recipientList-eip.adoc
+++ /dev/null
@@ -1,375 +0,0 @@
-[[recipientList-eip]]
-= Recipient List EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/recipientList-eip.adoc
-The http://www.enterpriseintegrationpatterns.com/RecipientList.html[Recipient List] from the EIP patterns allows you to route messages to a number of dynamically specified recipients.
-
-image::eip/RecipientList.gif[image]
-
-The recipients will receive a copy of the *same* Exchange, and Camel will execute them sequentially.
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-== Options
-
-// eip options: START
-The Recipient List EIP supports 15 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *delimiter* | Delimiter used if the Expression returned multiple endpoints. Can be turned off using the value false. The default value is , | , | String
-| *parallelProcessing* | If enabled then sending messages to the recipients occurs concurrently. Note the caller thread will still wait until all messages has been fully processed, before it continues. Its only the sending and processing the replies from the recipients which happens concurrently. | false | Boolean
-| *strategyRef* | Sets a reference to the AggregationStrategy to be used to assemble the replies from the recipients, into a single outgoing message from the RecipientList. By default Camel will use the last reply as the outgoing message. You can also use a POJO as the AggregationStrategy |  | String
-| *strategyMethodName* | This option can be used to explicit declare the method name to use, when using POJOs as the AggregationStrategy. |  | String
-| *strategyMethodAllowNull* | If this option is false then the aggregate method is not used if there was no data to enrich. If this option is true then null values is used as the oldExchange (when no data to enrich), when using POJOs as the AggregationStrategy | false | Boolean
-| *executorServiceRef* | Refers to a custom Thread Pool to be used for parallel processing. Notice if you set this option, then parallel processing is automatic implied, and you do not have to enable that option as well. |  | String
-| *stopOnException* | Will now stop further processing if an exception or failure occurred during processing of an org.apache.camel.Exchange and the caused exception will be thrown. Will also stop if processing the exchange failed (has a fault message) or an exception was thrown and handled by the error handler (such as using onException). In all situations the recipient list will stop further processing. This is the same behavior as in pipeline, which is used by the routing engine. The  [...]
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *streaming* | If enabled then Camel will process replies out-of-order, eg in the order they come back. If disabled, Camel will process replies in the same order as defined by the recipient list. | false | Boolean
-| *timeout* | Sets a total timeout specified in millis, when using parallel processing. If the Recipient List hasn't been able to send and process all replies within the given timeframe, then the timeout triggers and the Recipient List breaks out and continues. Notice if you provide a TimeoutAwareAggregationStrategy then the timeout method is invoked before breaking out. If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shu [...]
-| *onPrepareRef* | Uses the Processor when preparing the org.apache.camel.Exchange to be send. This can be used to deep-clone messages that should be send, or any custom logic needed before the exchange is send. |  | String
-| *shareUnitOfWork* | Shares the org.apache.camel.spi.UnitOfWork with the parent and each of the sub messages. Recipient List will by default not share unit of work between the parent exchange and each recipient exchange. This means each sub exchange has its own individual unit of work. | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this recipient list, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped an [...]
-| *parallelAggregate* | If enabled then the aggregate method on AggregationStrategy can be called concurrently. Notice that this would require the implementation of AggregationStrategy to be implemented as thread-safe. By default this is false meaning that Camel synchronizes the call to the aggregate method. Though in some use-cases this can be used to archive higher performance when the AggregationStrategy is implemented as thread-safe. | false | Boolean
-| *stopOnAggregateException* | If enabled, unwind exceptions occurring at aggregation time to the error handler when parallelProcessing is used. Currently, aggregation time exceptions do not stop the route processing when parallelProcessing is used. Enabling this option allows to work around this behavior. The default value is false for the sake of backward compatibility. | false | Boolean
-|===
-// eip options: END
-
-
-[TIP]
-====
-You can use the RecipientList Annotation on a POJO to create a Dynamic Recipient List. For more details see the Bean Integration.
-====
-
-== Static Recipient List
-The following example shows how to route a request from an input *queue:a* endpoint to a static list of destinations
-
-[source,java]
-----
-from("jms:queue:a")
-    .recipientList("direct:b,direct:c,direct:d");
-----
-
-And in XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="jms:queue:a"/>
-        <recipientList>
-            <constant>direct:b,direct:c,direct:d</constant>
-        </recipientList>
-    </route>
-</camelContext>
-----
-
-== Dynamic Recipient List
-Usually one of the main reasons for using the Recipient List pattern is that the list of recipients is dynamic and
-calculated at runtime. The following example demonstrates how to create a dynamic recipient list using an Expression
-(which in this case extracts a named header value dynamically) to calculate the list of endpoints which are either
-of type Endpoint or are converted to a String and then resolved using the endpoint URIs (separated by comma).
-
-[source,java]
-----
-from("jms:queue:a")
-    .recipientList(header("foo"));
-----
-
-== Iteratable value
-The dynamic list of recipients that are defined in the header must be iterable such as:
-
-* `java.util.Collection`
-* `java.util.Iterator`
-* arrays
-* `org.w3c.dom.NodeList`
-* a single String with values separated by comma (the delimiter configured)
-* any other type will be regarded as a single value
-
-== Using delimiter in Spring XML
-In Spring DSL you can set the delimiter attribute for setting a delimiter to be used if the header value is a single String with multiple separated endpoints.
-By default Camel uses comma as delimiter, but this option lets you specify a custom delimiter to use instead.
-
-[source,xml]
-----
-<route>
-  <from uri="direct:a"/>
-  <!-- use semi-colon as a delimiter for String based values -->
-  <recipientList delimiter=";">
-    <header>myHeader</header>
-  </recipientList>
-</route>
-----
-
-So if *myHeader* contains a `String` with the value `"activemq:queue:foo;activemq:topic:hello ; log:bar"` then Camel will split the `String` using the delimiter given in the XML that was comma, resulting into 3 endpoints to send to.
-You can use spaces between the endpoints as Camel will trim the value when it lookup the endpoint to send to.
-
-And in Java:
-[source,java]
-----
-from("direct:a")
-    .recipientList(header("myHeader"), ";");
-----
-
-== Sending to multiple recipients in parallel
-The Recipient List now supports `parallelProcessing` that for example Splitter also supports.
-You can use it to use a thread pool to have concurrent tasks sending the Exchange to multiple recipients concurrently.
-
-[source,java]
-----
-from("direct:a")
-    .recipientList(header("myHeader")).parallelProcessing();
-----
-
-And in XML it is an attribute on the recipient list tag.
-
-[source,xml]
-----
-<route>
-    <from uri="direct:a"/>
-    <recipientList parallelProcessing="true">
-        <header>myHeader</header>
-    </recipientList>
-</route>
-----
-
-=== Using custom thread pool
-A thread pool is only used for `parallelProcessing`. You supply your own custom thread pool via the `ExecutorServiceStrategy` (see Camel's Threading Model),
-the same way you would do it for the `aggregationStrategy`. By default Camel uses a thread pool with 10 threads (subject to change in future versions).
-
-== Stop continuing in case one recipient failed
-The Recipient List now supports `stopOnException` that for example Splitter also supports.
-You can use it to stop sending to any further recipients in case any recipient failed.
-
-[source,java]
-----
-from("direct:a")
-    .recipientList(header("myHeader")).stopOnException();
-----
-
-And in XML its an attribute on the recipient list tag.
-
-[source,xml]
-----
-<route>
-    <from uri="direct:a"/>
-    <recipientList stopOnException="true">
-        <header>myHeader</header>
-    </recipientList>
-</route>
-----
-
-[NOTE]
-====
-You can combine parallelProcessing and stopOnException and have them both true.
-====
-
-== Ignore invalid endpoints
-The Recipient List now supports `ignoreInvalidEndpoints` (like the Routing Slip).
-You can use it to skip endpoints which are invalid.
-
-[source,java]
-----
-from("direct:a")
-    .recipientList(header("myHeader")).ignoreInvalidEndpoints();
-----
-
-And in XML it is an attribute on the recipient list tag.
-
-[source,xml]
-----
-<route>
-    <from uri="direct:a"/>
-    <recipientList ignoreInvalidEndpoints="true">
-        <header>myHeader</header>
-    </recipientList>
-</route>
-----
-
-Then let us say the `myHeader` contains the following two endpoints `direct:foo,xxx:bar`.
-The first endpoint is valid and works. However the second one is invalid and will just be ignored.
-Camel logs at DEBUG level about it, so you can see why the endpoint was invalid.
-
-== Using custom AggregationStrategy
-You can now use your own `AggregationStrategy` with the Recipient List. However this is rarely needed.
-What it is good for is that in case you are using Request Reply messaging then the replies from the recipients can be aggregated.
-By default Camel uses `UseLatestAggregationStrategy` which just keeps that last received reply. If you must remember all the bodies that all the recipients sent back,
-then you can use your own custom aggregator that keeps those. It is the same principle as with the Aggregator EIP so check it out for details.
-
-[source,java]
-----
-from("direct:a")
-    .recipientList(header("myHeader")).aggregationStrategy(new MyOwnAggregationStrategy())
-    .to("direct:b");
-----
-
-And in XML it is again an attribute on the recipient list tag.
-
-[source,xml]
-----
-<route>
-    <from uri="direct:a"/>
-    <recipientList strategyRef="myStrategy">
-        <header>myHeader</header>
-    </recipientList>
-    <to uri="direct:b"/>
-</route>
-
-<!-- bean with the custom aggregation strategy -->
-<bean id="myStrategy" class="com.mycompany.MyOwnAggregationStrategy"/>
-----
-
-[NOTE]
-====
-The Multicast, Recipient List, and Splitter EIPs have special support for using `AggregationStrategy` with
-access to the original input exchange. You may want to use this when you aggregate messages and
-there has been a failure in one of the messages, which you then want to enrich on the original
-input message and return as response; its the aggregate method with 3 exchange parameters.
-====
-
-== Knowing which endpoint when using custom AggregationStrategy
-
-When using a custom `AggregationStrategy` then the `aggregate` method is always invoked in sequential order
-(also if parallel processing is enabled) of the endpoints the Recipient List is using.
-However, Exchange has a property stored (key is `Exchange.RECIPIENT_LIST_ENDPOINT` with the uri of the Endpoint.
-So you know which endpoint you are aggregating from. The code block shows how to access this property in your Aggregator.
-
-[source,java]
-----
-@Override
-public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-    String uri = newExchange.getProperty(Exchange.RECIPIENT_LIST_ENDPOINT, String.class);
-}
-----
-
-== Using method call as recipient list
-You can use a Bean to provide the recipients, for example:
-
-[source,java]
-----
-from("activemq:queue:test")
-    .recipientList().method(MessageRouter.class, "routeTo");
-----
-
-And then `MessageRouter` bean:
-
-[source,java]
-----
-public class MessageRouter {
-
-    public String routeTo() {
-        String queueName = "activemq:queue:test2";
-        return queueName;
-    }
-}
-----
-
-[CAUTION]
-When you use a Bean then do *not* use the `@RecipientList` annotation as this will in fact add yet another recipient list, so you end up having two. Do *not* do the following:
-[source,java]
-----
-public class MessageRouter {
-
-    // do not use recipientList in the Camel route calling a bean with the @RecipientList annotation!
-    @RecipientList
-    public String routeTo() {
-        String queueName = "activemq:queue:test2";
-        return queueName;
-    }
-}
-----
-
-You should only use the snippet above (using `@RecipientList`) if you just route to a Bean which you then want to act as a recipient list.
-So the original route can be changed to:
-
-[source,java]
-----
-from("activemq:queue:test").bean(MessageRouter.class, "routeTo");
-----
-
-Which then would invoke the routeTo method and detect that it is annotated with `@RecipientList` and then act accordingly as if it was a recipient list EIP.
-
-== Using timeout
-If you use `parallelProcessing` then you can configure a total `timeout` value in millis. Camel will then process the messages in parallel until the timeout is hit. This allows you to continue processing if one message consumer is slow. For example you can set a timeout value of 20 sec.
-
-[WARNING]
-.Tasks may keep running
-If the timeout is reached with running tasks still remaining, certain tasks for which it is difficult for Camel to shut down in a graceful manner may continue to run. So use this option with a bit of care. We may be able to improve this functionality in future Camel releases.
-
-For example in the unit test below you can see that we multicast the message to 3 destinations. We have a timeout of 2 seconds, which means only the last two messages can be completed within the timeframe. This means we will only aggregate the last two which yields a result aggregation which outputs "BC".
-
-[source,java]
-----
-from("direct:start")
-    .multicast(new AggregationStrategy() {
-            public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
-                if (oldExchange == null) {
-                    return newExchange;
-                }
-
-                String body = oldExchange.getIn().getBody(String.class);
-                oldExchange.getIn().setBody(body + newExchange.getIn().getBody(String.class));
-                return oldExchange;
-            }
-        })
-        .parallelProcessing().timeout(250).to("direct:a", "direct:b", "direct:c")
-    // use end to indicate end of multicast route
-    .end()
-    .to("mock:result");
-
-from("direct:a").delay(1000).to("mock:A").setBody(constant("A"));
-
-from("direct:b").to("mock:B").setBody(constant("B"));
-
-from("direct:c").to("mock:C").setBody(constant("C"));
-----
-
-[NOTE]
-===
-*Timeout in other EIPs*
-
-This timeout feature is also supported by Splitter and both multicast and recipientList.
-===
-
-By default if a timeout occurs the `AggregationStrategy` is not invoked. However you can implement the `timeout` method:
-This allows you to deal with the timeout in the `AggregationStrategy` if you really need to.
-
-[NOTE]
-===
-*Timeout is total*
-
-The timeout is total, which means that after X time, Camel will aggregate the messages which have completed within the timeframe.
-The remainders will be cancelled. Camel will also only invoke the `timeout` method in the `TimeoutAwareAggregationStrategy` once, for the first index which caused the timeout.
-===
-
-== Using onPrepare to execute custom logic when preparing messages
-See details at the Multicast EIP
-
-== Using ExchangePattern in recipients
-
-The recipient list will by default use the current Exchange Pattern. Though one can imagine use-cases where one wants to send
-a message to a recipient using a different exchange pattern. For example you may have a route that initiates as an `InOnly` route,
-but want to use `InOut` exchange pattern with a recipient list. You can configure the exchange pattern directly in the
-recipient endpoints.
-
-For example in the route below we pick up new files (which will be started as `InOnly`) and then route to a recipient list.
-As we want to use `InOut` with the ActiveMQ (JMS) endpoint we can now specify this using the `exchangePattern=InOut` option.
-Then the response from the JMS request/reply will then be continued routed, and thus the response is what will be stored
-in as a file in the outbox directory.
-
-[source,java]
-----
-from("file:inbox")
-    // the exchange pattern is InOnly initially when using a file route
-    .recipientList().constant("activemq:queue:inbox?exchangePattern=InOut")
-    .to("file:outbox");
-----
-
-[WARNING]
-====
-The recipient list will not alter the original exchange pattern. So in the example above the exchange pattern will still
-be `InOnly` when the message is routed to the `file:outbox endpoint`.
-If you want to alter the exchange pattern permanently then use the `.setExchangePattern` option.
-
-See more details at Request Reply and Event Message EIPs.
-====
diff --git a/docs/user-manual/modules/ROOT/pages/ref-language.adoc b/docs/user-manual/modules/ROOT/pages/ref-language.adoc
deleted file mode 100644
index 0b86da1..0000000
--- a/docs/user-manual/modules/ROOT/pages/ref-language.adoc
+++ /dev/null
@@ -1,58 +0,0 @@
-[[ref-language]]
-= Ref Language
-:page-source: core/camel-core-languages/src/main/docs/ref-language.adoc
-
-*Since Camel 2.8*
-
-The Ref Expression Language is really just a way to lookup a custom
-Expression or Predicate from the Registry.
-
-This is particular useable in XML DSLs.
-
-== Ref Language options
-
-// language options: START
-The Ref language supports 1 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Example usage
-
-The Splitter in XML DSL can utilize a custom
-expression using `<ref>` like:
-
-[source,xml]
-----
-<bean id="myExpression" class="com.mycompany.MyCustomExpression"/>
-
-<route>
-  <from uri="seda:a"/>
-  <split>
-    <ref>myExpression</ref>   
-    <to uri="mock:b"/>
-  </split>     
-</route>
-----
-
-in this case, the Message coming from the seda:a
-Endpoint will be splitted using a custom
-Expression which has the id `myExpression` in the
-Registry.
-
-And the same example using Java DSL:
-
-[source,java]
-----
-from("seda:a").split().ref("myExpression").to("seda:b");
-----
-
-== Dependencies
-
-The Ref language is part of *camel-core*.
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/removeHeader-eip.adoc b/docs/user-manual/modules/ROOT/pages/removeHeader-eip.adoc
deleted file mode 100644
index f74d815..0000000
--- a/docs/user-manual/modules/ROOT/pages/removeHeader-eip.adoc
+++ /dev/null
@@ -1,40 +0,0 @@
-[[removeHeader-eip]]
-= Remove Header EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/removeHeader-eip.adoc
-The Remove Header EIP allows you to remove an header from your exchange.
-
-== Options
-
-// eip options: START
-The Remove Header EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *headerName* | *Required* Name of header to remove |  | String
-|===
-// eip options: END
-
-== Samples
-
-[source,java]
-----
-from("seda:b")
-  .removeHeader("myHeader")
-  .to("mock:result");
-----
-
-=== Spring DSL
-The sample below demonstrates the delay in Spring DSL:
-
-[source,xml]
-----
-<route>
-  <from uri="seda:b"/>
-  <removeHeader>
-     <constant>myHeader</constant>
-  <removeHeader/>
-  <to uri="mock:result"/>
-</route>
-
-----
diff --git a/docs/user-manual/modules/ROOT/pages/removeHeaders-eip.adoc b/docs/user-manual/modules/ROOT/pages/removeHeaders-eip.adoc
deleted file mode 100644
index 7caf885..0000000
--- a/docs/user-manual/modules/ROOT/pages/removeHeaders-eip.adoc
+++ /dev/null
@@ -1,26 +0,0 @@
-[[removeHeaders-eip]]
-= Remove Headers EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/removeHeaders-eip.adoc
-The Remove Headers EIP allows you to remove headers from your exchange.
-
-== Options
-
-// eip options: START
-The Remove Headers EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *pattern* | *Required* Name or pattern of headers to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive). |  | String
-| *excludePattern* | Name or patter of headers to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive). |  | String
-|===
-// eip options: END
-
-== Samples
-
-[source,java]
-----
-from("seda:b")
-  .removeHeaders(map)
-  .to("mock:result");
-----
diff --git a/docs/user-manual/modules/ROOT/pages/removeProperties-eip.adoc b/docs/user-manual/modules/ROOT/pages/removeProperties-eip.adoc
deleted file mode 100644
index 5365855..0000000
--- a/docs/user-manual/modules/ROOT/pages/removeProperties-eip.adoc
+++ /dev/null
@@ -1,47 +0,0 @@
-[[removeProperties-eip]]
-= Remove Properties EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/removeProperties-eip.adoc
-
-The RemoveProperties EIP allows you to remove Properties from you exchange.
-
-== Options
-
-// eip options: START
-The Remove Properties EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *pattern* | *Required* Name or pattern of properties to remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive). |  | String
-| *excludePattern* | Name or pattern of properties to not remove. The pattern is matched in the following order: 1 = exact match 2 = wildcard (pattern ends with a and the name starts with the pattern) 3 = regular expression (all of above is case in-sensitive). |  | String
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to use the removeProperties EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .removeProperties("myProperty", "myProperty1")
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-           <removeProperties pattern="myProperty*"/>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/removeProperty-eip.adoc b/docs/user-manual/modules/ROOT/pages/removeProperty-eip.adoc
deleted file mode 100644
index 34dd5e1..0000000
--- a/docs/user-manual/modules/ROOT/pages/removeProperty-eip.adoc
+++ /dev/null
@@ -1,46 +0,0 @@
-[[removeProperty-eip]]
-= Remove Property EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/removeProperty-eip.adoc
-
-The RemoveProperty EIP allows you to remove a Property from your exchange.
-
-== Options
-
-// eip options: START
-The Remove Property EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *propertyName* | *Required* Name of property to remove |  | String
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to use the Remove Property EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .removeProperty("myProperty")
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-           <removeProperty propertyName="myProperty"/>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/requestReply-eip.adoc b/docs/user-manual/modules/ROOT/pages/requestReply-eip.adoc
deleted file mode 100644
index 49db278..0000000
--- a/docs/user-manual/modules/ROOT/pages/requestReply-eip.adoc
+++ /dev/null
@@ -1,49 +0,0 @@
-[[requestReply-eip]]
-= Request Reply
-:page-source: core/camel-core-engine/src/main/docs/eips/requestReply-eip.adoc
-
-Camel supports the
-http://www.enterpriseintegrationpatterns.com/RequestReply.html[Request
-Reply] from the EIP patterns
-by supporting the Exchange Pattern on a
-Message which can be set to *InOut* to indicate a
-request/reply. Camel Components then implement
-this pattern using the underlying transport or protocols.
-
-image::eip/RequestReply.gif[image]
-
-For example when using xref:components::jms-component.adoc[JMS] with InOut the component will
-by default perform these actions
-
-* create by default a temporary inbound queue
-* set the JMSReplyTo destination on the request message
-* set the JMSCorrelationID on the request message
-* send the request message
-* consume the response and associate the inbound message to the request
-using the JMSCorrelationID (as you may be performing many concurrent
-request/responses).
-
-[TIP]
-====
-*Related* 
-
-See the related Event Message message
-====
-
-[[RequestReply-ExplicitlyspecifyingInOut]]
-== Explicitly specifying InOut
-
-When consuming messages from xref:components::jms-component.adoc[JMS] a Request-Reply is
-indicated by the presence of the *JMSReplyTo* header.
-
-You can explicitly force an endpoint to be in Request Reply mode by
-setting the exchange pattern on the URI. e.g.
-
-[source]
-----
-jms:MyQueue?exchangePattern=InOut
-----
-
-You can specify the exchange pattern in DSL rule or Spring
-configuration.
-
diff --git a/docs/user-manual/modules/ROOT/pages/resequence-eip.adoc b/docs/user-manual/modules/ROOT/pages/resequence-eip.adoc
deleted file mode 100644
index ab2a9ba..0000000
--- a/docs/user-manual/modules/ROOT/pages/resequence-eip.adoc
+++ /dev/null
@@ -1,242 +0,0 @@
-[[resequence-eip]]
-= Resequence EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/resequence-eip.adoc
-
-The http://www.enterpriseintegrationpatterns.com/Resequencer.html[Resequencer] from the https://camel.apache.org/enterprise-integration-patterns.html[EIP patterns] allows you to reorganise messages based on some comparator. +
-By default in Camel we use an Expression to create the comparator; so that you can compare by a message header or the body or a piece of a message etc.
-
-image::eip/Resequencer.gif[image]
-
-== Options
-
-// eip options: START
-The Resequence EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *resequencerConfig* | To configure the resequencer in using either batch or stream configuration. Will by default use batch configuration. |  | ResequencerConfig
-|===
-// eip options: END
-
-Camel supports two resequencing algorithms:
-
-* *Batch resequencing* collects messages into a batch, sorts the messages and sends them to their output.
-* *Stream resequencing* re-orders (continuous) message streams based on the detection of gaps between messages.
-
-By default the Resequencer does not support duplicate messages and will only keep the last message, in case a message arrives with the same message expression. However in the batch mode you can enable it to allow duplicates.
-
-== Batch Resequencing
-The following example shows how to use the batch-processing resequencer so that messages are sorted in order of the *body()* expression. That is messages are collected into a batch (either by a maximum number of messages per batch or using a timeout) then they are sorted in order and then sent out to their output.
-
-[source,java]
-----
-from("direct:start")
-    .resequence().body()
-    .to("mock:result");
-----
-
-This is equivalent to
-[source,java]
-----
-from("direct:start")
-    .resequence(body()).batch()
-    .to("mock:result");
-----
-
-The batch-processing resequencer can be further configured via the `size()` and `timeout()` methods.
-[source,java]
-----
-from("direct:start")
-    .resequence(body()).batch().size(300).timeout(4000L)
-    .to("mock:result")
-----
-
-This sets the batch size to 300 and the batch timeout to 4000 ms (by default, the batch size is 100 and the timeout is 1000 ms). Alternatively, you can provide a configuration object.
-
-[source,java]
-----
-from("direct:start")
-    .resequence(body()).batch(new BatchResequencerConfig(300, 4000L))
-    .to("mock:result")
-----
-
-So the above example will reorder messages from endpoint *direct:a* in order of their bodies, to the endpoint *mock:result*. +
-Typically you'd use a header rather than the body to order things; or maybe a part of the body. So you could replace this expression with
-
-[source,java]
-----
-resequence(header("mySeqNo"))
-----
-
-for example to reorder messages using a custom sequence number in the header `mySeqNo`. +
-You can of course use many different Expression languages such as XPath, XQuery, SQL or various Scripting Languages.
-
-And an example in XML
-
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start" />
-    <resequence>
-      <simple>body</simple>
-      <to uri="mock:result" />
-      <!--
-        batch-config can be ommitted for default (batch) resequencer settings
-      -->
-      <batch-config batchSize="300" batchTimeout="4000" />
-    </resequence>
-  </route>
-</camelContext>
-----
-
-== Allow Duplicates
-In the `batch` mode, you can now allow duplicates. In Java DSL there is a `allowDuplicates()` method and in Spring XML there is an `allowDuplicates=true` attribute on the `<batch-config/>` you can use to enable it.
-
-== Reverse
-In the `batch` mode, you can now reverse the expression ordering. By default the order is based on 0..9,A..Z, which would let messages with low numbers be ordered first, and thus also also outgoing first. In some cases you want to reverse order, which is now possible. +
-In Java DSL there is a `reverse()` method and in Spring XML there is an `reverse=true` attribute on the `<batch-config/>` you can use to enable it.
-
-== Resequence JMS messages based on JMSPriority
-It's now much easier to use the Resequencer to resequence messages from JMS queues based on JMSPriority. For that to work you need to use the two new options `allowDuplicates` and `reverse`.
-
-[source,java]
-----
-from("jms:queue:foo")
-    // sort by JMSPriority by allowing duplicates (message can have same JMSPriority)
-    // and use reverse ordering so 9 is first output (most important), and 0 is last
-    // use batch mode and fire every 3th second
-    .resequence(header("JMSPriority")).batch().timeout(3000).allowDuplicates().reverse()
-    .to("mock:result");
-----
-
-Notice this is *only* possible in the `batch` mode of the Resequencer.
-
-== Ignore invalid exchanges
-
-The Resequencer EIP throws a `CamelExchangeException` if the incoming Exchange is not valid for the resequencer - ie. the expression cannot be evaluated, such as a missing header.
-You can use the option `ignoreInvalidExchanges` to ignore these exceptions which means the Resequencer will then skip the invalid Exchange.
-
-[source,java]
-----
-from("direct:start")
-    .resequence(header("seqno")).batch().timeout(1000)
-        // ignore invalid exchanges (they are discarded)
-        .ignoreInvalidExchanges()
-    .to("mock:result");
-----
-
-This option is available for both batch and stream resequencer.
-
-== Reject Old Exchanges
-
-This option can be used to prevent out of order messages from being sent regardless of the event that delivered messages downstream (capacity, timeout, etc). If enabled using `rejectOld()`, the Resequencer will throw a `MessageRejectedException` when an incoming Exchange is "older" (based on the Comparator) than the last delivered message. This provides an extra level of control with regards to delayed message ordering.
-
-[source,java]
-----
-from("direct:start")
-    .onException(MessageRejectedException.class).handled(true).to("mock:error").end()
-    .resequence(header("seqno")).stream().timeout(1000).rejectOld()
-    .to("mock:result");
-----
-
-This option is available for the stream resequencer only.
-
-== Stream Resequencing
-The next example shows how to use the stream-processing resequencer. Messages are re-ordered based on their sequence numbers given by a seqnum header using gap detection and timeouts on the level of individual messages.
-
-[source,java]
-----
-from("direct:start").resequence(header("seqnum")).stream().to("mock:result");
-----
-
-The stream-processing resequencer can be further configured via the `capacity()` and `timeout()` methods.
-
-[source,java]
-----
-from("direct:start")
-    .resequence(header("seqnum")).stream().capacity(5000).timeout(4000L)
-    .to("mock:result")
-----
-
-This sets the resequencer's capacity to 5000 and the timeout to 4000 ms (by default, the capacity is 1000 and the timeout is 1000 ms). Alternatively, you can provide a configuration object.
-
-[source,java]
-----
-from("direct:start")
-    .resequence(header("seqnum")).stream(new StreamResequencerConfig(5000, 4000L))
-    .to("mock:result")
-----
-
-The stream-processing resequencer algorithm is based on the detection of gaps in a message stream rather than on a fixed batch size.
-Gap detection in combination with timeouts removes the constraint of having to know the number of messages of a sequence (i.e. the batch size) in advance. Messages must contain a unique sequence number for which a predecessor and a successor is known. For example a message with the sequence number 3 has a predecessor message with the sequence number 2 and a successor message with the sequence number 4. The message sequence 2,3,5 has a gap because the successor of 3 is missing. The resequ [...]
-
-If the maximum time difference between messages (with successor/predecessor relationship with respect to the sequence number) in a message stream is known, then the resequencer's timeout parameter should be set to this value. In this case it is guaranteed that all messages of a stream are delivered in correct order to the next processor. The lower the timeout value is compared to the out-of-sequence time difference the higher is the probability for out-of-sequence messages delivered by t [...]
-
-By default, the stream resequencer expects long sequence numbers but other sequence numbers types can be supported as well by providing a custom expression.
-
-[source,java]
-----
-public class MyFileNameExpression implements Expression {
-
-    public String getFileName(Exchange exchange) {
-        return exchange.getIn().getBody(String.class);
-    }
-
-    public Object evaluate(Exchange exchange) {
-        // parser the file name with YYYYMMDD-DNNN pattern
-        String fileName = getFileName(exchange);
-        String[] files = fileName.split("-D");
-        Long answer = Long.parseLong(files[0]) * 1000 + Long.parseLong(files[1]);
-        return answer;
-    }
-
-    public <T> T evaluate(Exchange exchange, Class<T> type) {
-        Object result = evaluate(exchange);
-        return exchange.getContext().getTypeConverter().convertTo(type, result);
-    }
-
-}
-
-from("direct:start")
-    .resequence(new MyFileNameExpression()).stream().timeout(100).to("mock:result");
-----
-
-or custom comparator via the `comparator()` method
-
-[source,java]
-----
-ExpressionResultComparator<Exchange> comparator = new MyComparator();
-from("direct:start")
-    .resequence(header("seqnum")).stream().comparator(comparator)
-    .to("mock:result");
-----
-
-or via a `StreamResequencerConfig` object.
-
-[source,java]
-----
-ExpressionResultComparator<Exchange> comparator = new MyComparator();
-StreamResequencerConfig config = new StreamResequencerConfig(100, 1000L, comparator);
-
-from("direct:start")
-    .resequence(header("seqnum")).stream(config)
-    .to("mock:result");
-----
-
-And an example in XML
-
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <resequence>
-      <simple>in.header.seqnum</simple>
-      <to uri="mock:result" />
-      <stream-config capacity="5000" timeout="4000"/>
-    </resequence>
-  </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/resilience4j-eip.adoc b/docs/user-manual/modules/ROOT/pages/resilience4j-eip.adoc
deleted file mode 100644
index 239dd92..0000000
--- a/docs/user-manual/modules/ROOT/pages/resilience4j-eip.adoc
+++ /dev/null
@@ -1,150 +0,0 @@
-[[resilience4j-eip]]
-= Resilience4j EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/resilience4j-eip.adoc
-
-This component supports the Circuit Breaker EIP with the Resilience4j library.
-
-[NOTE]
-====
-Camel provides the Circuit Breaker EIP in the route model, which allows to plugin different implementations.
-Resilience4j is one such implementation.
-====
-
-Maven users will need to add the following dependency to their pom.xml to use this EIP:
-
-[source]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-resilience4j</artifactId>
-    <version>x.x.x</version><!-- use the same version as your Camel core version -->
-</dependency>
-----
-
-== Configuration options
-
-// eip options: START
-The Hystrix EIP supports 2 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *resilienceConfiguration* | Configures the Resilience EIP Use end when configuration is complete, to return back to the Resilience EIP. |  | ResilienceConfigurationDefinition
-| *resilienceConfigurationRef* | Refers to a Resilience configuration to use for configuring the Resilience EIP. |  | String
-|===
-// eip options: END
-
-See xref:resilience4jConfiguration-eip.adoc[Resilience4j Configuration] for all the configuration options on Resilience Circuit Breaker.
-
-== Samples
-
-Below is an example route showing a Resilience endpoint that protects against a downstream HTTP operation by falling back to the in-lined fallback route.
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        .to("http://fooservice.com/faulty")
-    .onFallback()
-        .transform().constant("Fallback message")
-    .end()
-    .to("mock:result");
-----
-
-And in XML DSL:
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <circuitBreaker>
-      <to uri="http://fooservice.com/faulty"/>
-      <onFallback>
-        <transform>
-          <constant>Fallback message</constant>
-        </transform>
-      </onFallback>
-    </circuitBreaker>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Configuring Resilience4j
-
-You can fine-tune Resilience4j by the many xref:resilience4jConfiguration-eip.adoc[Resilience4j Configuration] options.
-
-For example to use a 2 second execution timeout, you can do as follows:
-
-[source,java]
-----
-from("direct:start")
-    .circuitBreaker()
-        // use 2 second timeout
-        .resilience4jConfiguration().timeoutEnabled(true).timeoutDuration(2000).end()
-        .log("Resilience processing start: ${threadName}")
-        .toD("direct:${body}")
-        .log("Resilience processing end: ${threadName}")
-    .end()
-    .log("After Resilience ${body}");
-----
-
-And in XML:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <circuitBreaker>
-    <resilience4jConfiguration timeoutEnabled="true" timeoutDuration="2000"/>
-    <log message="Resilience processing start: ${threadName}"/>
-    <toD uri="direct:${body}"/>
-    <log message="Resilience processing end: ${threadName}"/>
-  </circuitBreaker>
-  <log message="After Resilience: ${body}"/>
-</route>
-----
-
-== Fallback
-
-See xref:onFallback-eip.adoc[onFallback].
-
-== Other examples
-
-You can find an example with the source code: https://github.com/apache/camel-spring-boot/tree/master/examples/camel-example-spring-boot-resilience4j[camel-example-spring-boot-resilience4j].
-
-== Using Resilience4j with Spring Boot
-
-See the xref:components::resilience4j.adoc[Resilience4j Component].
-
-== Camel's Error Handler and Circuit Breaker EIP
-
-By default the Circuit Breaker EIP handles errors by itself. This means if the circuit breaker is open and
-the message fails, then Camel's error handler is not reacting also.
-However, you can enable Camels error handler with circuit breaker by enabling the `inheritErrorHandler` option, as shown:
-
-[source,java]
-----
-// Camel's error handler that will attempt to redeliver the message 3 times
-errorHandler(deadLetterChannel("mock:dead").maximumRedeliveries(3).redeliveryDelay(0));
-
-from("direct:start")
-    .to("log:start")
-    // turn on Camel's error handler on circuit breaker so Camel can do redeliveries
-    .circuitBreaker().inheritErrorHandler(true)
-        .to("mock:a")
-        .throwException(new IllegalArgumentException("Forced"))
-    .end()
-    .to("log:result")
-    .to("mock:result");
-----
-
-This example is from an unit test, where you can see the Circuit Breaker EIP block has been hardcoded
-to always fail by throwing an exception. Because the `inheritErrorHandler` has been enabled,
-then Camel's error handler will attempt to call the Circuit Breaker EIP block again.
-
-That means the `mock:a` endpoint will receive the message again, and a total of 1 + 3 = 4 message
-(first time + 3 redeliveries).
-
-If we turn off the `inheritErrorHandler` option (default) then the Circuit Breaker EIP will only be
-executed once because it handled the error itself.
-
diff --git a/docs/user-manual/modules/ROOT/pages/resilience4jConfiguration-eip.adoc b/docs/user-manual/modules/ROOT/pages/resilience4jConfiguration-eip.adoc
deleted file mode 100644
index 997ee11..0000000
--- a/docs/user-manual/modules/ROOT/pages/resilience4jConfiguration-eip.adoc
+++ /dev/null
@@ -1,7 +0,0 @@
-[[resilience4jConfiguration-eip]]
-= Resilience4j Configuration EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/resilience4jConfiguration-eip.adoc
-
-
-// eip options: START
-// eip options: END
diff --git a/docs/user-manual/modules/ROOT/pages/rollback-eip.adoc b/docs/user-manual/modules/ROOT/pages/rollback-eip.adoc
deleted file mode 100644
index 767fa07..0000000
--- a/docs/user-manual/modules/ROOT/pages/rollback-eip.adoc
+++ /dev/null
@@ -1,242 +0,0 @@
-[[rollback-eip]]
-= Rollback EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/rollback-eip.adoc
-Rollback might be needed if there is a transaction or transactional pieces in your design.
-
-Camel recommends supporting the
-http://www.enterpriseintegrationpatterns.com/TransactionalClient.html[Transactional
-Client] from the xref:enterprise-integration-patterns.adoc[EIP patterns]
-using spring transactions.
-
-image::eip/TransactionalClientSolution.gif[image]
-
-Transaction Oriented Endpoints like xref:components::jms-component.adoc[JMS] support using a
-transaction for both inbound and outbound message exchanges. Endpoints
-that support transactions will participate in the current transaction
-context that they are called from.
-
-Configuration of Redelivery
-
-The redelivery in transacted mode is *not* handled by Camel but by the
-backing system (the transaction manager). In such cases you should
-resort to the backing system how to configure the redelivery.
-
-You should use the
-http://camel.apache.org/maven/current/camel-spring/apidocs/org/apache/camel/spring/SpringRouteBuilder.html[SpringRouteBuilder]
-to setup the routes since you will need to setup the spring context with
-the TransactionTemplates that will define the transaction manager
-configuration and policies.
-
-For inbound endpoint to be transacted, they normally need to be
-configured to use a Spring PlatformTransactionManager. In the case of
-the JMS component, this can be done by looking it up in the spring
-context.
-
-You first define needed object in the spring configuration.
-
-[source,xml]
---------------------------------------------------------
-<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
-  <property name="connectionFactory" ref="jmsConnectionFactory" />
-</bean>
-<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> 
-  <property name="brokerURL" value="tcp://localhost:61616"/>
-</bean>
---------------------------------------------------------
-
-Then you look them up and use them to create the JmsComponent.
-
-[source,java]
-----
-PlatformTransactionManager transactionManager = (PlatformTransactionManager) spring.getBean("jmsTransactionManager");
-ConnectionFactory connectionFactory = (ConnectionFactory) spring.getBean("jmsConnectionFactory");
-JmsComponent component = JmsComponent.jmsComponentTransacted(connectionFactory, transactionManager);
-component.getConfiguration().setConcurrentConsumers(1);
-ctx.addComponent("activemq", component);
-----
-
-== Options
-// eip options: START
-The Rollback EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *markRollbackOnly* | Mark the transaction for rollback only (cannot be overruled to commit) | false | Boolean
-| *markRollbackOnlyLast* | Mark only last sub transaction for rollback only. When using sub transactions (if the transaction manager support this) | false | Boolean
-| *message* | Message to use in rollback exception |  | String
-|===
-// eip options: END
-
-=== Transaction Policies
-
-Outbound endpoints will automatically enlist in the current transaction
-context. But what if you do not want your outbound endpoint to enlist in
-the same transaction as your inbound endpoint? The solution is to add a
-Transaction Policy to the processing route. You first have to define
-transaction policies that you will be using. The policies use a spring
-TransactionTemplate under the covers for declaring the transaction
-demarcation to use. So you will need to add something like the following
-to your spring xml:
-
-[source,xml]
---------------------------------------------------------
-<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
-  <property name="transactionManager" ref="jmsTransactionManager"/>
-</bean>
-<bean id="PROPAGATION_REQUIRES_NEW" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
-  <property name="transactionManager" ref="jmsTransactionManager"/> 
-  <property name="propagationBehaviorName" value="PROPAGATION_REQUIRES_NEW"/>
-</bean>
---------------------------------------------------------
-
-Then in your
-http://camel.apache.org/maven/current/camel-spring/apidocs/org/apache/camel/spring/SpringRouteBuilder.html[SpringRouteBuilder],
-you just need to create new SpringTransactionPolicy objects for each of
-the templates.
-
-[source,java]
-----
-public void configure() { 
-    ... 
-    Policy required = bean(SpringTransactionPolicy.class, "PROPAGATION_REQUIRED")); 
-    Policy requirenew = bean(SpringTransactionPolicy.class, "PROPAGATION_REQUIRES_NEW")); 
-    ... 
-}
-----
-Once created, you can use the Policy objects in your processing routes:
-
-[source,java]
-----
- // Send to bar in a new transaction
-from("activemq:queue:foo").policy(requirenew).to("activemq:queue:bar");
-// Send to bar without a transaction.
-from("activemq:queue:foo").policy(notsupported).to("activemq:queue:bar");
-----
-
-=== OSGi Blueprint
-
-If you are using xref:using-osgi-blueprint-with-camel.adoc[OSGi
-Blueprint] then you most likely have to explicit declare a policy and
-refer to the policy from the transacted in the route.
-
-[source,xml]
---------------------------------------------------------
-<bean id="required" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
-  <property name="transactionManager" ref="jmsTransactionManager"/>
-  <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
-</bean>
---------------------------------------------------------
-
-And then refer to "required" from the route:
-
-[source,xml]
---------------------------------------------------------
-<route>
-  <from uri="activemq:queue:foo"/> 
-  <transacted ref="required"/>
-  <to uri="activemq:queue:bar"/>
-</route>
---------------------------------------------------------
-
-== Database Sample
-
-In this sample we want to ensure that two endpoints is under transaction
-control. These two endpoints inserts data into a database. +
-The sample is in its full as a
-https://github.com/apache/camel/blob/master/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/TransactionalClientDataSourceMinimalConfigurationTest.java[unit
-test].
-
-First of all we setup the usual spring stuff in its configuration file.
-Here we have defined a DataSource to the HSQLDB and a most
-importantly the Spring DataSource TransactionManager that is doing the
-heavy lifting of ensuring our transactional policies. You are of course
-free to use any of the Spring based TransactionManager, eg. if you are
-in a full blown J2EE container you could use JTA or the WebLogic or
-WebSphere specific managers.
-
-As we use the new convention over configuration we do *not* need to
-configure a transaction policy bean, so we do not have any
-`PROPAGATION_REQUIRED` beans. All the beans needed to be configured is
-*standard* Spring beans only, eg. there are no Camel specific
-configuration at
-all.https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/interceptor/springTransactionalClientDataSourceMinimalConfiguration.xml[springTransactionalClientDataSourceMinimalConfiguration]Then
-we are ready to define our Camel routes. We have two routes: 1 for
-success conditions, and 1 for a forced rollback condition. +
-This is after all based on a unit test. Notice that we mark each route
-as transacted using the *transacted*
-tag.https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/interceptor/springTransactionalClientDataSourceMinimalConfiguration.xml[springTransactionalClientDataSourceMinimalConfiguration]That
-is all that is needed to configure a Camel route as being transacted.
-Just remember to use the *transacted* DSL. The rest is standard Spring
-XML to setup the transaction manager.
-
-== JMS Sample
-
-In this sample we want to listen for messages on a queue and process the
-messages with our business logic java code and send them along. Since
-its based on a https://github.com/apache/camel/blob/master/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/TransactionMinimalConfigurationTest.java[TransactionMinimalConfigurationTest.java] the destination is a mock endpoint.
-
-First we configure the standard Spring XML to declare a JMS connection
-factory, a JMS transaction manager and our ActiveMQ component that we
-use in our
-routing.https://github.com/apache/camel/blob/master/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionMinimalConfigurationTest.xml[TransactionMinimalConfigurationTest.xml]And
-then we configure our routes. Notice that all we have to do is mark the
-route as transacted using the *transacted*
-tag.https://github.com/apache/camel/blob/master/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionMinimalConfigurationTest.xml[TransactionMinimalConfigurationTest.xml]
-
-Transaction error handler
-
-When a route is marked as transacted using *transacted* Camel will
-automatic use the
-xref:transactionerrorhandler.adoc[TransactionErrorHandler] as
-xref:error-handler.adoc[Error Handler]. It supports basically the same
-feature set as the xref:defaulterrorhandler.adoc[DefaultErrorHandler],
-so you can for instance use xref:exception-clause.adoc[Exception Clause]
-as well.
-
-== Integration Testing with Spring
-
-An Integration Test here means a test runner class annotated
-`@RunWith(SpringJUnit4ClassRunner.class).`
-
-When following the Spring Transactions documentation it is tempting to
-annotate your integration test with `@Transactional` then seed your
-database before firing up the route to be tested and sending a message
-in. This is incorrect as Spring will have an in-progress transaction,
-and Camel will wait on this before proceeding, leading to the route
-timing out.
-
-Instead, remove the `@Transactional` annotation from the test method and
-seed the test data within a `TransactionTemplate` execution which will
-ensure the data is committed to the database before Camel attempts to
-pick up and use the transaction manager. A simple
-example https://github.com/rajivj2/example2/blob/master/src/test/java/com/example/NotificationRouterIT.java[can
-be found on GitHub].
-
-Spring's transactional model ensures each transaction is bound to one
-thread. A Camel route may invoke additional threads which is where the
-blockage may occur. This is not a fault of Camel but as the programmer
-you must be aware of the consequences of beginning a transaction in a
-test thread and expecting a separate thread created by your Camel route
-to be participate, which it cannot. You can, in your test, mock the
-parts that cause separate threads to avoid this issue.
-
-== Using multiple routes with different propagation behaviors
-
-Suppose you want to route a message through two routes and by which the
-2nd route should run in its own transaction. How do you do that? You use
-propagation behaviors for that where you configure it as follows:
-
-* The first route use `PROPAGATION_REQUIRED`
-* The second route use `PROPAGATION_REQUIRES_NEW`
-
-This is configured in the Spring XML
-file.https://github.com/apache/camel/blob/master/components/camel-spring/src/test/resources/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.xml[MixedTransactionPropagationTest.xml]Then
-in the routes you use transacted DSL to indicate which of these two
-propagations it
-uses.https://github.com/apache/camel/blob/master/components/camel-spring/src/test/java/org/apache/camel/spring/interceptor/MixedTransactionPropagationTest.java[MixedTransactionPropagationTest.java]Notice
-how we have configured the `onException` in the 2nd route to indicate in
-case of any exceptions we should handle it and just rollback this
-transaction. This is done using the `markRollbackOnlyLast` which tells
-Camel to only do it for the current transaction and not globally.
-
diff --git a/docs/user-manual/modules/ROOT/pages/roundRobin-eip.adoc b/docs/user-manual/modules/ROOT/pages/roundRobin-eip.adoc
deleted file mode 100644
index c988416..0000000
--- a/docs/user-manual/modules/ROOT/pages/roundRobin-eip.adoc
+++ /dev/null
@@ -1,36 +0,0 @@
-[[roundRobin-eip]]
-= Round Robin EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/roundRobin-eip.adoc
-
-Round Robin Load Balancer. With this Load Balancing policy, a random endpoint is selected for each exchange.
-
-== Options
-
-// eip options: START
-The Round Robin EIP has no options.
-// eip options: END
-
-== Examples
-
-In this case we are using the header test as correlation expression:
-
-[source,java]
-----
-from("direct:start")
-    .loadBalance()
-    .roundRobin()
-    .to("seda:x", "seda:y", "seda:z");
-----
-
-In XML you'll have a route like this
-
-[source,xml]
-----
-<from uri="direct:start"/>
-    <loadBalance>
-       <roundRobin/>
-       <to uri="seda:x"/>      
-       <to uri="seda:y"/>      
-       <to uri="seda:z"/>       
-    </loadBalance> 
-----
diff --git a/docs/user-manual/modules/ROOT/pages/routingSlip-eip.adoc b/docs/user-manual/modules/ROOT/pages/routingSlip-eip.adoc
deleted file mode 100644
index ca4e70d..0000000
--- a/docs/user-manual/modules/ROOT/pages/routingSlip-eip.adoc
+++ /dev/null
@@ -1,113 +0,0 @@
-[[routingSlip-eip]]
-= Routing Slip EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/routingSlip-eip.adoc
-The Routing Slip from the https://camel.apache.org/enterprise-integration-patterns.html[EIP patterns] allows you to route a message consecutively through a series of processing steps where the sequence of steps is not known at design time and can vary for each message.
-
-image::eip/RoutingTableSimple.gif[image]
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-== Options
-
-// eip options: START
-The Routing Slip EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uriDelimiter* | Sets the uri delimiter to use | , | String
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and  [...]
-|===
-// eip options: END
-
-== Example
-The following route will take any messages sent to the Apache ActiveMQ queue SomeQueue and pass them into the Routing Slip pattern.
-
-[source,java]
----------------------
-from("activemq:SomeQueue")
-  .routingSlip("aRoutingSlipHeader");
----------------------
-
-Messages will be checked for the existence of the `aRoutingSlipHeader` header.
-The value of this header should be a comma-delimited list of endpoint URIs you wish the message to be routed to.
-The Message will be routed in a pipeline fashion, i.e., one after the other. The Routing Slip sets a property, `Exchange.SLIP_ENDPOINT`, on the Exchange which contains the current endpoint as it advanced though the slip. This allows you to _know_ how far we have processed in the slip.
-
-The Routing Slip will compute the slip *beforehand* which means, the slip is only computed once. If you need to compute the slip _on-the-fly_ then use the Dynamic Router pattern instead.
-
-== Configuration Options
-Here we set the header name and the URI delimiter to something different.
-
-#=== Using the Fluent Builders
-[source,java]
----------------------
-from("direct:c").routingSlip(header("aRoutingSlipHeader"), "#");
----------------------
-
-#=== Using the Spring XML Extensions
-
-[source,xml]
----------------------
-<camelContext id="buildRoutingSlip" xmlns="http://activemq.apache.org/camel/schema/spring">
-  <route>
-    <from uri="direct:c"/>
-    <routingSlip uriDelimiter="#">
-       <header>aRoutingSlipHeader</header>
-    </routingSlip>
-  </route>
-</camelContext>
----------------------
-
-== Ignore Invalid Endpoints
-
-The Routing Slip supports ignoreInvalidEndpoints which the Recipient List also supports. You can use it to skip endpoints which are invalid.
-[source,java]
----------------------
-from("direct:a")
-  .routingSlip("myHeader")
-  .ignoreInvalidEndpoints();
----------------------
-
-And in Spring XML its an attribute on the recipient list tag:
-
-[source,xml]
----------------------
-<route>
-  <from uri="direct:a"/>
-  <routingSlip ignoreInvalidEndpoints="true"/>
-    <header>myHeader</header>
-  </routingSlip>
-</route>
----------------------
-
-Then let's say the myHeader contains the following two endpoints direct:foo,xxx:bar. The first endpoint is valid and works. However the second endpoint is invalid and will just be ignored. Camel logs at INFO level, so you can see why the endpoint was invalid.
-
-== Expression Support
-
-The Routing Slip supports to take the expression parameter as the Recipient List does. You can tell Camel the expression that you want to use to get the routing slip.
-
-[source,java]
----------------------
-from("direct:a")
-  .routingSlip(header("myHeader"))
-  .ignoreInvalidEndpoints();
----------------------
-
-And in Spring XML its an attribute on the recipient list tag.
-[source,xml]
----------------------
-<route>
-  <from uri="direct:a"/>
-  <!--NOTE from Camel 2.4.0, you need to specify the expression element inside of the routingSlip element -->
-  <routingSlip ignoreInvalidEndpoints="true">
-    <header>myHeader</header>
-  </routingSlip>
-</route>
----------------------
-
-== Further Examples
-For further examples of this pattern in use you could look at the routing slip test cases.
-
-== Using This Pattern
-If you would like to use this EIP Pattern then please read the Getting Started, you may also find the Architecture useful particularly the description of Endpoint and URIs. Then you could try out some of the Examples first before trying this pattern out.
diff --git a/docs/user-manual/modules/ROOT/pages/saga-eip.adoc b/docs/user-manual/modules/ROOT/pages/saga-eip.adoc
deleted file mode 100644
index 2a2d6cf..0000000
--- a/docs/user-manual/modules/ROOT/pages/saga-eip.adoc
+++ /dev/null
@@ -1,455 +0,0 @@
-[[saga-eip]]
-= Saga EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/saga-eip.adoc
-
-The Saga EIP provides a way to define a series of related actions in a Camel route that should be either completed successfully (*all of them*) or not-executed/compensated.
-Sagas implementations are able to coordinate *distributed services communicating using any transport* towards a globally *consistent outcome*.
-
-Although their main purpose is similar, Sagas are different from classical ACID distributed (XA) transactions because the status of the different participating services is guaranteed to be consistent
-only at the end of the Saga and not in any intermediate step (lack of isolation).
-
-Conversely, Sagas are suitable for many use cases where usage of distributed transactions is discouraged.
-For example, services participating in a Saga are allowed to use any kind of datastore: classical databases or even NoSQL non-transactional datastores.
-Sagas are also suitable for being used in stateless cloud services as they do not require a transaction log
-to be stored alongside the service.
-
-Differently from transactions, Sagas are also not required to be completed in a small amount of time, because they don't use database-level locks. They can live for a longer timespan: from few seconds to several days.
-The Saga EIP implementation based on the Microprofile sandbox spec (see camel-lra) is indeed called LRA that stands for "Long Running Action".
-It also supports coordination of external *heterogeneous services*, written with any language/technology and also running outside a JVM.
-
-Sagas don't use locks on data, instead they define the concept of "Compensating Action" that is an action that should be executed when the standard flow encounters an error,
-with the purpose of restoring the status that was present before the flow execution.
-Compensating actions can be declared in Camel routes using the Java or XML DSL and will be invoked by Camel only when needed (if the saga is cancelled due to an error).
-
-// eip options: START
-The Saga EIP supports 6 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *propagation* | Set the Saga propagation mode (REQUIRED, REQUIRES_NEW, MANDATORY, SUPPORTS, NOT_SUPPORTED, NEVER). | REQUIRED | SagaPropagation
-| *completionMode* | Determine how the saga should be considered complete. When set to AUTO, the saga is completed when the exchange that initiates the saga is processed successfully, or compensated when it completes exceptionally. When set to MANUAL, the user must complete or compensate the saga using the saga:complete or saga:compensate endpoints. | AUTO | SagaCompletionMode
-| *timeoutInMilliseconds* | Set the maximum amount of time for the Saga. After the timeout is expired, the saga will be compensated automatically (unless a different decision has been taken in the meantime). |  | Long
-| *compensation* | The compensation endpoint URI that must be called to compensate all changes done in the route. The route corresponding to the compensation URI must perform compensation and complete without error. If errors occur during compensation, the saga service may call again the compensation URI to retry. |  | SagaActionUri Definition
-| *completion* | The completion endpoint URI that will be called when the Saga is completed successfully. The route corresponding to the completion URI must perform completion tasks and terminate without error. If errors occur during completion, the saga service may call again the completion URI to retry. |  | SagaActionUri Definition
-| *option* | Allows to save properties of the current exchange in order to re-use them in a compensation/completion callback route. Options are usually helpful e.g. to store and retrieve identifiers of objects that should be deleted in compensating actions. Option values will be transformed into input headers of the compensation/completion exchange. |  | List
-| *sagaServiceRef* |  Refers to the id to lookup in the registry for the specific CamelSagaService to use. | | String
-|===
-// eip options: END
-
-== Exchange properties
-The following properties are set on each Exchange that is participating to a Saga (normal actions, compensating actions and completions):
-
-[width="100%",cols="4m,2m,5",options="header"]
-|===
-| Property | Type | Description
-| `Long-Running-Action` | `String` | A globally unique identifier for the Saga that can be propagated to remote systems using transport-level headers (e.g. HTTP).
-|===
-
-== Saga Service Configuration
-The Saga EIP requires that a service implementing the interface `org.apache.camel.saga.CamelSagaService` is added to the Camel context.
-
-Camel currently supports the following Saga Services:
-
-* *InMemorySagaService*: it is a *basic* implementation of the Saga EIP that does not support advanced features (no remote context propagation, no consistency guarantee in case of application failure).
-* *LRASagaService*: it is a *fully-fledged* implementation of the Saga EIP based on Microprofile sandbox LRA specification that supports remote context propagation and provides consistency guarantees in case of application failure.
-
-=== Using the In-Memory Saga Service
-
-The in-memory Saga service is not recommended for production environments as it does not support persistence of the Saga status (it is kept only in-memory),
-so it cannot guarantee consistency of Sagas in case of application failure (e.g. JVM crash).
-
-Also, when using a in-memory Saga service, Saga contexts cannot be propagated to remote services using transport-level headers (it can be done with other implementations).
-
-Users that want to use the in-memory saga service should add the following code to customize the Camel context.
-
-[source,java]
-----
-context.addService(new org.apache.camel.impl.saga.InMemorySagaService());
-----
-
-The service belongs to the `camel-core` module.
-
-=== Using the LRA Saga Service
-
-The LRA Saga Service is an implementation based on the Microprofile sandbox LRA specification.
-It leverages a *external Saga coordinator* to control the execution of the various steps of the Saga.
-The proposed reference implementation for the LRA specification is the http://jbossts.blogspot.it/2017/12/narayana-lra-implementation-of-saga.html[Narayana LRA Coordinator].
-Users can follows instructions present on the Narayana website to *startup a remote instance of the coordinator*.
-
-The URL of the LRA coordinator is a required parameter of the Camel LRA service. The Camel application and the LRA service communicate using the HTTP protocol.
-
-In order to use the LRA Saga service, maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-lra</artifactId>
- <!-- use the same version as your Camel core version -->
- <version>x.y.z</version>
-</dependency>
-----
-
-A Camel REST context is also required to be present for the LRA implementation to work. You may add `camel-undertow` for example.
-
-[source,xml]
-----
-<dependency>
- <groupId>org.apache.camel</groupId>
- <artifactId>camel-undertow</artifactId>
- <!-- use the same version as your Camel core version -->
- <version>x.y.z</version>
-</dependency>
-----
-
-[NOTE]
-====
-The LRA implementation of the Saga EIP will add some web endpoints under the "/lra-participant" path.
-Those endpoints will be used by the LRA coordinator for calling back the application.
-====
-
-[source,java]
-----
-// Configure the LRA saga service
-org.apache.camel.service.lra.LRASagaService sagaService = new org.apache.camel.service.lra.LRASagaService();
-sagaService.setCoordinatorUrl("http://lra-service-host");
-sagaService.setLocalParticipantUrl("http://my-host-as-seen-by-lra-service:8080/context-path");
-
-// Add it to the Camel context
-context.addService(sagaService);
-----
-
-==== Using the LRA Saga Service in Spring Boot
-
-Spring Boot users can use a simplified configuration model for the LRA Saga Service. Maven users can
-include the *camel-lra-starter* module in their project:
-
-[source,xml]
-----
-<dependency>
- <groupId>org.apache.camel.springboot</groupId>
- <artifactId>camel-lra-starter</artifactId>
- <!-- use the same version as your Camel core version -->
- <version>x.y.z</version>
-</dependency>
-
-<dependency>
- <groupId>org.apache.camel.springboot</groupId>
- <artifactId>camel-undertow-starter</artifactId>
- <!-- use the same version as your Camel core version -->
- <version>x.y.z</version>
-</dependency>
-----
-
-Configuration can be done in the Spring Boot `application.yaml` file:
-
-.application.yaml
-[source,yaml]
-----
-camel:
-  service:
-    lra:
-      enabled: true
-      coordinator-url: http://lra-service-host
-      local-participant-url: http://my-host-as-seen-by-lra-service:8080/context-path
-----
-
-Once done, the Saga EIP can be directly used inside Camel routes and it will use the LRA Saga Service under the hood.
-
-== Examples
-
-Suppose you want to place a new order and you have two distinct services in your system: one managing the orders and one managing the credit.
-Logically you can place a order if you have enough credit for it.
-
-With the Saga EIP you can model the _direct:buy_ route as a Saga composed of two distinct actions, one to create the order and one to take the credit.
-*Both actions must be executed, or none of them*: a order placed without credit can be considered a inconsistent outcome (as well as a payment without an order).
-
-[source,java]
-----
-from("direct:buy")
-  .saga()
-    .to("direct:newOrder")
-    .to("direct:reserveCredit");
-----
-
-*That's it*. The buy action will not change for the rest of the examples. We'll just see different options that can be used to model the "New Order" and "Reserve Credit" actions in the following.
-
-[NOTE]
-====
-We have used a _direct_ endpoint to model the two actions since this example can be used with both implementations of the Saga service,
-but we could have used *http* or other kinds of endpoint with the LRA Saga service.
-====
-
-Both services called by the _direct:buy_ route can *participate to the Saga* and declare their compensating actions.
-
-[source,java]
-----
-from("direct:newOrder")
-  .saga()
-  .propagation(SagaPropagation.MANDATORY)
-  .compensation("direct:cancelOrder")
-    .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-    .bean(orderManagerService, "newOrder")
-    .log("Order ${body} created");
-----
-
-Here the propagation mode is set to _MANDATORY_ meaning that any exchange flowing in this route must be already part of a saga
-(and it is the case in this example, since the saga is created in the _direct:buy_ route).
-
-The _direct:newOrder_ route declares a compensating action that is called _direct:cancelOrder_, responsible for undoing the order in case the saga is cancelled.
-
-Each exchange always contains a `Exchange.SAGA_LONG_RUNNING_ACTION` header that here is used as id of the order.
-This is done in order to identify the order to delete in the corresponding compensating action, but it is not a requirement (options can be used as alternative solution).
-
-The compensating action of _direct:newOrder_ is _direct:cancelOrder_ and it's shown below:
-
-[source,java]
-----
-from("direct:cancelOrder")
-  .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-  .bean(orderManagerService, "cancelOrder")
-  .log("Order ${body} cancelled");
-----
-
-It is called automatically by the Saga EIP implementation when the order should be cancelled.
-
-It should not terminate with error. In case an error is thrown in the _direct:cancelOrder_ route, the EIP implementation should
-periodically retry to execute the compensating action up to a certain limit.
-This means that *any compensating action must be idempotent*, so it should take into account that it may be triggered multiple times and should not fail in any case.
-
-If compensation cannot be done after all retries, a manual intervention process should be triggered by the Saga implementation.
-
-[NOTE]
-====
-It may happen that due to a delay in the execution of the _direct:newOrder_ route the Saga is cancelled by another party in the meantime (due to an error in a parallel route or a timeout at Saga level).
-
-So, when the compensating action _direct:cancelOrder_ is called, it may not find the Order record that should be cancelled.
-It is important, in order to guarantee full global consistency, that *any main action and its corresponding compensating action are commutative*,
-i.e. if compensation occurs before the main action it shoud have the same effect.
-
-Another possible approach, when using a commutative behavior is not possible,
-is to consistently fail in the compensating action until data produced by the main action is found (or the maximum number of retries is exhausted):
-this approach may work in many contexts, but it's *heuristic*.
-====
-
-The credit service may be implemented almost in the same way as the order service.
-
-[source,java]
-----
-// action
-from("direct:reserveCredit")
-  .saga()
-  .propagation(SagaPropagation.MANDATORY)
-  .compensation("direct:refundCredit")
-    .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-    .bean(creditService, "reserveCredit")
-    .log("Credit ${header.amount} reserved in action ${body}");
-
-// compensation
-from("direct:refundCredit")
-  .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-  .bean(creditService, "refundCredit")
-  .log("Credit for action ${body} refunded");
-----
-
-Here the compensating action for a credit reservation is a refund.
-
-This completes the example. It can be run with both implementations of the Saga EIP, as it does not involve remote endpoints.
-
-Further options will be shown next.
-
-=== Handling Completion Events
-It is often required to do some processing when the Saga is completed. Compensation endpoints are invoked when something wrong happens and the Saga is cancelled.
-Equivalently, *completion endpoints* can be invoked to do further processing when the Saga is completed successfully.
-
-For example, in the order service above, we may need to know when the order is completed (and the credit reserved) to actually start preparing the order.
-We will not want to start to prepare the order if the payment is not done (unlike most modern CPUs that give you access to reserved memory before ensuring that you have rights to read it).
-
-This can be done easily with a modified version of the _direct:newOrder_ endpoint:
-
-
-[source,java]
-----
-from("direct:newOrder")
-  .saga()
-  .propagation(SagaPropagation.MANDATORY)
-  .compensation("direct:cancelOrder")
-  .completion("direct:completeOrder") // completion endpoint
-    .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-    .bean(orderManagerService, "newOrder")
-    .log("Order ${body} created");
-
-// direct:cancelOrder is the same as in the previous example
-
-// called on successful completion
-from("direct:completeOrder")
-  .transform().header(Exchange.SAGA_LONG_RUNNING_ACTION)
-  .bean(orderManagerService, "findExternalId")
-  .to("jms:prepareOrder")
-  .log("Order ${body} sent for preparation");
-----
-
-When the Saga is completed, the order is sent to a JMS queue for preparation.
-
-Like compensating actions, also completion actions may be called multiple times by the Saga coordinator (especially in case of errors, like network errors).
-In this example, the service listening to the _prepareOrder_ JMS queue should be prepared to hold possible duplicates (see the Idempotent Consumer EIP for examples on how to handle duplicates).
-
-=== Using Custom Identifiers and Options
-The example shown so far use the `Exchange.SAGA_LONG_RUNNING_ACTION` as identifier for the resources (order and credit).
-This is not always a desired approach, as it may pollute the business logic and the data model.
-
-An alternative approach is to use Saga options to "register" custom identifiers.
-For example, the credit service may be refactored as follows:
-
-[source,java]
-----
-// action
-from("direct:reserveCredit")
-  .bean(idService, "generateCustomId") // generate a custom Id and set it in the body
-  .to("direct:creditReservation")
-
-// delegate action
-from("direct:creditReservation")
-  .saga()
-  .propagation(SagaPropagation.SUPPORTS)
-  .option("CreditId", body()) // mark the current body as needed in the compensating action
-  .compensation("direct:creditRefund")
-    .bean(creditService, "reserveCredit")
-    .log("Credit ${header.amount} reserved. Custom Id used is ${body}");
-
-// called only if the saga is cancelled
-from("direct:creditRefund")
-  .transform(header("CreditId")) // retrieve the CreditId option from headers
-  .bean(creditService, "refundCredit")
-  .log("Credit for Custom Id ${body} refunded");
-----
-
-*Note how the previous listing is not using the `Exchange.SAGA_LONG_RUNNING_ACTION` header at all.*
-
-Since the _direct:creditReservation_ endpoint can be now called also from outside a Saga, the propagation mode can be set to *SUPPORTS*.
-
-*Multiple options* can be declared in a Saga route.
-
-=== Setting Timeouts
-Sagas are long running actions, but this does not mean that they should not have a bounded timeframe to execute.
-*Setting timeouts on Sagas is always a good practice* as it guarantees that a Saga does not remain stuck forever in the case of machine failure.
-
-[NOTE]
-====
-The Saga EIP implementation may have a default timeout set on all Sagas that don't specify it explicitly
-====
-
-When the timeout expires, the Saga EIP will decide to *cancel the Saga* (and compensate all participants), unless a different decision has been taken before.
-
-Timeouts can be set on Saga participants as follows:
-
-[source,java]
-----
-from("direct:newOrder")
-  .saga()
-  .timeout(1, TimeUnit.MINUTES) // newOrder requires that the saga is completed within 1 minute
-  .propagation(SagaPropagation.MANDATORY)
-  .compensation("direct:cancelOrder")
-  .completion("direct:completeOrder")
-    // ...
-    .log("Order ${body} created");
-----
-
-All participants (e.g. credit service, order service) can set their own timeout. The minimum value of those timeouts is taken as timeout for the saga when they are composed together.
-
-A timeout can also be specified at saga level as follows:
-
-[source,java]
-----
-from("direct:buy")
-  .saga()
-  .timeout(5, TimeUnit.MINUTES) // timeout at saga level
-    .to("direct:newOrder")
-    .to("direct:reserveCredit");
-----
-
-=== Choosing Propagation
-In the examples above, we have used the _MANDATORY_ and _SUPPORTS_ propagation modes, but also the _REQUIRED_ propagation mode,
-that is the default propagation used when nothing else is specified.
-
-These propagation modes map 1:1 the equivalent modes used in transactional contexts. Here's a summary of their meaning:
-
-[width="100%",cols="2m,8",options="header"]
-|===
-| Propagation | Description
-| `REQUIRED` | Join the existing saga or create a new one if it does not exist.
-| `REQUIRES_NEW` | Always create a new saga. Suspend the old saga and resume it when the new one terminates.
-| `MANDATORY` | A saga must be already present. The existing saga is joined.
-| `SUPPORTS` | If a saga already exists, then join it.
-| `NOT_SUPPORTED` | If a saga already exists, it is suspended and resumed when the current block completes.
-| `NEVER` | The current block must never be invoked within a saga.
-|===
-
-=== Using Manual Completion (Advanced)
-When a Saga cannot be all executed in a synchronous way, but it requires e.g. communication with external services using asynchronous communication channels,
-the completion mode cannot be set to _AUTO_ (default), because the saga is not completed when the exchange that creates it is done.
-
-This is often the case for Sagas that have long execution times (hours, days). In these cases, the _MANUAL_ completion mode should be used.
-
-
-[source,java]
-----
-from("direct:mysaga")
-  .saga()
-  .completionMode(SagaCompletionMode.MANUAL)
-  .completion("direct:finalize")
-  .timeout(2, TimeUnit.HOURS)
-    .to("seda:newOrder")
-    .to("seda:reserveCredit");
-
-// Put here asynchronous processing for seda:newOrder and seda:reserveCredit
-// They will send asynchronous callbacks to seda:operationCompleted
-
-from("seda:operationCompleted") // an asynchronous callback
-  .saga()
-  .propagation(SagaPropagation.MANDATORY)
-    .bean(controlService, "actionExecuted")
-    .choice()
-      .when(body().isEqualTo("ok"))
-        .to("saga:complete") // complete the current saga manually (saga component)
-    .end()
-
-// You can put here the direct:finalize endpoint to execute final actions
-----
-
-Setting the completion mode to _MANUAL_ means that the saga is not completed when the exchange is processed in the route _direct:mysaga_ but
-it will last longer (max duration is set to 2 hours).
-
-When both asynchronous actions are completed the saga is completed. The call to complete is done using the Camel Saga Component's _saga:complete_ endpoint.
-There's is a similar endpoint for manually compensating the Saga (_saga:compensate_).
-
-Apparently the addition of the saga markers do not add much value to the flow: it works also if you remove all Saga EIP configuration.
-But Sagas add a lot of value, since they guarantee that even in the presence of unexpected issues (servers crashing, messages are lost)
-there will always be a consistent outcome: order placed and credit reserved, or none of them changed.
-In particular, if the Saga is not completed within 2 hours, the compensation mechanism will take care of fixing the status.
-
-== XML Configuration
-
-Saga features are also available for users that want to use the XML configuration.
-
-The following snipped shows an example:
-
-[source,xml]
-----
-<route>
-  <from uri="direct:start"/>
-  <saga>
-    <compensation uri="direct:compensation" />
-    <completion uri="direct:completion" />
-    <option optionName="myOptionKey">
-      <constant>myOptionValue</constant>
-    </option>
-    <option optionName="myOptionKey2">
-      <constant>myOptionValue2</constant>
-    </option>
-  </saga>
-  <to uri="direct:action1" />
-  <to uri="direct:action2" />
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/sample-eip.adoc b/docs/user-manual/modules/ROOT/pages/sample-eip.adoc
deleted file mode 100644
index 54a17df..0000000
--- a/docs/user-manual/modules/ROOT/pages/sample-eip.adoc
+++ /dev/null
@@ -1,85 +0,0 @@
-[[sample-eip]]
-= Sample EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/sample-eip.adoc
-
-A sampling throttler allows you to extract a sample of the exchanges from the traffic through a route. +
-It is configured with a sampling period during which only a single exchange is allowed to pass through. All other exchanges will be stopped.
-Will by default use a sample period of 1 seconds.
-
-== Options
-// eip options: START
-The Sample EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *samplePeriod* | Sets the sample period during which only a single Exchange will pass through. | 1 | Long
-| *messageFrequency* | Sets the sample message count which only a single Exchange will pass through after this many received. |  | Long
-| *units* | Sets the time units for the sample period, defaulting to seconds. | SECONDS | TimeUnit
-|===
-// eip options: END
-
-
-== Samples
-You use this EIP with the `sample` DSL as show in these samples.
-
-These samples also show how you can use the different syntax to configure the sampling period:
-
-[source,java]
-----
-from("direct:sample")
-    .sample()
-    .to("mock:result");
-
-from("direct:sample-configured")
-    .sample(1, TimeUnit.SECONDS)
-    .to("mock:result");
-
-from("direct:sample-configured-via-dsl")
-    .sample().samplePeriod(1).timeUnits(TimeUnit.SECONDS)
-    .to("mock:result");
-
-from("direct:sample-messageFrequency")
-    .sample(10)
-    .to("mock:result");
-
-from("direct:sample-messageFrequency-via-dsl")
-    .sample().sampleMessageFrequency(5)
-    .to("mock:result");
-----
-
-And the same example in Spring XML is:
-
-[source,xml]
-----
-<route>
-    <from uri="direct:sample"/>
-    <sample samplePeriod="1" units="seconds">
-        <to uri="mock:result"/>
-    </sample>
-</route>
-<route>
-    <from uri="direct:sample-messageFrequency"/>
-    <sample messageFrequency="10">
-        <to uri="mock:result"/>
-    </sample>
-</route>
-<route>
-    <from uri="direct:sample-messageFrequency-via-dsl"/>
-    <sample messageFrequency="5">
-        <to uri="mock:result"/>
-    </sample>
-</route>
-----
-
-And since it uses a default of 1 second you can omit this configuration in case you also want to use 1 second
-[source,xml]
-----
-<route>
-    <from uri="direct:sample"/>
-    <!-- will by default use 1 second period -->
-    <sample>
-        <to uri="mock:result"/>
-    </sample>
-</route>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/script-eip.adoc b/docs/user-manual/modules/ROOT/pages/script-eip.adoc
deleted file mode 100644
index 4ee44f1..0000000
--- a/docs/user-manual/modules/ROOT/pages/script-eip.adoc
+++ /dev/null
@@ -1,76 +0,0 @@
-[[script-eip]]
-= Script EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/script-eip.adoc
-
-Is used to execute a script which does not change the message (by default).
-This is useful when you need to invoke some logic that are not in Java code such as JavaScript,
-Groovy or any of the other Languages. The message body is not changed (by default) however the scripting
-context has access to the current Exchange and can essentially change the message or headers directly.
-But the return value from the script is discarded and not used.
-If the return value should be used as a changed message body then use xref:message-translator.adoc[Message Translator] EIP instead.
-
-== Options
-
-// eip options: START
-The Script EIP has no options.
-// eip options: END
-
-== Samples
-The route below will read the file contents and validate them against a regular expression.
-
-[source,java]
-----
-from("file://inbox")
-  .script().groovy("// some groovy code goes here")
-  .to("bean:MyServiceBean.processLine");
-----
-
-And from XML its easy as well
-
-[source,xml]
-----
-<route>
-  <from uri="file://inbox"/>
-  <script>
-    <groovy>// some groovy code goes here</groovy>
-  </script>
-  <beanRef ref="myServiceBean" method="processLine"/>
-</route>
-
-<bean id="myServiceBean" class="com.mycompany.MyServiceBean"/>
-----
-
-Mind that you can use _CDATA_ in XML if the groovy scrip uses `< >` etc
-
-[source,xml]
-----
-<route>
-  <from uri="file://inbox"/>
-  <script>
-    <groovy><![CDATA[ some groovy script here that can be multiple lines and whatnot ]]></groovy>
-  </script>
-  <beanRef ref="myServiceBean" method="processLine"/>
-</route>
-
-<bean id="myServiceBean" class="com.mycompany.MyServiceBean"/>
-----
-
-== Using external script files
-You can refer to external script files instead of inlining the script.
-For example to load a groovy script from the classpath you need to prefix the value with `resource:` as shown:
-
-[source,xml]
-----
-<route>
-  <from uri="file://inbox"/>
-  <script>
-    <groovy>resource:classpath:com/foo/myscript.groovy</groovy>
-  </script>
-  <beanRef ref="myServiceBean" method="processLine"/>
-</route>
-
-<bean id="myServiceBean" class="com.mycompany.MyServiceBean"/>
-----
-
-You can also refer to the script from the file system with `file:` instead of `classpath:`
-such as `file:/var/myscript.groovy`
diff --git a/docs/user-manual/modules/ROOT/pages/serviceCall-eip.adoc b/docs/user-manual/modules/ROOT/pages/serviceCall-eip.adoc
deleted file mode 100644
index 1444372..0000000
--- a/docs/user-manual/modules/ROOT/pages/serviceCall-eip.adoc
+++ /dev/null
@@ -1,619 +0,0 @@
-[[serviceCall-eip]]
-= Service Call EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/serviceCall-eip.adoc
-
-The Service Call EIP allows to call remote services in a distributed system.
-The service to call is looked up in a service registry of some sorts such as Kubernetes, Consul, Etcd, Zookeeper, DNS.
-The EIP separates the configuration of the service registry from the calling of the service.
-
-When calling a service you may just refer to the name of the service in the EIP as shown below:
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-    .to("mock:result");
-----
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo"/>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-Camel will then:
-
-* search for a service call configuration from the Camel context and registry
-* lookup a service with the name ```foo``` from an external service registry
-* filter the servers
-* select the server to use
-* build a Camel URI using the chosen server info
-
-By default the Service Call EIP uses camel-http so assuming that the selected service instance runs on host ```myhost.com``` on port ```80```, the computed Camel URI will be:
-
-[source]
-----
-http:myhost.com:80
-----
-
-== Service Name to Camel URI Examples
-
-It is often needed to build more complex Camel URI which may include options or paths which is possible through different options:name: value
-
-The *service name* supports a limited uri like syntax, here some examples
-
-[width="100%",cols="25%a,75%a",options="header"]
-|===
-|Name |Resolution
-
-|foo | http://host:port
-|foo/path | http://host:port/path
-|foo/path?foo=bar | http://host:port/path?foo=bar
-|===
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo/hello")
-    .to("mock:result");
-----
-
-If you want to have more control over the uri construction, you can use the *uri* directive:
-
-[width="100%",cols="25%a,40%a,35%a",options="header"]
-|===
-|Name | URI | Resolution
-
-|foo | undertow:http://foo/hello | undertow:http://host:port/hello
-|foo | undertow:http://foo.host:foo.port/hello | undertow:http://host:port/hello
-|===
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo", "undertow:http://foo/hello")
-    .to("mock:result");
-----
-
-Advanced users can have full control over the uri construction through expressions:
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall()
-        .name("foo")
-        .expression()
-            .simple("undertow:http://${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}/hello");
-----
-
-== Options
-// eip options: START
-The Service Call EIP supports 14 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *name* | *Required* Sets the name of the service to use |  | String
-| *uri* | The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression. |  | String
-| *component* | The component to use. | http | String
-| *pattern* | Sets the optional ExchangePattern used to invoke this endpoint |  | ExchangePattern
-| *configurationRef* | Refers to a ServiceCall configuration to use |  | String
-| *serviceDiscoveryRef* | Sets a reference to a custom ServiceDiscovery to use. |  | String
-| *serviceFilterRef* | Sets a reference to a custom ServiceFilter to use. |  | String
-| *serviceChooserRef* | Sets a reference to a custom ServiceChooser to use. |  | String
-| *loadBalancerRef* | Sets a reference to a custom ServiceLoadBalancer to use. |  | String
-| *expressionRef* | Set a reference to a custom Expression to use. |  | String
-| *serviceDiscovery Configuration* | *Required* Configures the ServiceDiscovery using the given configuration. |  | ServiceCallService DiscoveryConfiguration
-| *serviceFilterConfiguration* | *Required* Configures the ServiceFilter using the given configuration. |  | ServiceCallService FilterConfiguration
-| *loadBalancerConfiguration* | *Required* Configures the LoadBalancer using the given configuration. |  | ServiceCallServiceLoad BalancerConfiguration
-| *expressionConfiguration* | *Required* Configures the Expression using the given configuration. |  | ServiceCallExpression Configuration
-|===
-// eip options: END
-
-In addition to ref/binding configuration style you can leverage specific configuration DSL to customize specific options:
-
-== Static Service Discovery
-
-This service discovery implementation does not query any external services to find out the list of services associated to a named service but keep them in memory. Each service should be provided in the following form:
-
-[source]
-----
-[service@]host:port
-----
-
-[TIP]
-====
-The ``service`` part is used to discriminate against the services but if not provided it acts like a wildcard so each non named service will be returned whatever the service name is. This is useful if you have a single service so the service name is redundant.
-====
-
-[NOTE]
-====
-This implementation is provided by ``camel-core`` artifact.
-====
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| servers | String | A comma separated list of servers in the form: [service@]host:port,[service@]host2:port,[service@]host3:port
-|===
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .staticServiceDiscovery()
-            .servers("service1@host1:80,service1@host2:80")
-            .servers("service2@host1:8080,service2@host2:8080,service2@host3:8080")
-            .end()
-    .to("mock:result");
-----
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <staticServiceDiscovery>
-        <servers>service1@host1:80,service1@host2:80</servers>
-        <servers>service2@host1:8080,service2@host2:8080,service2@host3:8080</servers>
-      </staticServiceDiscovery>
-    </serviceCall
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Consul Service Discovery
-
-To leverage Consul for Service Discovery, maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-consul</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| url | String | The Consul agent URL
-| datacenter | String | The data center
-| aclToken | String | Sets the ACL token to be used with Consul
-| userName | String | Sets the username to be used for basic authentication
-| password | String | Sets the password to be used for basic authentication
-| connectTimeoutMillis | Long | Connect timeout for OkHttpClient
-| readTimeoutMillis | Long | Read timeout for OkHttpClient
-| writeTimeoutMillis | Long | Write timeout for OkHttpClient
-|===
-
-And example in Java
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .consulServiceDiscovery()
-            .url("http://consul-cluster:8500")
-            .datacenter("neverland")
-            .end()
-    .to("mock:result");
-----
-
-== DNS Service Discovery
-
-To leverage DNS for Service Discovery, maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-dns</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| proto | String | The transport protocol of the desired service, default "_tcp"
-| domain | String | The user name to use for basic authentication
-|===
-
-Example in Java:
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .dnsServiceDiscovery("my.domain.com")
-    .to("mock:result");
-----
-
-And in XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <dnsServiceDiscovery domain="my.domain.com"/>
-    </serviceCall>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Etcd Service Discovery
-
-To leverage Etcd for Service Discovery, maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-etcd</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| uris | String | The URIs the client can connect to
-| userName | String | The user name to use for basic authentication
-| password | String | The password to use for basic authentication
-| timeout | Long | To set the maximum time an action could take to complete
-| servicePath | String | The path to look for for service discovery, default "/services"
-| type | String | To set the discovery type, valid values are "on-demand" and "watch"
-|===
-
-Example in Java
-----
-from("direct:start")
-    .serviceCall("foo")
-        .etcdServiceDiscovery()
-            .uris("http://etcd1:4001,http://etcd2:4001")
-            .servicePath("/camel/services")
-            .end()
-    .to("mock:result");
-----
-
-And in XML
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <etcdServiceDiscovery uris="http://etcd1:4001,http://etcd2:4001" servicePath="/camel/services"/>
-    </serviceCall>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Kubernetes Service Discovery
-
-To leverage Kubernetes for Service Discovery, maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-kubernetes</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| lookup | String | How to perform service lookup. Possible values: client, dns, environment
-| apiVersion | String | Kubernetes API version when using client lookup
-| caCertData | String | Sets the Certificate Authority data when using client lookup
-| caCertFile | String | Sets the Certificate Authority data that are loaded from the file when using client lookup
-| clientCertData | String | Sets the Client Certificate data when using client lookup
-| clientCertFile | String | Sets the Client Certificate data that are loaded from the file when using client lookup
-| clientKeyAlgo | String | Sets the Client Keystore algorithm, such as RSA when using client lookup
-| clientKeyData | String | Sets the Client Keystore data when using client lookup
-| clientKeyFile | String | Sets the Client Keystore data that are loaded from the file when using client lookup
-| clientKeyPassphrase | String | Sets the Client Keystore passphrase when using client lookup
-| dnsDomain | String | Sets the DNS domain to use for dns lookup
-| namespace | String | The Kubernetes namespace to use. By default the namespace's name is taken from the environment variable KUBERNETES_MASTER
-| oauthToken | String | Sets the OAUTH token for authentication (instead of username/password) when using client lookup
-| username | String | Sets the username for authentication when using client lookup
-| password | String | Sets the password for authentication when using client lookup
-| trustCerts | Boolean | Sets whether to turn on trust certificate check when using client lookup
-|===
-
-Example in Java
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .kubernetesServiceDiscovery()
-            .lookup("dns")
-            .namespace("myNamespace")
-            .dnsDomain("my.domain.com")
-            .end()
-    .to("mock:result");
-----
-
-And in XML
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <kubernetesServiceDiscovery lookup="dns" namespace="myNamespace" dnsDomain="my.domain.com"/>
-    </serviceCall>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Blacklist Service Filter
-
-This service filter implementation removes the listed services from those found by the service discovery.
-Each service should be provided in the following form:
-
-[source]
-----
-[service@]host:port
-----
-
-[NOTE]
-====
-The services are removed if they fully match
-====
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| servers | String | A comma separated list of servers to blacklist: [service@]host:port,[service@]host2:port,[service@]host3:port
-|===
-
-Example in Java
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .staticServiceDiscovery()
-            .servers("service1@host1:80,service1@host2:80")
-            .servers("service2@host1:8080,service2@host2:8080,service2@host3:8080")
-            .end()
-        .blacklistFilter()
-            .servers("service2@host2:8080")
-            .end()
-    .to("mock:result");
-----
-
-And in XML
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <staticServiceDiscovery>
-        <servers>service1@host1:80,service1@host2:80</servers>
-        <servers>service2@host1:8080,service2@host2:8080,service2@host3:8080</servers>
-      </staticServiceDiscovery>
-      <blacklistServiceFilter>
-        <servers>service2@host2:8080</servers>
-      </blacklistServiceFilter>
-    </serviceCall
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Load Balancer
-
-The Service Call EIP comes with its own Load Balancer which is istantiated by default if a custom is not configured and
-glues Service Discovery, Service Filer, Service Chooser and Service Expression together to load balance requests among the available services.
-
-If you need a more sophisticate load balancer you can use Ribbon by adding camel-ribbon to the mix,
-maven users will need to add the following dependency to their pom.xml
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-ribbon</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
-
-Available options:
-
-[width="100%",cols="3,1m,6",options="header"]
-|===
-| Name | Java Type | Description
-| clientName | String | The Ribbon client name
-| properties | List<PropertyDefinition> | Custom client config properties
-|===
-
-To leverage Ribbon, it is required to explicit enable it:
-
-Java example
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall("foo")
-        .ribbonLoadBalancer()
-    .to("mock:result");
-----
-
-And in XML
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <ribbonLoadBalancer/>
-    </serviceCall>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-You can configure Ribbon key programmatic using `RibbonConfiguration`:
-
-[source,java]
-----
-RibbonConfiguration configuration = new RibbonConfiguration();
-configuration.addProperty("listOfServers", "localhost:9090,localhost:9091");
-
-from("direct:start")
-    .serviceCall("foo")
-        .loadBalancer(new RibbonServiceLoadBalancer(configuration))
-    .to("mock:result");
-----
-
-Or leveraging XML specific configuration:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-  <route>
-    <from uri="direct:start"/>
-    <serviceCall name="foo">
-      <ribbonLoadBalancer>
-          <properties key="listOfServers" value="localhost:9090,localhost:9091"/>
-      </ribbonLoadBalancer>
-    </serviceCall>
-    <to uri="mock:result"/>
-  </route>
-</camelContext>
-----
-
-== Shared configurations
-
-The Service Call EIP can be configured straight on the route definition or through shared configurations,
-here an example with two configurations registered in the Camel Context:
-
-[source,java]
-----
-ServiceCallConfigurationDefinition globalConf = new ServiceCallConfigurationDefinition();
-globalConf.setServiceDiscovery(
-    name -> Arrays.asList(
-        new DefaultServiceDefinition(name, "my.host1.com", 8080),
-        new DefaultServiceDefinition(name, "my.host2.com", 443))
-);
-globalConf.setServiceChooser(
-    list -> list.get(ThreadLocalRandom.current().nextInt(list.size()))
-);
-
-ServiceCallConfigurationDefinition httpsConf = new ServiceCallConfigurationDefinition();
-httpsConf.setServiceFilter(
-    list -> list.stream().filter(s -> s.getPort() == 443).collect(toList())
-);
-
-getContext().setServiceCallConfiguration(globalConf);
-getContext().addServiceCallConfiguration("https", httpsConf);
-----
-
-Each Service Call definition and configuration will inherit from the `globalConf` which can be seen as default configuration,
-then you can reference the `httpsConf` in your route as follow:
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall()
-        .name("foo")
-        .serviceCallConfiguration("https")
-        .end()
-    .to("mock:result");
-----
-
-This route will leverages the service discovery and service chooser from `globalConf` and the service filter from `httpsConf`
-but you can override any of them if needed straight on the route:
-
-[source,java]
-----
-from("direct:start")
-    .serviceCall()
-        .name("foo")
-        .serviceCallConfiguration("https")
-        .serviceChooser(list -> list.get(0))
-        .end()
-    .to("mock:result");
-----
-
-== Spring Boot support
-
-In a Spring-Boot application you can externalize most of the configuration options:
-
-[source,properties]
-.application.properties
-----
-# this can be configured stright tot he route and it has been included to show
-# property placeholders support
-service.name = foo
-
-# this property is not mandatory and it has been included to show how to configure
-# the service discovery implementation provided by camel-consul
-camel.cloud.consul.service-discovery.url = http://localhost:8500
-
-# Add a static list of servers for the service named foo
-camel.cloud.service-discovery.services[foo] = host1.static:8080,host2.static:8080
-----
-
-[source,java]
-.Routes
-----
-@Component
-public class MyRouteBuilder implements RouteBuilder {
-    @Override
-    public void configure() throws Exception {
-        from("direct:start")
-            .serviceCall("{{service.name}}");
-    }
-}
-----
-
-== Spring Cloud support
-
-If you are using Camel in an application based on Spring Cloud, you can leverage Spring Cloud service discovery and load balancing capabilities by adding the Spring Cloud related dependencies (i.e. spring-cloud-consul, spring-cloud-kubernetes) as any Spring Boot/Cloud application in addition to Camel's own camel-spring-cloud dependency.
-
-[source,xml]
-----
-<dependency>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>camel-spring-cloud dependency</artifactId>
-    <!-- use the same version as your Camel core version -->
-    <version>x.y.z</version>
-</dependency>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/setBody-eip.adoc b/docs/user-manual/modules/ROOT/pages/setBody-eip.adoc
deleted file mode 100644
index 12e789c..0000000
--- a/docs/user-manual/modules/ROOT/pages/setBody-eip.adoc
+++ /dev/null
@@ -1,40 +0,0 @@
-[[setBody-eip]]
-= Set Body EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/setBody-eip.adoc
-
-The SetBody EIP allows you to set the body of your exchange.
-
-== Options
-
-// eip options: START
-The Set Body EIP has no options.
-// eip options: END
-
-== Examples
-
-The following example shows how to use the SetBody EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .setBody(constant("test"))
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <setBody><constant>test</constant></setBody>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/setHeader-eip.adoc b/docs/user-manual/modules/ROOT/pages/setHeader-eip.adoc
deleted file mode 100644
index fdee774..0000000
--- a/docs/user-manual/modules/ROOT/pages/setHeader-eip.adoc
+++ /dev/null
@@ -1,48 +0,0 @@
-[[setHeader-eip]]
-= Set Header EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/setHeader-eip.adoc
-
-The SetHeader EIP allows you to set and header on your exchange.
-
-== Options
-
-// eip options: START
-The Set Header EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *name* | *Required* Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used. |  | String
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to use the SetHeader EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .setHeader("myHeader", constant("test"))
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <setHeader name="myHeader">
-            <constant>test</constant>
-        </setHeader>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/setOutHeader-eip.adoc b/docs/user-manual/modules/ROOT/pages/setOutHeader-eip.adoc
deleted file mode 100644
index afb1ad9..0000000
--- a/docs/user-manual/modules/ROOT/pages/setOutHeader-eip.adoc
+++ /dev/null
@@ -1,50 +0,0 @@
-[[setOutHeader-eip]]
-= Set Out Header EIP (deprecated)
-:page-source: core/camel-core-engine/src/main/docs/eips/setOutHeader-eip.adoc
-== Set Header EIP
-
-This EIP is deprecated.
-The SetOutHeader EIP allows you to set an header on the out message of your exchange.
-
-== Options
-
-// eip options: START
-The Set Out Header EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *headerName* | *Required* Name of message header to set a new value |  | String
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to use the SetOutHeader EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .setOutHeader("myHeader", constant("test"))
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <setOutHeader headerName="myHeader">
-            <constant>test</constant>
-        </setOutHeader>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/setProperty-eip.adoc b/docs/user-manual/modules/ROOT/pages/setProperty-eip.adoc
deleted file mode 100644
index b71a9a1..0000000
--- a/docs/user-manual/modules/ROOT/pages/setProperty-eip.adoc
+++ /dev/null
@@ -1,48 +0,0 @@
-[[setProperty-eip]]
-= Set Property EIP
-:page-source: core/camel-core-engine/src/main/docs/eips/setProperty-eip.adoc
-
-The SetProperty EIP allows you to set a property on your exchange.
-
-== Options
-
-// eip options: START
-The Set Property EIP supports 1 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *name* | *Required* Name of exchange property to set a new value. The simple language can be used to define a dynamic evaluated exchange property name to be used. Otherwise a constant name will be used. |  | String
-|===
-// eip options: END
-
-== Examples
-
-The following example shows how to use the SetProperty EIP
-
-[source,java]
-----
-RouteBuilder builder = new RouteBuilder() {
-    public void configure() {
-        from("direct:a")
-            .setProperty("myProperty", constant("test"))
-            .to("direct:b");
-    }
-};
-----
-
-
-And the same example using XML:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:a"/>
-        <setProperty name="myProperty">
-            <constant>test</constant>
-        </setProperty>
-        <to uri="direct:b"/>
-    </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/ROOT/pages/simple-language.adoc b/docs/user-manual/modules/ROOT/pages/simple-language.adoc
deleted file mode 100644
index c135562..0000000
--- a/docs/user-manual/modules/ROOT/pages/simple-language.adoc
+++ /dev/null
@@ -1,885 +0,0 @@
-[[simple-language]]
-= Simple Language
-:page-source: core/camel-core-languages/src/main/docs/simple-language.adoc
-
-*Since Camel 1.1*
-
-The Simple Expression Language was a really simple language when it was
-created, but has since grown more powerful. It is primarily intended for
-being a really small and simple language for evaluating
-Expressions and Predicates
-without requiring any new dependencies or knowledge of
-xref:components::xpath-language.adoc[XPath]; so it is ideal for testing in camel-core. The
-idea was to cover 95% of the common use cases when you need a little bit
-of expression based script in your Camel routes.
-
-However for much more complex use cases you are generally recommended to
-choose a more expressive and powerful language such as:
-
-* xref:components::groovy-language.adoc[Groovy]
-* xref:components::spel-language.adoc[SpEL]
-* xref:components::mvel-component.adoc[MVEL]
-* xref:components::ognl-language.adoc[OGNL]
-
-The simple language uses `${body`} placeholders for complex expressions
-where the expression contains constant literals. The $\{ } placeholders
-can be omitted if the expression is only the token itself.
-
-[TIP]
-====
-*Alternative syntax* 
-
-You can also use the alternative syntax which
-uses `$simple{ }` as placeholders. This can be used in situations to avoid clashes when using for example
-Spring property placeholder together with Camel.
-====
-
-== Simple Language options
-
-// language options: START
-The Simple language supports 2 options, which are listed below.
-
-
-
-[width="100%",cols="2,1m,1m,6",options="header"]
-|===
-| Name | Default | Java Type | Description
-| resultType |  | String | Sets the class name of the result type (type from output)
-| trim | true | Boolean | Whether to trim the value to remove leading and trailing whitespaces and line breaks
-|===
-// language options: END
-
-== Variables
-
-[width="100%",cols="10%,10%,80%",options="header",]
-|=======================================================================
-|Variable |Type |Description
-
-|camelId |String |the CamelContext name
-
-|camelContext.*OGNL* |Object |the CamelContext invoked using a Camel OGNL expression.
-
-|exchange |Exchange |the Exchange
-
-|exchange.*OGNL* |Object |the Exchange invoked using a Camel
-OGNL expression.
-
-|exchangeId |String |the exchange id
-
-|id |String |the input message id
-
-|body |Object |the input body
-
-|in.body |Object |*deprecated* the input body
-
-|body.*OGNL* |Object |the input body invoked using a Camel OGNL expression.
-
-|in.body.*OGNL* |Object |*deprecated* the input body invoked using a Camel OGNL expression.
-
-|bodyAs(_type_) |Type |Converts the body to the given type determined by its
-classname. The converted body can be null.
-
-|bodyAs(_type_).*OGNL* |Object |Converts the body to the given type determined by its
-classname and then invoke methods using a Camel OGNL expression. The
-converted body can be null.
-
-|bodyOneLine | String | Converts the body to a String and removes all line-breaks so the string is in one line.
-
-|mandatoryBodyAs(_type_) |Type |Converts the body to the given type determined by its
-classname, and expects the body to be not null.
-
-|mandatoryBodyAs(_type_).*OGNL* |Object |Converts the body to the given type determined by its
-classname and then invoke methods using a Camel OGNL expression.
-
-|header.foo |Object |refer to the input foo header
-
-|header:foo |Object |refer to the input foo header
-
-|header[foo] |Object |refer to the input foo header
-
-|headers.foo |Object |refer to the input foo header
-
-|headers:foo |Object |refer to the input foo header
-
-|headers[foo] |Object |refer to the input foo header
-
-|in.header.foo |Object |*deprecated* refer to the input foo header
-
-|in.header:foo |Object |*deprecated* refer to the input foo header
-
-|in.header[foo] |Object |*deprecated* refer to the input foo header
-
-|in.headers.foo |Object |*deprecated* refer to the input foo header
-
-|in.headers:foo |Object |*deprecated* refer to the input foo header
-
-|in.headers[foo] |Object |*deprecated* refer to the input foo header
-
-|header.foo[bar] |Object |regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|in.header.foo[bar] |Object |*deprecated* regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|in.headers.foo[bar] |Object |*deprecated* regard input foo header as a map and perform lookup on the
-map with bar as key
-
-|header.foo.*OGNL* |Object |refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|in.header.foo.*OGNL* |Object |*deprecated* refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|in.headers.foo.*OGNL* |Object |*deprecated* refer to the input foo header and invoke its value using a
-Camel OGNL expression.
-
-|headerAs(_key_,_type_) |Type |converts the header to the given type determined by its
-classname
-
-|headers |Map |refer to the input headers
-
-|in.headers |Map |*deprecated* refer to the input headers
-
-|exchangeProperty.foo |Object |refer to the foo property on the exchange
-
-|exchangeProperty[foo] |Object |refer to the foo property on the exchange
-
-|exchangeProperty.foo.*OGNL* |Object |refer to the foo property on the exchange and invoke its
-value using a Camel OGNL expression.
-
-|sys.foo |String |refer to the JVM system property
-
-|sysenv.foo |String |refer to the system environment variable
-
-|env.foo |String |refer to the system environment variable
-
-|exception |Object |refer to the exception object on the exchange, is *null* if
-no exception set on exchange. Will fallback and grab caught exceptions
-(`Exchange.EXCEPTION_CAUGHT`) if the Exchange has any.
-
... 2802 lines suppressed ...


[camel] 13/18: move languages and properties-component to components: fix xrefs: user-manual

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 31dc7ba214a19c49ee2f2fc8104d77f159527798
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:08:08 2020 -0700

    move languages and properties-component to components: fix xrefs: user-manual
---
 docs/user-manual/modules/ROOT/nav.adoc             |   9 +-
 .../modules/ROOT/pages/backlog-tracer.adoc         |   4 +-
 .../modules/ROOT/pages/bam-example.adoc            |   2 +-
 .../modules/ROOT/pages/bean-binding.adoc           |  10 +-
 .../modules/ROOT/pages/bean-integration.adoc       |   2 +-
 .../modules/ROOT/pages/content-enricher.adoc       |  16 +-
 .../modules/ROOT/pages/dynamic-router.adoc         | 199 -----
 .../modules/ROOT/pages/exception-clause.adoc       |   2 +-
 .../user-manual/modules/ROOT/pages/expression.adoc |  26 +-
 ...how-does-camel-look-up-beans-and-endpoints.adoc |   4 +-
 docs/user-manual/modules/ROOT/pages/index.adoc     |  30 +-
 docs/user-manual/modules/ROOT/pages/intercept.adoc |   2 +-
 docs/user-manual/modules/ROOT/pages/languages.adoc |  30 +-
 .../ROOT/pages/parameter-binding-annotations.adoc  |  22 +-
 docs/user-manual/modules/ROOT/pages/predicate.adoc |  36 +-
 .../modules/ROOT/pages/properties-component.adoc   | 842 ---------------------
 docs/user-manual/modules/ROOT/pages/rest-dsl.adoc  |   2 +-
 .../modules/ROOT/pages/spring-remoting.adoc        |  10 +-
 .../ROOT/pages/using-propertyplaceholder.adoc      |  12 +-
 19 files changed, 106 insertions(+), 1154 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/nav.adoc b/docs/user-manual/modules/ROOT/nav.adoc
index 799b06c..328b6b8 100644
--- a/docs/user-manual/modules/ROOT/nav.adoc
+++ b/docs/user-manual/modules/ROOT/nav.adoc
@@ -51,14 +51,7 @@
  ** xref:java-dsl.adoc[Java DSL]
  ** xref:spring.adoc[Spring support]
 * xref:using-osgi-blueprint-with-camel.adoc[Using OSGi blueprint with Camel]
-* Supported expression languages
- ** xref:languages:constant-language.adoc[Constant Language]
- ** xref:languages:exchangeProperty-language.adoc[ExchangeProperty Language]
- ** xref:languages:file-language.adoc[File Language]
- ** xref:languages:header-language.adoc[Header Language]
- ** xref:languages:ref-language.adoc[Ref Language]
- ** xref:languages:simple-language.adoc[Simple Language]
- ** xref:languages:tokenize-language.adoc[Tokenize Language]
+* Supported expression languages -- see Components documentation
 * xref:enterprise-integration-patterns.adoc[Enterprise Integration Patterns]
  ** xref:eips:aggregate-eip.adoc[Aggregate EIP]
  ** xref:eips:batch-config-eip.adoc[Batch-config EIP]
diff --git a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
index 5ce541e..feab678 100644
--- a/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
+++ b/docs/user-manual/modules/ROOT/pages/backlog-tracer.adoc
@@ -56,9 +56,9 @@ do "to*" to match any to. Or use "route-foo*" to match any foo routes.
 
 |traceFilter |`null` |Allow to configure a filter as a xref:predicate.adoc[Predicate] using
 any of the Camel xref:languages.adoc[languages]. But default the
-xref:languages:simple-language.adoc[Simple] language is used. For example to filter on
+xref:components:languages:simple-language.adoc[Simple] language is used. For example to filter on
 messages with a given header, use `${header.foo} != null`. To use
-xref:components::groovy-language.adoc[Groovy] then prefix the value with "groovy:". And
+xref:components:languages:groovy-language.adoc[Groovy] then prefix the value with "groovy:". And
 similar for the other languages.
 
 |removeOnDump |`true` |Whether to remove the traced messages that was returned when invoking
diff --git a/docs/user-manual/modules/ROOT/pages/bam-example.adoc b/docs/user-manual/modules/ROOT/pages/bam-example.adoc
index cbfee93..3389beb 100644
--- a/docs/user-manual/modules/ROOT/pages/bam-example.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bam-example.adoc
@@ -76,7 +76,7 @@ the Camel Components
 correlate together the purchase order and invoice messages which can be
 any Expression via any of the
 Languages Supported. In this case we are
-using xref:components::xpath-language.adoc[XPath].
+using xref:components:languages:xpath-language.adoc[XPath].
 
 Then the final line of code defines the temporal rules to use; namely
 that it is considered to be an error if an invoice is not received
diff --git a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
index 0932932..3db103f 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-binding.adoc
@@ -231,9 +231,9 @@ the method option
 * The value is a numeric value such as `123` or `7`
 * The value is a String enclosed with either single or double quotes
 * The value is null which denotes a `null` value
-* It can be evaluated using the xref:languages:simple-language.adoc[Simple] language, which
+* It can be evaluated using the xref:components:languages:simple-language.adoc[Simple] language, which
 means you can use, e.g., body, header.foo and other
-xref:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
+xref:components:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
 $\{ }.
 
 Any other value is consider to be a type declaration instead - see the
@@ -276,7 +276,7 @@ body as shown:
 .bean(OrderService.class, "doSomething(${body}, true)") 
 ----
 
-The syntax of the parameters is using the xref:languages:simple-language.adoc[Simple]
+The syntax of the parameters is using the xref:components:languages:simple-language.adoc[Simple]
 expression language so we have to use $\{ } placeholders in the body to
 refer to the message body.
 
@@ -312,7 +312,7 @@ first has the content 'World' (without quotes), and the 2nd has the
 value of 5.
 Camel will automatically convert these values to the parameters' types.
 
-Having the power of the xref:languages:simple-language.adoc[Simple] language allows us to
+Having the power of the xref:components:languages:simple-language.adoc[Simple] language allows us to
 bind to message headers and other values such as:
 
 [source,syntaxhighlighter-pre]
@@ -320,7 +320,7 @@ bind to message headers and other values such as:
 .bean(OrderService.class, "doSomething(${body}, ${header.high})") 
 ----
 
-You can also use the OGNL support of the xref:languages:simple-language.adoc[Simple]
+You can also use the OGNL support of the xref:components:languages:simple-language.adoc[Simple]
 expression language. Now suppose the message body is an object which has
 a method named `asXml`. To invoke the `asXml` method we can do as
 follows:
diff --git a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
index f85fd17..5762c07 100644
--- a/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
+++ b/docs/user-manual/modules/ROOT/pages/bean-integration.adoc
@@ -32,7 +32,7 @@ See more details at:
 
 * xref:pojo-consuming.adoc[POJO Consuming] to consume and possibly route messages from Camel
 * xref:pojo-producing.adoc[POJO Producing] to make it easy to produce camel messages from your POJOs
-* `@DynamicRouter` Annotation for creating a xref:dynamic-router.adoc[Dynamic Router] from a POJO method
+* `@DynamicRouter` Annotation for creating a xref:eips:dynamic-router.adoc[Dynamic Router] from a POJO method
 * `@RecipientList` Annotation for creating a xref:eips:recipientList-eip.adoc[Recipient List] from a POJO method
 * `@RoutingSlip` Annotation for creating a xref:eips:routingSlip-eip.adoc[Routing Slip] for a POJO method
 * xref:bean-injection.adoc[Bean Injection] to inject Camel related resources into your POJOs
diff --git a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
index 77fd4d8..05a936c 100644
--- a/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
+++ b/docs/user-manual/modules/ROOT/pages/content-enricher.adoc
@@ -135,8 +135,8 @@ confluenceTableSmall
 |`uri` |  |The endpoint uri for the external service to enrich from. You
 must use either `uri` or `ref`. *Important:* From Camel 2.16 onwards,
 this option is removed, and you use an xref:expression.adoc[Expression]
-to configure the uri, such as xref:languages:simple-language.adoc[Simple] or
-xref:languages:constant-language.adoc[Constant] or any other dynamic language that can
+to configure the uri, such as xref:components:languages:simple-language.adoc[Simple] or
+xref:components:languages:constant-language.adoc[Constant] or any other dynamic language that can
 compute the uri dynamically using values from the current
 xref:exchange.adoc[Exchange].
 
@@ -144,13 +144,13 @@ xref:exchange.adoc[Exchange].
 from. You must use either `uri` or `ref`.  **Important:** From Camel
 2.16 onwards, this option is removed, and you use an
 xref:expression.adoc[Expression] to configure the uri, such as
-xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
+xref:components:languages:simple-language.adoc[Simple] or xref:components:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
 |expression |  |*Camel 2.16:* Mandatory.
 The xref:expression.adoc[Expression] to configure the uri, such as
-xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
+xref:components:languages:simple-language.adoc[Simple] or xref:components:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
@@ -348,8 +348,8 @@ polling
 |`uri` |  |The endpoint uri for the external service to enrich from. You
 must use either `uri` or `ref`. **Important:** From Camel 2.16 onwards,
 this option is removed, and you use an xref:expression.adoc[Expression]
-to configure the uri, such as xref:languages:simple-language.adoc[Simple] or
-xref:languages:constant-language.adoc[Constant] or any other dynamic language that can
+to configure the uri, such as xref:components:languages:simple-language.adoc[Simple] or
+xref:components:languages:constant-language.adoc[Constant] or any other dynamic language that can
 compute the uri dynamically using values from the current
  xref:exchange.adoc[Exchange].
 
@@ -357,13 +357,13 @@ compute the uri dynamically using values from the current
 from. You must use either `uri` or `ref`. **Important:** From Camel 2.16
 onwards, this option is removed, and you use an
 xref:expression.adoc[Expression] to configure the uri, such as
-xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
+xref:components:languages:simple-language.adoc[Simple] or xref:components:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current  xref:exchange.adoc[Exchange].
 
 |`expression` |  |**Camel 2.16:** Mandatory.
 The xref:expression.adoc[Expression] to configure the uri, such as
-xref:languages:simple-language.adoc[Simple] or xref:languages:constant-language.adoc[Constant] or any other
+xref:components:languages:simple-language.adoc[Simple] or xref:components:languages:constant-language.adoc[Constant] or any other
 dynamic language that can compute the uri dynamically using values from
 the current xref:exchange.adoc[Exchange].
 
diff --git a/docs/user-manual/modules/ROOT/pages/dynamic-router.adoc b/docs/user-manual/modules/ROOT/pages/dynamic-router.adoc
deleted file mode 100644
index 12aa022..0000000
--- a/docs/user-manual/modules/ROOT/pages/dynamic-router.adoc
+++ /dev/null
@@ -1,199 +0,0 @@
-[[DynamicRouter-DynamicRouter]]
-= Dynamic Router
-:page-source: core/camel-core-engine/src/main/docs/eips/dynamic-router.adoc
-
-The
-http://www.enterpriseintegrationpatterns.com/DynamicRouter.html[Dynamic
-Router] from the EIP patterns
-allows you to route messages while avoiding the dependency of the router
-on all possible destinations while maintaining its efficiency.
-
-image::eip/DynamicRouter.gif[image]
-
-The `dynamicRouter` in the DSL is similar to
-a dynamic Routing Slip which evaluates the slip
-_on-the-fly_.
-
-WARNING: *Beware*
-You must ensure the expression used for the `dynamicRouter` such as a
-bean, will return `null` to indicate the end. Otherwise the
-`dynamicRouter` will keep repeating endlessly.
-
-[[DynamicRouter-DynamicRouterinCamel2.5onwards]]
-== Dynamic Router in Camel 2.5 onwards
-
-The Dynamic Router will set a
-property (Exchange.SLIP_ENDPOINT) on the Exchange
-which contains the current endpoint as it advanced though the slip. This
-allows you to know how far we have processed in the slip. (It's a slip
-because the Dynamic Router implementation is
-based on top of Routing Slip).
-
-TIP: See the `cacheSize` option for more details on _how much cache_ to use depending on how many or few unique endpoints are used.
-
-== Options
-
-// eip options: START
-The Dynamic Router EIP supports 3 options which are listed below:
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *uriDelimiter* | Sets the uri delimiter to use | , | String
-| *ignoreInvalidEndpoints* | Ignore the invalidate endpoint exception when try to create a producer with that endpoint | false | Boolean
-| *cacheSize* | Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is used to cache and reuse producers when using this routing slip, when uris are reused. Beware that when using dynamic endpoints then it affects how well the cache can be utilized. If each dynamic endpoint is unique then its best to turn of caching by setting this to -1, which allows Camel to not cache both the producers and endpoints; they are regarded as prototype scoped and will be stopped and  [...]
-|===
-// eip options: END
-
-[[DynamicRouter-JavaDSL]]
-== Java DSL
-
-In Java DSL you can use the `dynamicRouter` as shown below:
-
-[source,java]
-----
-from("direct:start")
-    // use a bean as the dynamic router
-    .dynamicRouter(method(DynamicRouterTest.class, "slip"));
-----
-
-Which will leverage a xref:components::bean-component.adoc[Bean] to compute the slip
-_on-the-fly_, which could be implemented as follows:
-
-[source,java]
-----
-/**
- * Use this method to compute dynamic where we should route next.
- *
- * @param body the message body
- * @return endpoints to go, or <tt>null</tt> to indicate the end
- */
-public String slip(String body) {
-    bodies.add(body);
-    invoked++;
- 
-    if (invoked == 1) {
-        return "mock:a";
-    } else if (invoked == 2) {
-        return "mock:b,mock:c";
-    } else if (invoked == 3) {
-        return "direct:foo";
-    } else if (invoked == 4) {
-        return "mock:result";
-    }
- 
-    // no more so return null
-    return null;
-}
-----
-
-Mind that this example is only for show and tell. The current
-implementation is not thread safe. You would have to store the state on
-the Exchange, to ensure thread safety, as shown
-below:
-
-[source,java]
-----
-/**
- * Use this method to compute dynamic where we should route next.
- *
- * @param body the message body
- * @param properties the exchange properties where we can store state between invocations
- * @return endpoints to go, or <tt>null</tt> to indicate the end
- */
-public String slip(String body, @Properties Map<String, Object> properties) {
-    bodies.add(body);
- 
-    // get the state from the exchange properties and keep track how many times
-    // we have been invoked
-    int invoked = 0;
-    Object current = properties.get("invoked");
-    if (current != null) {
-        invoked = Integer.valueOf(current.toString());
-    }
-    invoked++;
-    // and store the state back on the properties
-    properties.put("invoked", invoked);
- 
-    if (invoked == 1) {
-        return "mock:a";
-    } else if (invoked == 2) {
-        return "mock:b,mock:c";
-    } else if (invoked == 3) {
-        return "direct:foo";
-    } else if (invoked == 4) {
-        return "mock:result";
-    }
- 
-    // no more so return null
-    return null;
-}
-----
-
-You could also store state as message headers, but they are not
-guaranteed to be preserved during routing, where as properties on the
-Exchange are. Although there was a bug in the method
-call expression, see the warning below.
-
-[[DynamicRouter-SpringXML]]
-== Spring XML
-
-The same example in Spring XML would be:
-
-[source,xml]
-----
-<bean id="mySlip" class="org.apache.camel.processor.DynamicRouterTest"/>
- 
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-    <route>
-        <from uri="direct:start"/>
-        <dynamicRouter>
-            <!-- use a method call on a bean as dynamic router -->
-            <method ref="mySlip" method="slip"/>
-        </dynamicRouter>
-    </route>
- 
-    <route>
-        <from uri="direct:foo"/>
-        <transform><constant>Bye World</constant></transform>
-    </route>
- 
-</camelContext>
-----
-
-[[DynamicRouter-DynamicRouterannotation]]
-== @DynamicRouter annotation
-
-You can also use the `@DynamicRouter` annotation. The `route` method would
-then be invoked repeatedly as the message is processed dynamically. The
-idea is to return the next endpoint uri where to go. Return `null` to
-indicate the end. You can return multiple endpoints if you like, just as
-the Routing Slip, where each endpoint is
-separated by a delimiter.
-
-[source,java]
-----
-public class MyDynamicRouter {
-
-    @Consume(uri = "activemq:foo")
-    @DynamicRouter
-    public String route(@XPath("/customer/id") String customerId, @Header("Location") String location, Document body) {
-        // query a database to find the best match of the endpoint based on the input parameteres
-        // return the next endpoint uri, where to go. Return null to indicate the end.
-    }
-}
-----
-
-In the above we can use the
-Parameter Binding Annotations
-to bind different parts of the Message to method
-parameters or use an Expression such as using
-xref:components::xpath-language.adoc[XPath] or xref:components::xpath-language.adoc[XQuery].
-
-The method can be invoked in a number of ways as described in the
-Bean Integration such as
-
-* POJO Producing
-* Spring Remoting
-* xref:components::bean-component.adoc[Bean] component
-
diff --git a/docs/user-manual/modules/ROOT/pages/exception-clause.adoc b/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
index 3526fed..c580245 100644
--- a/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
+++ b/docs/user-manual/modules/ROOT/pages/exception-clause.adoc
@@ -417,7 +417,7 @@ message instead of the fixed text `Sorry`:
 
 /camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandleAndTransformTest.java
 
-And we can use the xref:languages:simple-language.adoc[Simple] language to set a readable error
+And we can use the xref:components:languages:simple-language.adoc[Simple] language to set a readable error
 message with the caused exception message:
 
 /camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionHandleAndTransformTest.java
diff --git a/docs/user-manual/modules/ROOT/pages/expression.adoc b/docs/user-manual/modules/ROOT/pages/expression.adoc
index b0bfc3f..e0b5bc3 100644
--- a/docs/user-manual/modules/ROOT/pages/expression.adoc
+++ b/docs/user-manual/modules/ROOT/pages/expression.adoc
@@ -68,24 +68,24 @@ public interface Predicate {
 
 The following languages are supported out of the box
 
-* xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:languages:constant-language.adoc[Constant]
-* xref:languages:header-language.adoc[Header]
-* xref:components::jsonpath-language.adoc[JSonPath]
+* xref:components:languages:bean-language.adoc[Bean Language] for using Java for expressions
+* xref:components:languages:constant-language.adoc[Constant]
+* xref:components:languages:header-language.adoc[Header]
+* xref:components:languages:jsonpath-language.adoc[JSonPath]
 * xref:components::mvel-component.adoc[Mvel]
-* xref:components::ognl-language.adoc[OGNL]
-* xref:languages:ref-language.adoc[Ref Language]
+* xref:components:languages:ognl-language.adoc[OGNL]
+* xref:components:languages:ref-language.adoc[Ref Language]
 * ExchangeProperty / Property
 * Scripting Languages such as
 ** BeanShell
 ** JavaScript
-** xref:components::groovy-language.adoc[Groovy]
-* xref:languages:simple-language.adoc[Simple]
-** xref:languages:file-language.adoc[File Language]
-* xref:components::spel-language.adoc[Spring Expression Language]
+** xref:components:languages:groovy-language.adoc[Groovy]
+* xref:components:languages:simple-language.adoc[Simple]
+** xref:components:languages:file-language.adoc[File Language]
+* xref:components:languages:spel-language.adoc[Spring Expression Language]
 * xref:components::sql-component.adoc[SQL]
 * Tokenizer
-* xref:components::xpath-language.adoc[XPath]
+* xref:components:languages:xpath-language.adoc[XPath]
 * xref:components::xquery-component.adoc[XQuery]
 * https://github.com/camel-extra/camel-extra/blob/master/components/camel-vtdxml/src/main/docs/vtdxml-component.adoc[VTD-XML]
 
@@ -106,11 +106,11 @@ wish to use.
 
 |Scripting Languages such as
 BeanShell, JavaScript,
-xref:components::groovy-language.adoc[Groovy] |
+xref:components:languages:groovy-language.adoc[Groovy] |
 
 |xref:components::sql-component.adoc[SQL] |
 
-|xref:components::xpath-language.adoc[XPath] |https://github.com/apache/camel/blob/master/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java[org.apache.camel.builder.xml.XPathBuilder]
+|xref:components:languages:xpath-language.adoc[XPath] |https://github.com/apache/camel/blob/master/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java[org.apache.camel.builder.xml.XPathBuilder]
 
 |xref:components::xquery-component.adoc[XQuery] |https://github.com/apache/camel/blob/master/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java[org.apache.camel.builder.saxon.XQueryBuilder]
 |=======================================================================
diff --git a/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-look-up-beans-and-endpoints.adoc b/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-look-up-beans-and-endpoints.adoc
index 6f40469..aaceedb 100644
--- a/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-look-up-beans-and-endpoints.adoc
+++ b/docs/user-manual/modules/ROOT/pages/faq/how-does-camel-look-up-beans-and-endpoints.adoc
@@ -3,7 +3,7 @@
 
 There are many times using Camel that a name is used for a bean such as
 using the xref:components::bean-component.adoc[Bean] endpoint or using the
-xref:components::bean-language.adoc[Bean Language] to create a
+xref:components:languages:bean-language.adoc[Bean Language] to create a
 xref:expression.adoc[Expression] or xref:predicate.adoc[Predicate] or
 referring to any xref:component.adoc[Component] or
 xref:endpoint.adoc[Endpoint].
@@ -20,4 +20,4 @@ camel-spring do.
 So you can just define beans, components or endpoints in your
 xref:registry.adoc[Registry] implementation then you can refer to them
 by name in the xref:endpoint.adoc[Endpoint] URIs or xref:components::bean-component.adoc[Bean]
-endpoints or xref:components::bean-language.adoc[Bean Language] expressions.
+endpoints or xref:components:languages:bean-language.adoc[Bean Language] expressions.
diff --git a/docs/user-manual/modules/ROOT/pages/index.adoc b/docs/user-manual/modules/ROOT/pages/index.adoc
index 0859151..3eefe8b 100644
--- a/docs/user-manual/modules/ROOT/pages/index.adoc
+++ b/docs/user-manual/modules/ROOT/pages/index.adoc
@@ -505,21 +505,21 @@ camel routes without them knowing
 // <!-- languages: START -->
 
 * Expression Languages
-** xref:components::bean-language.adoc[Bean method]
-** xref:languages:constant-language.adoc[Constant]
-** xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
-** xref:languages:file-language.adoc[File]
-** xref:components::groovy-language.adoc[Groovy]
-** xref:languages:header-language.adoc[Header]
-** xref:components::hl7terser-language.adoc[HL7 Terser]
-** xref:components::mvel-language.adoc[MVEL]
-** xref:components::ognl-language.adoc[OGNL]
-** xref:languages:ref-language.adoc[Ref]
-** xref:languages:simple-language.adoc[Simple]
-** xref:components::spel-language.adoc[SpEL]
-** xref:languages:tokenize-language.adoc[Tokenize]
-** xref:components::xpath-language.adoc[XPath]
-** xref:components::xquery-language.adoc[XQuery]
+** xref:components:languages:bean-language.adoc[Bean method]
+** xref:components:languages:constant-language.adoc[Constant]
+** xref:components:languages:exchangeProperty-language.adoc[ExchangeProperty]
+** xref:components:languages:file-language.adoc[File]
+** xref:components:languages:groovy-language.adoc[Groovy]
+** xref:components:languages:header-language.adoc[Header]
+** xref:components:languages:hl7terser-language.adoc[HL7 Terser]
+** xref:components:languages:mvel-language.adoc[MVEL]
+** xref:components:languages:ognl-language.adoc[OGNL]
+** xref:components:languages:ref-language.adoc[Ref]
+** xref:components:languages:simple-language.adoc[Simple]
+** xref:components:languages:spel-language.adoc[SpEL]
+** xref:components:languages:tokenize-language.adoc[Tokenize]
+** xref:components:languages:xpath-language.adoc[XPath]
+** xref:components:languages:xquery-language.adoc[XQuery]
 
 // <!-- languages: END -->
 
diff --git a/docs/user-manual/modules/ROOT/pages/intercept.adoc b/docs/user-manual/modules/ROOT/pages/intercept.adoc
index af1926e..aa805f4 100644
--- a/docs/user-manual/modules/ROOT/pages/intercept.adoc
+++ b/docs/user-manual/modules/ROOT/pages/intercept.adoc
@@ -184,7 +184,7 @@ Intercept endpoint is of course also available using Spring DSL.
 
 We start with the first example from above in Spring DSL:
 
-And the 2nd. Notice how we can leverage the xref:languages:simple-language.adoc[Simple]
+And the 2nd. Notice how we can leverage the xref:components:languages:simple-language.adoc[Simple]
 language for the Predicate:
 
 And the 3rd with the `skip`, notice skip is set with the
diff --git a/docs/user-manual/modules/ROOT/pages/languages.adoc b/docs/user-manual/modules/ROOT/pages/languages.adoc
index fe0466a..e1cfcfe 100644
--- a/docs/user-manual/modules/ROOT/pages/languages.adoc
+++ b/docs/user-manual/modules/ROOT/pages/languages.adoc
@@ -19,22 +19,22 @@ For more information, see xref:predicate.adoc[Compound Predicates].
 
 == The following is the list of currently supported languages:
 
-* xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:languages:constant-language.adoc[Constant]
-* xref:languages:header-language.adoc[Header]
-* xref:components::jsonpath-language.adoc[JSonPath]
-* xref:components::mvel-language.adoc[Mvel]
-* xref:components::ognl-language.adoc[OGNL]
-* xref:languages:ref-language.adoc[Ref Language]
-* xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
+* xref:components:languages:bean-language.adoc[Bean Language] for using Java for expressions
+* xref:components:languages:constant-language.adoc[Constant]
+* xref:components:languages:header-language.adoc[Header]
+* xref:components:languages:jsonpath-language.adoc[JSonPath]
+* xref:components:languages:mvel-language.adoc[Mvel]
+* xref:components:languages:ognl-language.adoc[OGNL]
+* xref:components:languages:ref-language.adoc[Ref Language]
+* xref:components:languages:exchangeProperty-language.adoc[ExchangeProperty]
 * xref:scripting-languages.adoc[Scripting Languages] such as:
-** xref:components::groovy-language.adoc[Groovy]
-* xref:languages:simple-language.adoc[Simple]
-** xref:languages:file-language.adoc[File Language]
-* xref:components::spel-language.adoc[Spring Expression Language]
-* xref:languages:tokenize-language.adoc[Tokenizer]
-* xref:components::xpath-language.adoc[XPath]
-* xref:components::xquery-language.adoc[XQuery]
+** xref:components:languages:groovy-language.adoc[Groovy]
+* xref:components:languages:simple-language.adoc[Simple]
+** xref:components:languages:file-language.adoc[File Language]
+* xref:components:languages:spel-language.adoc[Spring Expression Language]
+* xref:components:languages:tokenize-language.adoc[Tokenizer]
+* xref:components:languages:xpath-language.adoc[XPath]
+* xref:components:languages:xquery-language.adoc[XQuery]
 * https://github.com/camel-extra/camel-extra/blob/master/components/camel-vtdxml/src/main/docs/vtdxml-component.adoc[VTD-XML]
 
 Most of these languages are also supported used as
diff --git a/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc b/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
index c1f9fd0..793412d 100644
--- a/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
+++ b/docs/user-manual/modules/ROOT/pages/parameter-binding-annotations.adoc
@@ -151,31 +151,31 @@ any of these annotations:
 |=======================================================================
 |Annotation |Description
 |`org.apache.camel.language.Bean`
-|Inject a xref:components::bean-language.adoc[Bean] expression
+|Inject a xref:components:languages:bean-language.adoc[Bean] expression
 
 |`org.apache.camel.language.Constant`
-|Inject a xref:languages:constant-language.adoc[Constant] expression
+|Inject a xref:components:languages:constant-language.adoc[Constant] expression
 
 |`org.apache.camel.builder.script.Groovy`
-|Inject a  xref:components::groovy-language.adoc[Groovy] expression
+|Inject a  xref:components:languages:groovy-language.adoc[Groovy] expression
 
 |`org.apache.camel.Header`
-|Inject a xref:languages:header-language.adoc[Header] expression
+|Inject a xref:components:languages:header-language.adoc[Header] expression
 
 |`org.apache.camel.language.mvel.MVEL`
-|Inject a xref:components::mvel-language.adoc[MVEL] expression
+|Inject a xref:components:languages:mvel-language.adoc[MVEL] expression
 
 |`org.apache.camel.language.ognl.OGNL`
-|Inject an xref:components::ognl-language.adoc[OGNL] expression
+|Inject an xref:components:languages:ognl-language.adoc[OGNL] expression
 
 |`org.apache.camel.language.Simple`
-|Inject an xref:languages:simple-language.adoc[Simple] expression
+|Inject an xref:components:languages:simple-language.adoc[Simple] expression
 
 |`org.apache.camel.language.XPath`
-|Inject an xref:components::xpath-language.adoc[XPath] expression
+|Inject an xref:components:languages:xpath-language.adoc[XPath] expression
 
 |`org.apache.camel.component.xquery.XQuery`
-|Inject an xref:components::xquery-language.adoc[XQuery] expression
+|Inject an xref:components:languages:xquery-language.adoc[XQuery] expression
 |=======================================================================
 
 [[ParameterBindingAnnotations-Example:]]
@@ -258,11 +258,11 @@ Spring xref:registry.adoc[Registry]:
 ----
 
 [[ParameterBindingAnnotations-Exampleusing]]
-==== Example using xref:components::groovy-language.adoc[Groovy]
+==== Example using xref:components:languages:groovy-language.adoc[Groovy]
 
 In this example we have an Exchange that has a User object stored in the
 in header. This User object has methods to get some user information. We
-want to use xref:components::groovy-language.adoc[Groovy] to inject an expression that
+want to use xref:components:languages:groovy-language.adoc[Groovy] to inject an expression that
 extracts and concats the fullname of the user into the fullName
 parameter.
 
diff --git a/docs/user-manual/modules/ROOT/pages/predicate.adoc b/docs/user-manual/modules/ROOT/pages/predicate.adoc
index 50dc481..d70cbf1 100644
--- a/docs/user-manual/modules/ROOT/pages/predicate.adoc
+++ b/docs/user-manual/modules/ROOT/pages/predicate.adoc
@@ -152,22 +152,22 @@ Camel supports extensible Predicates using multiple
 xref:languages.adoc[Languages]; the following languages are supported
 out of the box
 
-* xref:components::bean-language.adoc[Bean Language] for using Java for expressions
-* xref:languages:constant-language.adoc[Constant]
-* xref:languages:header-language.adoc[Header]
-* xref:components::jsonpath-language.adoc[JSonPath]
-* xref:components::mvel-language.adoc[Mvel]
-* xref:components::ognl-language.adoc[OGNL]
-* xref:languages:ref-language.adoc[Ref Language]
-* xref:languages:exchangeProperty-language.adoc[ExchangeProperty]
+* xref:components:languages:bean-language.adoc[Bean Language] for using Java for expressions
+* xref:components:languages:constant-language.adoc[Constant]
+* xref:components:languages:header-language.adoc[Header]
+* xref:components:languages:jsonpath-language.adoc[JSonPath]
+* xref:components:languages:mvel-language.adoc[Mvel]
+* xref:components:languages:ognl-language.adoc[OGNL]
+* xref:components:languages:ref-language.adoc[Ref Language]
+* xref:components:languages:exchangeProperty-language.adoc[ExchangeProperty]
 * xref:scripting-languages.adoc[Scripting Languages] such as
-** xref:components::groovy-language.adoc[Groovy]
-* xref:languages:simple-language.adoc[Simple]
-** xref:languages:file-language.adoc[File Language]
-* xref:components::spel-language.adoc[Spring Expression Language]
-* xref:languages:tokenize-language.adoc[Tokenizer]
-* xref:components::xpath-language.adoc[XPath]
-* xref:components::xquery-language.adoc[XQuery]
+** xref:components:languages:groovy-language.adoc[Groovy]
+* xref:components:languages:simple-language.adoc[Simple]
+** xref:components:languages:file-language.adoc[File Language]
+* xref:components:languages:spel-language.adoc[Spring Expression Language]
+* xref:components:languages:tokenize-language.adoc[Tokenizer]
+* xref:components:languages:xpath-language.adoc[XPath]
+* xref:components:languages:xquery-language.adoc[XQuery]
 * https://github.com/camel-extra/camel-extra/blob/master/components/camel-vtdxml/src/main/docs/vtdxml-component.adoc[VTD-XML]
 
 Most of these languages is also supported used as
@@ -192,12 +192,12 @@ wish to use.
 [width="100%",cols="50%,50%",options="header",]
 |=======================================================================
 |Language(s) |Builder class to import
-|xref:scripting-languages.adoc[Scripting Languages] such as xref:components::groovy-language.adoc[Groovy]
+|xref:scripting-languages.adoc[Scripting Languages] such as xref:components:languages:groovy-language.adoc[Groovy]
 
-|xref:components::xpath-language.adoc[XPath]
+|xref:components:languages:xpath-language.adoc[XPath]
 |https://github.com/apache/camel/blob/master/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathBuilder.java[org.apache.camel.builder.xml.XPathBuilder]
 
-|xref:components::xquery-language.adoc[XQuery]
+|xref:components:languages:xquery-language.adoc[XQuery]
 |https://github.com/apache/camel/blob/master/components/camel-saxon/src/main/java/org/apache/camel/component/xquery/XQueryBuilder.java[org.apache.camel.builder.saxon.XQueryBuilder]
 |=======================================================================
 
diff --git a/docs/user-manual/modules/ROOT/pages/properties-component.adoc b/docs/user-manual/modules/ROOT/pages/properties-component.adoc
deleted file mode 100644
index 9e1a50f..0000000
--- a/docs/user-manual/modules/ROOT/pages/properties-component.adoc
+++ /dev/null
@@ -1,842 +0,0 @@
-[[properties-component]]
-= Properties Component
-:page-source: core/camel-base/src/main/docs/properties-component.adoc
-
-*Since Camel 2.3*
-
-The properties component is used for property placeholders in your Camel application, such as endpoint URIs.
-It is *not* a regular Camel component with producer and consumer for routing messages. However for historical
-reasons it was named `PropertiesComponent` and this name is commonly known and therfore we keep using it.
-
-== Spring Boot Auto-Configuration
-
-The component supports 10 options, which are listed below.
-
-
-
-[width="100%",cols="2,5,^1,2",options="header"]
-|===
-| Name | Description | Default | Type
-| *camel.component.properties.auto-discover-properties-sources* | Whether to automatically discovery instances of PropertiesSource from registry and service factory. | true | Boolean
-| *camel.component.properties.default-fallback-enabled* | If false, the component does not attempt to find a default for the key by looking after the colon separator. | true | Boolean
-| *camel.component.properties.encoding* | Encoding to use when loading properties file from the file system or classpath. If no encoding has been set, then the properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by java.util.Properties#load(java.io.InputStream) |  | String
-| *camel.component.properties.environment-variable-mode* | Sets the OS environment variables mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use OS environment variables if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | Integer
-| *camel.component.properties.ignore-missing-location* | Whether to silently ignore if a location cannot be located, such as a properties file not found. | false | Boolean
-| *camel.component.properties.initial-properties* | Sets initial properties which will be used before any locations are resolved. The option is a java.util.Properties type. |  | String
-| *camel.component.properties.location* | A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option. |  | String
-| *camel.component.properties.override-properties* | Sets a special list of override properties that take precedence and will use first, if a property exist. The option is a java.util.Properties type. |  | String
-| *camel.component.properties.properties-parser* | To use a custom PropertiesParser. The option is a org.apache.camel.component.properties.PropertiesParser type. |  | String
-| *camel.component.properties.system-properties-mode* | Sets the JVM system property mode (0 = never, 1 = fallback, 2 = override). The default mode (override) is to use system properties if present, and override any existing properties. OS environment variable mode is checked before JVM system property mode | 2 | Integer
-|===
-
-[TIP]
-**Resolving property from Java code** +
-You can use the method `resolvePropertyPlaceholders` on the
-`CamelContext` to resolve a property from any Java code.
-
-== Using PropertyPlaceholder
-
-Camel now provides a new `PropertiesComponent` in *camel-core* which
-allows you to use property placeholders when defining Camel
-Endpoint URIs.
-
-This works much like you would do if using Spring's
-`<property-placeholder>` tag. However Spring have a limitation which
-prevents 3rd party frameworks to leverage Spring property placeholders
-to the fullest. See more at
-xref:manual::faq/how-do-i-use-spring-property-placeholder-with-camel-xml.adoc[How do
-I use Spring Property Placeholder with Camel XML].
-
-[TIP]
-**Bridging Spring and Camel property placeholders** +
-You can bridge the Spring property placeholder
-with Camel, see further below for more details.
-
-The property placeholder is generally in use when doing:
-
-* lookup or creating endpoints
-* lookup of beans in the Registry
-* additional supported in Spring XML (see below in examples)
-* using Blueprint PropertyPlaceholder with Camel
-xref:properties-component.adoc[Properties] component
-* using `@PropertyInject` to inject a property in a POJO
-* Using default value if a property does not exists
-* Include out of the box functions, to lookup property
-values from OS environment variables, JVM system properties, or the
-service idiom.
-* Using custom functions, which can be plugged into the
-property component.
-
-== Syntax
-
-The syntax to use Camel's property placeholder is to use `{\{key\}}` for
-example `{{file.uri}}` where `file.uri` is the property key.
-
-You can use property placeholders in parts of the endpoint URI's which
-for example you can use placeholders for parameters in the URIs.
-
-You can specify a default value to use if
-a property with the key does not exists, eg `file.url:/some/path` where
-the default value is the text after the colon (eg /some/path).
-
-[NOTE]
-====
-Do not use colon in the property key. The colon is used as a separator
-token when you are providing a default value.
-====
-
-== Defining location
-
-The properties component need to know a location(s) where to resolve the
-properties. You can define 1 to many locations. If you define the
-location in a single String property you can separate multiple locations
-with comma such as:
-
-[source,java]
-----
-pc.setLocation("com/mycompany/myprop.properties,com/mycompany/other.properties");
-----
-
-You can set which location can be discarded if missing by by setting the ``optional`` attribute, which is false by default, i.e:
-
-[source,java]
-----
-pc.setLocations(
-    "com/mycompany/override.properties;optional=true"
-    "com/mycompany/defaults.properties");
-----
-
-== Using system and environment variables in locations
-
-The location now supports using placeholders for JVM system properties
-and OS environments variables.
-
-For example:
-
-[source]
-----
-location=file:${karaf.home}/etc/foo.properties
-----
-
-In the location above we defined a location using the file scheme using
-the JVM system property with key `karaf.home`.
-
-To use an OS environment variable instead you would have to prefix with
-env:
-
-[source]
-----
-location=file:${env:APP_HOME}/etc/foo.properties
-----
-
-Where `APP_HOME` is an OS environment.
-
-[NOTE]
-====
-Some OS'es (such as Linux) do not support dashes in environment variable names,
-so here we are using `APP_HOME`. But if you specify `APP-HOME` then Camel 3 will automatic lookup
-the value as `APP_HOME` (with underscore) as fallback.
-====
-
-You can have multiple placeholders in the same location, such as:
-
-[source]
-----
-location=file:${env:APP_HOME}/etc/${prop.name}.properties
-----
-
-== Configuring in Java DSL
-
-You have to create and register the `PropertiesComponent` under the name
-`properties` such as:
-
-[source,java]
-----
-PropertiesComponent pc = camelContext.getPropertiesComponent();
-pc.setLocation("classpath:com/mycompany/myprop.properties");
-----
-
-== Configuring in Spring XML
-
-Spring XML offers two variations to configure. You can define a spring
-bean as a `PropertiesComponent` which resembles the way done in Java
-DSL. Or you can use the `<propertyPlaceholder>` tag.
-
-[source,xml]
-----
-<bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
-    <property name="location" value="classpath:com/mycompany/myprop.properties"/>
-</bean>
-----
-
-Using the `<propertyPlaceholder>` tag makes the configuration a bit more
-fresh such as:
-
-[source,xml]
-----
-<camelContext ...>
-   <propertyPlaceholder id="properties" location="com/mycompany/myprop.properties"/>
-</camelContext>
-----
-
-Setting the properties location through the location tag works just fine but sometime you have a number of resources to take into account and starting from *Camel 2.19.0* you can set the properties location with a dedicated propertiesLocation:
-
-[source,xml]
-----
-<camelContext ...>
-  <propertyPlaceholder id="myPropertyPlaceholder">
-    <propertiesLocation
-      resolver = "classpath"
-      path     = "com/my/company/something/my-properties-1.properties"
-      optional = "false"/>
-    <propertiesLocation
-      resolver = "classpath"
-      path     = "com/my/company/something/my-properties-2.properties"
-      optional = "false"/>
-    <propertiesLocation
-      resolver = "file"
-      path     = "${karaf.home}/etc/my-override.properties"
-      optional = "true"/>
-   </propertyPlaceholder>
-</camelContext>
-----
-
-[TIP]
-**Specifying the cache option inside XML** +
-Camel supports specifying a value for the cache option both
-inside the Spring as well as the Blueprint XML.
-
-== Using a Properties from the Registry
-
-For example in OSGi you may want to expose a service which returns the
-properties as a `java.util.Properties` object.
-
-Then you could setup the xref:properties-component.adoc[Properties] component as
-follows:
-
-[source,xml]
-----
- <propertyPlaceholder id="properties" location="ref:myProperties"/>
-----
-
-Where `myProperties` is the id to use for lookup in the OSGi registry.
-Notice we use the `ref:` prefix to tell Camel that it should lookup the
-properties for the Registry.
-
-== Examples using properties component
-
-When using property placeholders in the endpoint URIs you can either use
-the `properties:` component or define the placeholders directly in the
-URI. We will show example of both cases, starting with the former.
-
-[source,java]
-----
-// properties
-cool.end=mock:result
-
-// route
-from("direct:start").to("{{cool.end}}");
-----
-
-You can also use placeholders as a part of the endpoint uri:
-
-[source,java]
-----
-// properties
-cool.foo=result
-
-// route
-from("direct:start").to("mock:{{cool.foo}}");
-----
-
-In the example above the to endpoint will be resolved to `mock:result`.
-
-You can also have properties with refer to each other such as:
-
-[source,java]
-----
-// properties
-cool.foo=result
-cool.concat=mock:{{cool.foo}}
-
-// route
-from("direct:start").to("mock:{{cool.concat}}");
-----
-
-Notice how `cool.concat` refer to another property.
-
-And you can use placeholders several times:
-
-[source,java]
-----
-// properties
-cool.start=direct:start
-cool.showid=true
-cool.result=result
-
-// route
-from("{{cool.start}}")
-    .to("log:{{cool.start}}?showBodyType=false&showExchangeId={{cool.showid}}")
-    .to("mock:{{cool.result}}");
-----
-
-You can also your property placeholders when using
-ProducerTemplate for example:
-
-[source,java]
-----
-template.sendBody("{{cool.start}}", "Hello World");
-----
-
-== Example with xref:manual:languages:simple-language.adoc[Simple] language
-
-The xref:manual:languages:simple-language.adoc[Simple] language now also support using property
-placeholders, for example in the route below:
-
-[source,java]
-----
-// properties
-cheese.quote=Camel rocks
-
-// route
-from("direct:start")
-    .transform().simple("Hi ${body} do you think ${properties:cheese.quote}?");
-----
-
-== Additional property placeholder supported in Spring XML
-
-The property placeholders is also supported in many of the Camel Spring
-XML tags such as
-`<package>, <packageScan>, <contextScan>, <jmxAgent>, <endpoint>, <routeBuilder>, <proxy>`
-and the others.
-
-The example below has property placeholder in the `<jmxAgent>` tag:
-
-You can also define property placeholders in the various attributes on
-the `<camelContext>` tag such as `trace` as shown here:
-
-== Using JVM system properties or Environment variables as override or fallback values
-
-The properties components supports using JVM system properties and also OS environment variables
-as values which can either be used as override or fallback values.
-
-The default mode is that both of them are in override mode, and they are check in the following order:
-
-1. OS environment variable (override mode)
-2. JVM system property  (override mode)
-3. Property files and other locations
-4. OS environment variable (fallback mode)
-5. JVM system property  (fallback mode)
-
-The check stops at first found property value for the key.
-
-You can control these modes using the `systemPropertiesMode` and `environmentVariableMode`
-options on the properties component.
-
-== Using property placeholders for any kind of attribute in the XML DSL
-
-In the example below we use the `prop` prefix for the namespace
-camel.apache.org/schema/placeholder by which we can use the
-`prop` prefix in the attributes in the XML DSLs. Notice how we use that
-in the Multicast to indicate that the option
-`stopOnException` should be the value of the placeholder with the key
-"stop".
-
-In our properties file we have the value defined as
-
-[source]
-----
-stop=true
-----
-
-== Using Blueprint property placeholder with Camel routes
-
-Camel supports Blueprint
-which also offers a property placeholder service. Camel supports
-convention over configuration, so all you have to do is to define the
-OSGi Blueprint property placeholder in the XML file as shown below:
-
-[source,xml]
-----
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xsi:schemaLocation="
-           http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
-
-    <!-- OSGI blueprint property placeholder -->
-    <cm:property-placeholder id="myblueprint.placeholder" persistent-id="camel.blueprint">
-        <!-- list some properties as needed -->
-        <cm:default-properties>
-            <cm:property name="result" value="mock:result"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
-        <!-- in the route we can use {{ }} placeholders which will lookup in blueprint
-             as Camel will auto detect the OSGi blueprint property placeholder and use it -->
-        <route>
-            <from uri="direct:start"/>
-            <to uri="mock:foo"/>
-            <to uri="{{result}}"/>
-        </route>
-    </camelContext>
-</blueprint>
-----
-
-=== Using OSGi blueprint property placeholders in Camel routes
-
-By default Camel detects and uses OSGi blueprint property placeholder
-service. You can disable this by setting the attribute
-`useBlueprintPropertyResolver` to false on the `<camelContext>`
-definition.
-
-=== About placeholder syntax
-
-Notice how we can use the Camel syntax for placeholders `{{` and `}}` in the
-Camel route, which will lookup the value from OSGi blueprint.
-
-The blueprint syntax for placeholders is `${ }`. So outside the
-`<camelContext>` you must use the `${ }` syntax. Where as inside
-`<camelContext>` you must use `{{` and `}}` syntax.
-
-OSGi blueprint allows you to configure the syntax, so you can actually
-align those if you want.
-
-You can also explicit refer to a specific OSGi blueprint property
-placeholder by its id. For that you need to use the Camel's
-`<propertyPlaceholder>` as shown in the example below:
-
-[source,xml]
-----
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
-           xsi:schemaLocation="
-           http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
-
-    <!-- OSGI blueprint property placeholder -->
-    <cm:property-placeholder id="myblueprint.placeholder" persistent-id="camel.blueprint">
-        <!-- list some properties as needed -->
-        <cm:default-properties>
-            <cm:property name="prefix.result" value="mock:result"/>
-        </cm:default-properties>
-    </cm:property-placeholder>
-
-    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
-        <!-- using Camel properties component and refer to the blueprint property placeholder by its id -->
-        <propertyPlaceholder id="properties" location="blueprint:myblueprint.placeholder"/>
-
-        <!-- in the route we can use {{ }} placeholders which will lookup in blueprint -->
-        <route>
-            <from uri="direct:start"/>
-            <to uri="mock:foo"/>
-            <to uri="{{prefix.result}}"/>
-        </route>
-    </camelContext>
-</blueprint>
-----
-
-
-== Explicit referring to a OSGi blueprint placeholder in Camel
-
-Notice how we use the `blueprint` scheme to refer to the OSGi blueprint
-placeholder by its id. This allows you to mix and match, for example you
-can also have additional schemes in the location. For example to load a
-file from the classpath you can do:
-
-[source]
-----
-location="blueprint:myblueprint.placeholder,classpath:myproperties.properties"
-----
-
-Each location is separated by comma.
-
-== Overriding Blueprint property placeholders outside CamelContext
-
-When using Blueprint property placeholder in the Blueprint XML file, you
-can declare the properties directly in the XML file as shown below:
-
-Notice that we have a `<bean>` which refers to one of the properties. And
-in the Camel route we refer to the other using the `{{` and `}}` notation.
-
-Now if you want to override these Blueprint properties from an unit
-test, you can do this as shown below:
-
-To do this we override and implement the
-`useOverridePropertiesWithConfigAdmin` method. We can then put the
-properties we want to override on the given props parameter. And the
-return value *must* be the `persistence-id` of the
-`<cm:property-placeholder>` tag, which you define in the blueprint XML
-file.
-
-== Using .cfg or .properties file for Blueprint property placeholders
-
-When using Blueprint property placeholder in the Blueprint XML file, you
-can declare the properties in a `.properties` or `.cfg` file. If you use
-Apache ServieMix / Karaf then this container has a convention that it
-loads the properties from a file in the etc directory with the naming
-`etc/pid.cfg`, where `pid` is the `persistence-id`.
-
-For example in the blueprint XML file we have the
-`persistence-id="stuff"`, which mean it will load the configuration file
-as `etc/stuff.cfg`.
-
-Now if you want to unit test this blueprint XML file, then you can
-override the `loadConfigAdminConfigurationFile` and tell Camel which
-file to load as shown below:
-
-Notice that this method requires to return a `String[]` with 2 values. The
-1st value is the path for the configuration file to load.
-The 2nd value is the `persistence-id` of the `<cm:property-placeholder>`
-tag.
-
-The `stuff.cfg` file is just a plain properties file with the property
-placeholders such as:
-
-[source]
-----
-== this is a comment
-greeting=Bye
-----
-
-== Using .cfg file and overriding properties for Blueprint property placeholders
-
-You can do both as well. Here is a complete example. First we have the
-Blueprint XML file:
-
-And in the unit test class we do as follows:
-
-And the `etc/stuff.cfg` configuration file contains
-
-[source]
-----
-greeting=Bye
-echo=Yay
-destination=mock:result
-----
-
-== Bridging Spring and Camel property placeholders
-
-The Spring Framework does not allow 3rd party frameworks such as Apache
-Camel to seamless hook into the Spring property placeholder mechanism.
-However you can easily bridge Spring and Camel by declaring a Spring
-bean with the type
-`org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer`, which
-is a Spring
-`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer`
-type.
-
-To bridge Spring and Camel you must define a single bean as shown below:
-
-*Bridging Spring and Camel property placeholders*
-
-You *must not* use the spring <context:property-placeholder> namespace
-at the same time; this is not possible.
-
-After declaring this bean, you can define property placeholders using
-both the Spring style, and the Camel style within the <camelContext> tag
-as shown below:
-
-*Using bridge property placeholders*
-
-Notice how the hello bean is using pure Spring property placeholders
-using the `${ }` notation. And in the Camel routes we use the Camel
-placeholder notation with `{{` and `}}`.
-
-== Clashing Spring property placeholders with Camels Simple language
-
-Take notice when using Spring bridging placeholder then the spring `${ }`
-syntax clashes with the xref:manual:languages:simple-language.adoc[Simple] in Camel, and therefore
-take care. For example:
-
-[source,xml]
-----
-<setHeader name="Exchange.FILE_NAME">
-  <simple>{{file.rootdir}}/${in.header.CamelFileName}</simple>
-</setHeader>
-----
-
-clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the xref:manual:languages:simple-language.adoc[Simple] language in Camel.
-
-[source,xml]
-----
-<setHeader name="Exchange.FILE_NAME">
-  <simple>{{file.rootdir}}/$simple{in.header.CamelFileName}</simple>
-</setHeader>
-----
-
-An alternative is to configure the `PropertyPlaceholderConfigurer` with
-`ignoreUnresolvablePlaceholders` option to `true`.
-
-== Overriding properties from Camel test kit
-
-When Testing with Camel and using the
-xref:properties-component.adoc[Properties] component, you may want to be able to
-provide the properties to be used from directly within the unit test
-source code. +
-Camel test kits, eg `CamelTestSupport` class offers the following methods
-
-* `useOverridePropertiesWithPropertiesComponent`
-* `ignoreMissingLocationWithPropertiesComponent`
-
-So for example in your unit test classes, you can override the
-`useOverridePropertiesWithPropertiesComponent` method and return a
-`java.util.Properties` that contains the properties which should be
-preferred to be used.
-
-=== Providing properties from within unit test source
-
-This can be done from any of the Camel Test kits, such as camel-test,
-camel-test-spring, and camel-test-blueprint.
-
-The `ignoreMissingLocationWithPropertiesComponent` can be used to
-instruct Camel to ignore any locations which was not discoverable, for
-example if you run the unit test, in an environment that does not have
-access to the location of the properties.
-
-== Using @PropertyInject
-
-Camel allows to inject property placeholders in POJOs using the
-`@PropertyInject` annotation which can be set on fields and setter
-methods.
-
-For example you can use that with `RouteBuilder` classes, such as shown
-below:
-
-[source,java]
-----
-public class MyRouteBuilder extends RouteBuilder {
-
-    @PropertyInject("hello")
-    private String greeting;
-
-    @Override
-    public void configure() throws Exception {
-        from("direct:start")
-            .transform().constant(greeting)
-            .to("{{result}}");
-    }
-
-}
-----
-
-Notice we have annotated the greeting field with `@PropertyInject` and
-define it to use the key `"hello"`. Camel will then lookup the property
-with this key and inject its value, converted to a String type.
-
-You can also use multiple placeholders and text in the key, for example
-we can do:
-
-[source,java]
-----
-@PropertyInject("Hello {{name}} how are you?")
-private String greeting;
-----
-
-This will lookup the placeholder with they key `"name"`.
-
-You can also add a default value if the key does not exists, such as:
-
-[source,java]
-----
-@PropertyInject(value = "myTimeout", defaultValue = "5000")
-private int timeout;
-----
-
-== Using out of the box functions
-
-The xref:properties-component.adoc[Properties] component includes the following
-functions out of the box
-
-* `env` - A function to lookup the property from OS environment variables
-* `sys` - A function to lookup the property from Java JVM system
-properties
-* `service` - A function to lookup the property from OS environment
-variables using the service naming idiom
-* `service.name` - A function to lookup the
-property from OS environment variables using the service naming idiom
-returning the hostname part only
-* `service.port` - A function to lookup the
-property from OS environment variables using the service naming idiom
-returning the port part only
-
-As you can see these functions is intended to make it easy to lookup
-values from the environment. As they are provided out of the box, they
-can easily be used as shown below:
-
-[source,xml]
-----
-  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
-
-    <route>
-      <from uri="direct:start"/>
-      <to uri="{`{env:SOMENAME}`}"/>
-      <to uri="{`{sys:MyJvmPropertyName}`}"/>
-    </route>
-  </camelContext>
-----
-
-You can use default values as well, so if the property does not exists,
-you can define a default value as shown below, where the default value
-is a `log:foo` and `log:bar` value.
-
-[source,xml]
-----
-  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
-
-    <route>
-      <from uri="direct:start"/>
-      <to uri="{`{env:SOMENAME:log:foo}`}"/>
-      <to uri="{`{sys:MyJvmPropertyName:log:bar}`}"/>
-    </route>
-  </camelContext>
-----
-
- 
-
-The service function is for looking up a service which is defined using
-OS environment variables using the service naming idiom, to refer to a
-service location using `hostname : port`
-
-* __NAME__**_SERVICE_HOST**
-* __NAME__**_SERVICE_PORT**
-
-in other words the service uses `_SERVICE_HOST` and `_SERVICE_PORT` as
-prefix. So if the service is named FOO, then the OS environment
-variables should be set as
-
-[source]
-----
-export $FOO_SERVICE_HOST=myserver
-export $FOO_SERVICE_PORT=8888
-----
-
-For example if the FOO service a remote HTTP service, then we can refer
-to the service in the Camel endpoint uri, and use
-the HTTP component to make the HTTP call:
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/blueprint">
-  <route>
-    <from uri="direct:start"/>
-    <to uri="http://{`{service:FOO}`}/myapp"/>
-  </route>
-</camelContext>
-----
-
-And we can use default values if the service has not been defined, for
-example to call a service on localhost, maybe for unit testing etc
-
-[source,xml]
-----
-<camelContext xmlns="http://camel.apache.org/schema/blueprint">
-  <route>
-    <from uri="direct:start"/>
-    <to uri="http://{`{service:FOO:localhost:8080}`}/myapp"/>
-  </route>
-</camelContext>
-----
-
-== Using custom functions (advanced)
-
-The xref:properties-component.adoc[Properties] component allow to plugin 3rd party
-functions which can be used during parsing of the property placeholders.
-These functions are then able to do custom logic to resolve the
-placeholders, such as looking up in databases, do custom computations,
-or whatnot. The name of the function becomes the prefix used in the
-placeholder. This is best illustrated in the example code below
-
-[source,xml]
-----
-<bean id="beerFunction" class="MyBeerFunction"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/blueprint">
-  <propertyPlaceholder id="properties">
-    <propertiesFunction ref="beerFunction"/>
-  </propertyPlaceholder>
-
-  <route>
-    <from uri="direct:start"/>
-    <to uri="{`{beer:FOO}`}"/>
-    <to uri="{`{beer:BAR}`}"/>
-  </route>
-</camelContext>
-----
-
-[NOTE]
-====
-The location attribute (on propertyPlaceholder tag) is not mandatory
-====
-
-Here we have a Camel XML route where we have defined the
-`<propertyPlaceholder>` to use a custom function, which we refer to be the
-bean id - eg the `beerFunction`. As the beer function uses `"beer"` as its
-name, then the placeholder syntax can trigger the beer function by
-starting with `beer:value`.
-
-The implementation of the function is only two methods as shown below:
-
-[source,java]
-----
-public static final class MyBeerFunction implements PropertiesFunction {
-
-    @Override
-    public String getName() {
-        return "beer";
-    }
-
-    @Override
-    public String apply(String remainder) {
-        return "mock:" + remainder.toLowerCase();
-    }
-}
-----
-
-The function must implement
-the `org.apache.camel.component.properties.PropertiesFunction`
-interface. The method `getName` is  the name of the function, eg beer.
-And the `apply` method is where we implement the custom logic to do. As
-the sample code is from an unit test, it just returns a value to refer
-to a mock endpoint.
-
-To register a custom function from Java code is as shown below:
-
-[source,java]
-----
-PropertiesComponent pc = (org.apache.camel.componennt.properties.PropertiesComponent) context.getPropertiesComponent();
-pc.addFunction(new MyBeerFunction());
-----
- 
-
-== Using 3rd-party properties sources
-
-The properties component allows to plugin 3rd party sources to load and lookup properties via the `PropertySource`
-API from camel-api. For example the `camel-microprofile-config` component is implemented using this.
-The 3rd-party `PropertySource` can automatic be discoverd from classpath when Camel is starting up.
-This is done by include the file `META-INF/services/org/apache/camel/property-source-factory` file
-which refers to the fully qualified class name of the `PropertySource` implementation.
-See the `camel-microprofile-config` for an example.
-
-You can also register 3rd-part property sources via Java API
-
-[source,java]
-----
-PropertiesComponent pc = ...
-pc.addPropertySource(myPropertySource);
-----
-
-=== LoadablePropertySource
-
-A `PropertySource` can define that it supports loading all its properties from the source at once,
-for example from file system. This allows Camel properties component to load these properties at once
-during startup.
-
-=== PropertySource
-
-The regular `PropertySource` will lookup the property on-demand, for example to lookup
-values from a backend source such as a database or HashiCorp Vault etc.
-
-
diff --git a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
index 74d5c9f..f783f33 100644
--- a/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
+++ b/docs/user-manual/modules/ROOT/pages/rest-dsl.adoc
@@ -209,7 +209,7 @@ over xref:components::jms-component.adoc[JMS] where the queue name is dynamic de
 
 See more details at Message Endpoint about
 the dynamic to, and what syntax it supports. By default it uses
-the xref:languages:simple-language.adoc[Simple] language, but it has more power than so.
+the xref:components:languages:simple-language.adoc[Simple] language, but it has more power than so.
 
 == Embedding Camel routes
 
diff --git a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
index 36fe857..9694b70 100644
--- a/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
+++ b/docs/user-manual/modules/ROOT/pages/spring-remoting.adoc
@@ -351,9 +351,9 @@ the method option
 * The value is a numeric value such as `123` or `7`
 * The value is a String enclosed with either single or double quotes
 * The value is null which denotes a `null` value
-* It can be evaluated using the xref:languages:simple-language.adoc[Simple] language, which
+* It can be evaluated using the xref:components:languages:simple-language.adoc[Simple] language, which
 means you can use, e.g., body, header.foo and other
-xref:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
+xref:components:languages:simple-language.adoc[Simple] tokens. Notice the tokens must be enclosed with
 $\{ }.
 
 Any other value is consider to be a type declaration instead - see the
@@ -398,7 +398,7 @@ body as shown:
 .bean(OrderService.class, "doSomething(${body}, true)") 
 ----
 
-The syntax of the parameters is using the xref:languages:simple-language.adoc[Simple]
+The syntax of the parameters is using the xref:components:languages:simple-language.adoc[Simple]
 expression language so we have to use $\{ } placeholders in the body to
 refer to the message body.
 
@@ -434,7 +434,7 @@ first has the content 'World' (without quotes), and the 2nd has the
 value of 5. +
 Camel will automatically convert these values to the parameters' types.
 
-Having the power of the xref:languages:simple-language.adoc[Simple] language allows us to
+Having the power of the xref:components:languages:simple-language.adoc[Simple] language allows us to
 bind to message headers and other values such as:
 
 [source,syntaxhighlighter-pre]
@@ -442,7 +442,7 @@ bind to message headers and other values such as:
 .bean(OrderService.class, "doSomething(${body}, ${header.high})") 
 ----
 
-You can also use the OGNL support of the xref:languages:simple-language.adoc[Simple]
+You can also use the OGNL support of the xref:components:languages:simple-language.adoc[Simple]
 expression language. Now suppose the message body is an object which has
 a method named `asXml`. To invoke the `asXml` method we can do as
 follows:
diff --git a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
index 98823a8..2097961 100644
--- a/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
+++ b/docs/user-manual/modules/ROOT/pages/using-propertyplaceholder.adoc
@@ -293,9 +293,9 @@ template.sendBody("{{cool.start}}", "Hello World");
 
 
 [[UsingPropertyPlaceholder-Examplewithlanguage]]
-== Example with xref:languages:simple-language.adoc[Simple] language
+== Example with xref:components:languages:simple-language.adoc[Simple] language
 
-The xref:languages:simple-language.adoc[Simple] language now also support using property
+The xref:components:languages:simple-language.adoc[Simple] language now also support using property
 placeholders, for example in the route below:
 
 
@@ -308,7 +308,7 @@ cheese.quote=Camel rocks
     .transform().simple("Hi ${body} do you think ${properties:cheese.quote}?");
 ----
 
-You can also specify the location in the xref:languages:simple-language.adoc[Simple]
+You can also specify the location in the xref:components:languages:simple-language.adoc[Simple]
 language for example:
 
 
@@ -822,10 +822,10 @@ the `${}` notation. And in the Camel routes we use the Camel
 placeholder notation with `{{ }}`.
 
 [[UsingPropertyPlaceholder-ClashingSpringPropertyPlaceholderswithCamelsLanguage]]
-== Clashing Spring Property Placeholders with Camels xref:languages:simple-language.adoc[Simple] Language
+== Clashing Spring Property Placeholders with Camels xref:components:languages:simple-language.adoc[Simple] Language
 
 Take notice when using Spring bridging placeholder then the
-spring `${}` syntax clashes with the xref:languages:simple-language.adoc[Simple] in
+spring `${}` syntax clashes with the xref:components:languages:simple-language.adoc[Simple] in
 Camel, and therefore take care.
 
 Example:
@@ -838,7 +838,7 @@ Example:
 ----
 
 clashes with Spring property placeholders, and you should
-use `$simple{}` to indicate using the xref:languages:simple-language.adoc[Simple]
+use `$simple{}` to indicate using the xref:components:languages:simple-language.adoc[Simple]
 language in Camel.
 
 


[camel] 18/18: yarn.lock update from adding gulp-filter

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

djencks pushed a commit to branch issue-14698-rearrange-adocs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a320dae0891f7e3dd3cda6fa14df3aa0f63e34ba
Author: David Jencks <dj...@apache.org>
AuthorDate: Thu Mar 12 18:13:31 2020 -0700

    yarn.lock update from adding gulp-filter
---
 docs/yarn.lock | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/docs/yarn.lock b/docs/yarn.lock
index 529f5ed..1868a9b 100644
--- a/docs/yarn.lock
+++ b/docs/yarn.lock
@@ -89,6 +89,11 @@
   resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.3.tgz#f060bf6eaafae4d56a7dac618980838b0696e2ab"
   integrity sha512-FmuxfCuolpLl0AnQ2NHSzoUKWEJDFl63qXjzdoWBVyFCXzMGm1spBzk7LeHNoVCiWCF7mRVms9e6jEV9+MoPbg==
 
+"@types/minimatch@^3.0.3":
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
+  integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+
 abbrev@1:
   version "1.1.1"
   resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -202,6 +207,11 @@ arr-union@^3.1.0:
   resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
   integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
 
+array-differ@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b"
+  integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==
+
 array-each@^1.0.0, array-each@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
@@ -243,6 +253,11 @@ array-union@^1.0.1:
   dependencies:
     array-uniq "^1.0.1"
 
+array-union@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+  integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
 array-uniq@^1.0.1:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
@@ -258,6 +273,11 @@ arrify@^1.0.1:
   resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
   integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
 
+arrify@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa"
+  integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==
+
 asciidoctor.js@1.5.9:
   version "1.5.9"
   resolved "https://registry.yarnpkg.com/asciidoctor.js/-/asciidoctor.js-1.5.9.tgz#28f8e8ee134b82627f0240e9b6a201b3d15d9524"
@@ -1219,6 +1239,15 @@ gulp-cli@^2.0.0, gulp-cli@^2.0.1:
     v8flags "^3.0.1"
     yargs "^7.1.0"
 
+gulp-filter@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-6.0.0.tgz#9d69a408f1a9f60534264fb14464841f1b1746c2"
+  integrity sha512-veQFW93kf6jBdWdF/RxMEIlDK2mkjHyPftM381DID2C9ImTVngwYpyyThxm4/EpgcNOT37BLefzMOjEKbyYg0Q==
+  dependencies:
+    multimatch "^4.0.0"
+    plugin-error "^1.0.1"
+    streamfilter "^3.0.0"
+
 gulp-inject@^5.0.2:
   version "5.0.2"
   resolved "https://registry.yarnpkg.com/gulp-inject/-/gulp-inject-5.0.2.tgz#0942a401ae2b1969c3a52b90a13635d28e79f20b"
@@ -1925,6 +1954,17 @@ multi-progress@^2.0.0:
   dependencies:
     progress "^1.1.8"
 
+multimatch@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3"
+  integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==
+  dependencies:
+    "@types/minimatch" "^3.0.3"
+    array-differ "^3.0.0"
+    array-union "^2.1.0"
+    arrify "^2.0.1"
+    minimatch "^3.0.4"
+
 mute-stdout@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/mute-stdout/-/mute-stdout-1.0.1.tgz#acb0300eb4de23a7ddeec014e3e96044b3472331"
@@ -2408,6 +2448,15 @@ readable-stream@^3.0.0:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
+readable-stream@^3.0.6:
+  version "3.6.0"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
+  integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
 readdirp@^2.0.0:
   version "2.2.1"
   resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
@@ -2789,6 +2838,13 @@ stream-to-array@^2.3.0:
   dependencies:
     any-promise "^1.1.0"
 
+streamfilter@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-3.0.0.tgz#8c61b08179a6c336c6efccc5df30861b7a9675e7"
+  integrity sha512-kvKNfXCmUyC8lAXSSHCIXBUlo/lhsLcCU/OmzACZYpRUdtKIH68xYhm/+HI15jFJYtNJGYtCgn2wmIiExY1VwA==
+  dependencies:
+    readable-stream "^3.0.6"
+
 string-width@^1.0.1, string-width@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"