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:22 UTC

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

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[]