You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/02/09 13:24:53 UTC

[camel] 02/04: CAMEL-12246 Replaced file links with AsciiDoc internal cross references

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

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1a9242c4e18b905a294c3fbf95f4f5a78a6b952e
Author: Fintan Bolton <fb...@redhat.com>
AuthorDate: Fri Feb 9 11:56:09 2018 +0100

    CAMEL-12246 Replaced file links with AsciiDoc internal cross references
---
 camel-core/src/main/docs/bean-component.adoc       |  6 +--
 camel-core/src/main/docs/bean-language.adoc        |  4 +-
 camel-core/src/main/docs/class-component.adoc      |  8 ++--
 camel-core/src/main/docs/controlbus-component.adoc | 14 +++----
 camel-core/src/main/docs/dataformat-component.adoc |  2 +-
 camel-core/src/main/docs/dataset-component.adoc    |  6 +--
 camel-core/src/main/docs/direct-component.adoc     | 10 ++---
 camel-core/src/main/docs/direct-vm-component.adoc  | 10 ++---
 camel-core/src/main/docs/dynamic-router.adoc       |  8 ++--
 camel-core/src/main/docs/eips/aggregate-eip.adoc   |  2 +-
 camel-core/src/main/docs/eips/bean-eip.adoc        |  6 +--
 .../src/main/docs/eips/correlation-identifier.adoc |  4 +-
 .../src/main/docs/eips/dead-letter-channel.adoc    |  2 +-
 camel-core/src/main/docs/eips/event-message.adoc   |  4 +-
 .../src/main/docs/eips/guaranteed-delivery.adoc    | 12 +++---
 .../src/main/docs/eips/idempotentConsumer-eip.adoc | 12 +++---
 camel-core/src/main/docs/eips/log-eip.adoc         |  6 +--
 camel-core/src/main/docs/eips/message-bus.adoc     |  2 +-
 camel-core/src/main/docs/eips/message-channel.adoc |  2 +-
 .../src/main/docs/eips/message-endpoint.adoc       | 12 +++---
 .../src/main/docs/eips/message-translator.adoc     |  2 +-
 .../src/main/docs/eips/point-to-point-channel.adoc | 10 ++---
 .../main/docs/eips/publish-subscribe-channel.adoc  |  8 ++--
 camel-core/src/main/docs/file-component.adoc       | 24 +++++------
 camel-core/src/main/docs/file-language.adoc        | 32 +++++++--------
 camel-core/src/main/docs/gzip-dataformat.adoc      |  2 +-
 camel-core/src/main/docs/language-component.adoc   | 12 +++---
 camel-core/src/main/docs/log-component.adoc        |  2 +-
 camel-core/src/main/docs/mock-component.adoc       | 20 ++++-----
 camel-core/src/main/docs/properties-component.adoc | 24 +++++------
 camel-core/src/main/docs/request-reply.adoc        |  4 +-
 camel-core/src/main/docs/rest-component.adoc       |  2 +-
 camel-core/src/main/docs/rest-dsl.adoc             | 22 +++++-----
 camel-core/src/main/docs/return-address.adoc       |  2 +-
 camel-core/src/main/docs/scheduler-component.adoc  |  6 +--
 camel-core/src/main/docs/seda-component.adoc       | 18 ++++----
 camel-core/src/main/docs/simple-language.adoc      | 32 +++++++--------
 camel-core/src/main/docs/stub-component.adoc       |  8 ++--
 camel-core/src/main/docs/test-component.adoc       | 14 +++----
 camel-core/src/main/docs/timer-component.adoc      |  6 +--
 camel-core/src/main/docs/validator-component.adoc  |  4 +-
 camel-core/src/main/docs/validator.adoc            |  2 +-
 camel-core/src/main/docs/vm-component.adoc         | 14 +++----
 camel-core/src/main/docs/xpath-language.adoc       | 12 +++---
 camel-core/src/main/docs/xslt-component.adoc       |  2 +-
 .../src/main/docs/ahc-ws-component.adoc            |  4 +-
 .../camel-ahc/src/main/docs/ahc-component.adoc     |  6 +--
 .../camel-amqp/src/main/docs/amqp-component.adoc   |  4 +-
 .../main/docs/atmosphere-websocket-component.adoc  |  6 +--
 .../camel-atom/src/main/docs/atom-component.adoc   |  2 +-
 components/camel-azure/src/main/docs/azure.adoc    |  4 +-
 .../camel-bam/src/main/docs/bam-example.adoc       |  8 ++--
 .../src/main/docs/context-component.adoc           |  2 +-
 .../src/main/docs/crypto-dataformat.adoc           |  2 +-
 .../camel-cxf/src/main/docs/cxfrs-component.adoc   |  2 +-
 .../src/main/docs/disruptor-component.adoc         |  4 +-
 .../camel-ejb/src/main/docs/ejb-component.adoc     | 12 +++---
 .../camel-elsql/src/main/docs/elsql-component.adoc | 10 ++---
 .../src/main/docs/flatpack-component.adoc          |  2 +-
 .../src/main/docs/flatpack-dataformat.adoc         |  2 +-
 .../camel-ftp/src/main/docs/ftps-component.adoc    |  2 +-
 .../camel-ftp/src/main/docs/sftp-component.adoc    |  2 +-
 .../src/main/docs/groovy-language.adoc             |  4 +-
 .../camel-grpc/src/main/docs/grpc-component.adoc   |  2 +-
 .../camel-hazelcast/src/main/docs/hazelcast.adoc   | 22 +++++-----
 .../camel-hdfs/src/main/docs/hdfs-component.adoc   |  2 +-
 .../camel-hdfs2/src/main/docs/hdfs2-component.adoc |  2 +-
 .../camel-hl7/src/main/docs/hl7-dataformat.adoc    | 12 +++---
 .../camel-http/src/main/docs/http-component.adoc   |  8 ++--
 .../camel-http4/src/main/docs/http4-component.adoc |  6 +--
 .../src/main/docs/ibatis-component.adoc            |  8 ++--
 components/camel-ignite/src/main/docs/ignite.adoc  | 14 +++----
 components/camel-jasypt/src/main/docs/jasypt.adoc  | 16 ++++----
 .../camel-jaxb/src/main/docs/jaxb-dataformat.adoc  |  4 +-
 .../camel-jdbc/src/main/docs/jdbc-component.adoc   | 10 ++---
 .../src/main/docs/jetty-component.adoc             | 12 +++---
 .../src/main/docs/jgroups-component.adoc           |  4 +-
 .../camel-jing/src/main/docs/jing-component.adoc   |  2 +-
 .../camel-jms/src/main/docs/jms-component.adoc     | 22 +++++-----
 .../camel-jmx/src/main/docs/jmx-component.adoc     |  2 +-
 .../camel-josql/src/main/docs/sql-language.adoc    |  8 ++--
 .../camel-jpa/src/main/docs/jpa-component.adoc     |  2 +-
 .../camel-jsch/src/main/docs/scp-component.adoc    |  2 +-
 .../src/main/docs/jsonpath-language.adoc           |  2 +-
 .../src/main/docs/jxpath-language.adoc             |  2 +-
 .../src/main/docs/kubernetes-component.adoc        | 26 ++++++------
 .../docs/kubernetes-config-maps-component.adoc     |  2 +-
 .../docs/kubernetes-deployments-component.adoc     |  2 +-
 .../main/docs/kubernetes-namespaces-component.adoc |  2 +-
 .../src/main/docs/kubernetes-nodes-component.adoc  |  2 +-
 ...rnetes-persistent-volumes-claims-component.adoc |  2 +-
 .../kubernetes-persistent-volumes-component.adoc   |  2 +-
 .../src/main/docs/kubernetes-pods-component.adoc   |  2 +-
 ...bernetes-replication-controllers-component.adoc |  2 +-
 .../docs/kubernetes-resources-quota-component.adoc |  2 +-
 .../main/docs/kubernetes-secrets-component.adoc    |  2 +-
 .../kubernetes-service-accounts-component.adoc     |  2 +-
 .../main/docs/kubernetes-services-component.adoc   |  2 +-
 .../camel-kubernetes/src/main/docs/kubernetes.adoc | 24 +++++------
 .../docs/openshift-build-configs-component.adoc    |  2 +-
 .../src/main/docs/openshift-builds-component.adoc  |  2 +-
 .../camel-mina/src/main/docs/mina-component.adoc   | 10 ++---
 .../camel-mina2/src/main/docs/mina2-component.adoc | 10 ++---
 .../src/main/docs/mongodb-gridfs-component.adoc    |  2 +-
 .../src/main/docs/mongodb-component.adoc           | 12 +++---
 .../src/main/docs/mongodb3-component.adoc          | 12 +++---
 .../camel-msv/src/main/docs/msv-component.adoc     |  2 +-
 .../src/main/docs/mybatis-component.adoc           |  4 +-
 .../src/main/docs/nagios-component.adoc            |  6 +--
 .../src/main/docs/netty-http-component.adoc        | 32 +++++++--------
 .../camel-netty/src/main/docs/netty-component.adoc |  8 ++--
 .../src/main/docs/netty4-http-component.adoc       | 14 +++----
 .../src/main/docs/netty4-component.adoc            |  6 +--
 .../camel-openstack/src/main/docs/openstack.adoc   | 12 +++---
 .../src/main/docs/protobuf-dataformat.adoc         |  2 +-
 .../src/main/docs/pubnub-component.adoc            |  2 +-
 .../src/main/docs/quartz-component.adoc            | 12 +++---
 .../src/main/docs/quartz2-component.adoc           | 18 ++++----
 .../src/main/docs/rest-swagger-component.adoc      | 14 +++----
 .../src/main/docs/routebox-component.adoc          |  4 +-
 .../camel-rss/src/main/docs/rss-component.adoc     |  2 +-
 components/camel-ruby/src/main/docs/ruby.adoc      |  4 +-
 .../src/main/docs/salesforce-component.adoc        |  4 +-
 .../src/main/docs/sap-netweaver-component.adoc     |  2 +-
 .../camel-scala/src/main/docs/scala-eip.adoc       |  2 +-
 .../src/main/docs/scala-supported-languages.adoc   |  4 +-
 .../src/main/docs/javaScript-language.adoc         |  4 +-
 .../camel-script/src/main/docs/php-language.adoc   |  4 +-
 .../src/main/docs/python-language.adoc             |  4 +-
 .../camel-script/src/main/docs/ruby-language.adoc  |  4 +-
 .../src/main/docs/servlet-component.adoc           | 10 ++---
 .../src/main/docs/servletlistener.adoc             | 12 +++---
 components/camel-shiro/src/main/docs/shiro.adoc    |  2 +-
 .../src/main/docs/sjms-batch-component.adoc        |  4 +-
 .../src/main/docs/soapjaxb-dataformat.adoc         |  4 +-
 .../camel-solr/src/main/docs/solr-component.adoc   |  2 +-
 .../src/main/docs/spark-rest-component.adoc        |  2 +-
 .../src/main/docs/spring-boot.adoc                 |  2 +-
 .../src/main/docs/spring-security.adoc             |  4 +-
 components/camel-spring/src/main/docs/spring.adoc  |  6 +--
 .../camel-sql/src/main/docs/sql-component.adoc     |  4 +-
 .../src/main/docs/sql-stored-component.adoc        |  4 +-
 .../src/main/docs/syslog-dataformat.adoc           | 14 +++----
 .../src/main/docs/test-blueprint.adoc              |  2 +-
 .../camel-test-cdi/src/main/docs/test-cdi.adoc     |  4 +-
 components/camel-test/src/main/docs/test.adoc      | 14 +++----
 .../src/main/docs/twitter-component.adoc           | 10 ++---
 .../camel-twitter/src/main/docs/twitter.adoc       | 22 +++++-----
 .../src/main/docs/undertow-component.adoc          |  6 +--
 .../camel-urlrewrite/src/main/docs/urlrewrite.adoc | 26 ++++++------
 .../src/main/docs/websocket-component.adoc         |  6 +--
 .../src/main/docs/xmljson-dataformat.adoc          |  2 +-
 docs/user-manual/en/async.adoc                     | 36 ++++++++--------
 .../en/asynchronous-routing-engine.adoc            | 40 +++++++++---------
 docs/user-manual/en/backlogdebugger.adoc           |  2 +-
 docs/user-manual/en/bam-example.adoc               |  8 ++--
 docs/user-manual/en/batch-consumer.adoc            | 22 +++++-----
 docs/user-manual/en/bean-integration.adoc          |  6 +--
 docs/user-manual/en/browsable-endpoint.adoc        |  8 ++--
 .../en/camel-configuration-utilities.adoc          | 18 ++++----
 .../en/enterprise-integration-patterns.adoc        |  8 ++--
 docs/user-manual/en/exchange-pattern.adoc          |  2 +-
 docs/user-manual/en/expression.adoc                | 48 +++++++++++-----------
 .../en/how-do-i-configure-endpoints.adoc           |  2 +-
 docs/user-manual/en/injector.adoc                  |  2 +-
 docs/user-manual/en/intercept.adoc                 |  4 +-
 docs/user-manual/en/json.adoc                      |  2 +-
 docs/user-manual/en/scala-dsl-eip.adoc             |  2 +-
 .../en/scala-dsl-supported-languages.adoc          |  4 +-
 docs/user-manual/en/scripting-languages.adoc       |  4 +-
 docs/user-manual/en/spring-testing.adoc            | 14 +++----
 docs/user-manual/en/testing.adoc                   | 16 ++++----
 172 files changed, 681 insertions(+), 681 deletions(-)

diff --git a/camel-core/src/main/docs/bean-component.adoc b/camel-core/src/main/docs/bean-component.adoc
index 508820b..f80f929 100644
--- a/camel-core/src/main/docs/bean-component.adoc
+++ b/camel-core/src/main/docs/bean-component.adoc
@@ -94,7 +94,7 @@ And the same route using Spring DSL:
 
 === Bean as endpoint
 
-Camel also supports invoking link:bean.html[Bean] as an Endpoint. In the
+Camel also supports invoking <<bean-component,Bean>> as an Endpoint. In the
 route below:
 
 What happens is that when the exchange is routed to the `myBean` Camel
@@ -107,7 +107,7 @@ type and storing the output of the method on the Exchange Out body.
 
 === Java DSL bean syntax
 
-Java DSL comes with syntactic sugar for the link:bean.html[Bean]
+Java DSL comes with syntactic sugar for the <<bean-component,Bean>>
 component. Instead of specifying the bean explicitly as the endpoint
 (i.e. `to("bean:beanName")`) you can use the following syntax:
 
@@ -153,6 +153,6 @@ mechanisms in Camel.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:class.html[Class] component
+* <<class-component,Class>> component
 * link:bean-binding.html[Bean Binding]
 * link:bean-integration.html[Bean Integration]
\ No newline at end of file
diff --git a/camel-core/src/main/docs/bean-language.adoc b/camel-core/src/main/docs/bean-language.adoc
index e6cfb9d..3742d23 100644
--- a/camel-core/src/main/docs/bean-language.adoc
+++ b/camel-core/src/main/docs/bean-language.adoc
@@ -19,7 +19,7 @@ the message body and using any annotations on the bean methods.
 The link:bean-binding.html[Bean Binding] rules are used to bind the
 link:message.html[Message] Exchange to the method parameters; so you can
 annotate the bean to extract headers or other expressions such as
-link:xpath.html[XPath] or link:xquery.html[XQuery] from the message.
+<<xpath-language,XPath>> or <<xpath-language,XQuery>> from the message.
 
 === Bean Options
 
@@ -107,7 +107,7 @@ or other expressions.
 
 === Non registry beans
 
-The link:bean-language.html[Bean Language] also supports invoking beans
+The <<bean-language,Bean Language>> also supports invoking beans
 that isn't registered in the link:registry.html[Registry]. This is
 usable for quickly to invoke a bean from Java DSL where you don't need
 to register the bean in the link:registry.html[Registry] such as the
diff --git a/camel-core/src/main/docs/class-component.adoc b/camel-core/src/main/docs/class-component.adoc
index b147c35..954a9ce 100644
--- a/camel-core/src/main/docs/class-component.adoc
+++ b/camel-core/src/main/docs/class-component.adoc
@@ -4,7 +4,7 @@
 *Available as of Camel version 2.4*
 
 The *class:* component binds beans to Camel message exchanges. It works
-in the same way as the link:bean.html[Bean] component but instead of
+in the same way as the <<bean-component,Bean>> component but instead of
 looking up beans from a link:registry.html[Registry] it creates the bean
 based on the class name.
 
@@ -60,7 +60,7 @@ with the following path and query parameters:
 
 === Using
 
-You simply use the *class* component just as the link:bean.html[Bean]
+You simply use the *class* component just as the <<bean-component,Bean>>
 component but by specifying the fully qualified classname instead. +
  For example to use the `MyFooBean` you have to do as follows:
 
@@ -115,7 +115,7 @@ Which will lookup a bean from the link:registry.html[Registry] with the
 id `foo` and invoke the `setCool` method on the created instance of the
 `MyPrefixBean` class.
 
-TIP:See more details at the link:bean.html[Bean] component as the *class*
+TIP:See more details at the <<bean-component,Bean>> component as the *class*
 component works in much the same way.
 
 === See Also
@@ -125,6 +125,6 @@ component works in much the same way.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:bean.html[Bean]
+* <<bean-component,Bean>>
 * link:bean-binding.html[Bean Binding]
 * link:bean-integration.html[Bean Integration]
\ No newline at end of file
diff --git a/camel-core/src/main/docs/controlbus-component.adoc b/camel-core/src/main/docs/controlbus-component.adoc
index 0bced5b..3ee7146 100644
--- a/camel-core/src/main/docs/controlbus-component.adoc
+++ b/camel-core/src/main/docs/controlbus-component.adoc
@@ -22,7 +22,7 @@ by using a Java API from the `CamelContext`, or from the
 link:eventnotifier-to-log-details-about-all-sent-exchanges.html[here].
 
 From Camel 2.11 onwards we have introduced a new
-link:controlbus-component.html[ControlBus Component] that allows you to
+<<controlbus-component,ControlBus Component>> that allows you to
 send messages to a control bus link:endpoint.html[Endpoint] that reacts
 accordingly.
 
@@ -31,7 +31,7 @@ accordingly.
 *Available as of Camel 2.11*
 
 The *controlbus:* component provides easy management of Camel
-applications based on the link:controlbus.html[Control Bus] EIP
+applications based on the <<controlbus-component,Control Bus>> EIP
 pattern. 
 For example, by sending a message to an link:endpoint.html[Endpoint]
 you can control the lifecycle of routes, or gather performance
@@ -53,7 +53,7 @@ use.
 
 |`route` |To control routes using the `routeId` and `action` parameter.
 
-|`language` |Allows you to specify a link:language.html[Language] to use for
+|`language` |Allows you to specify a <<language-component,Language>> to use for
 evaluating the message body. If there is any result from the evaluation,
 then the result is put in the message body.
 |===
@@ -151,7 +151,7 @@ String xml = template.requestBody("controlbus:route?action=stats", null, String.
 
 === Using Simple language
 
-You can use the link:simple.html[Simple] language with the control bus,
+You can use the <<simple-language,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:
@@ -171,8 +171,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 link:groovy.html[Groovy] or to some
-extend the link:simple.html[Simple] language.
+that has stronger powers such as <<groovy-language,Groovy>> or to some
+extend the <<simple-language,Simple>> language.
 
 For example to shutdown Camel itself you can do:
 
@@ -185,4 +185,4 @@ We use `async=true` to stop Camel asynchronously as otherwise we
 would be trying to stop Camel while it was in-flight processing the
 message we sent to the control bus component.
 
-TIP: You can also use other languages such as link:groovy.html[Groovy], etc.
\ No newline at end of file
+TIP: You can also use other languages such as <<groovy-language,Groovy>>, etc.
\ No newline at end of file
diff --git a/camel-core/src/main/docs/dataformat-component.adoc b/camel-core/src/main/docs/dataformat-component.adoc
index 18f1765..1239c8a 100644
--- a/camel-core/src/main/docs/dataformat-component.adoc
+++ b/camel-core/src/main/docs/dataformat-component.adoc
@@ -58,7 +58,7 @@ with the following path and query parameters:
 
 === Samples
 
-For example to use the link:jaxb.html[JAXB] link:data-format.html[Data
+For example to use the <<jaxb-dataformat,JAXB>> link:data-format.html[Data
 Format] we can do as follows:
 
 [source,java]
diff --git a/camel-core/src/main/docs/dataset-component.adoc b/camel-core/src/main/docs/dataset-component.adoc
index 1387d63..8052a89 100644
--- a/camel-core/src/main/docs/dataset-component.adoc
+++ b/camel-core/src/main/docs/dataset-component.adoc
@@ -4,8 +4,8 @@
 *Available as of Camel version 1.3*
 
 link:testing.html[Testing] of distributed and asynchronous processing is
-notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
-and link:dataset.html[DataSet] endpoints work great with the
+notoriously difficult. The <<mock-component,Mock>>, <<mock-component,Test>>
+and <<dataset-component,DataSet>> endpoints work great with the
 link:testing.html[Camel Testing Framework] to simplify your unit and
 integration testing using
 link:enterprise-integration-patterns.html[Enterprise Integration
@@ -18,7 +18,7 @@ http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/compon
 instances] both as a source of messages and as a way to assert that the
 data set is received.
 
-Camel will use the link:log.html[throughput logger] when sending
+Camel will use the <<log-component,throughput logger>> when sending
 dataset's.
 
 === URI format
diff --git a/camel-core/src/main/docs/direct-component.adoc b/camel-core/src/main/docs/direct-component.adoc
index dc08fa4..8de3f76 100644
--- a/camel-core/src/main/docs/direct-component.adoc
+++ b/camel-core/src/main/docs/direct-component.adoc
@@ -9,11 +9,11 @@ consumers when a producer sends a message exchange. +
 camel context.
 
 TIP: *Asynchronous*
-The link:seda.html[SEDA] component provides asynchronous invocation of
+The <<seda-component,SEDA>> component provides asynchronous invocation of
 any consumers when a producer sends a message exchange.
 
 TIP: *Connection to other camel contexts*
-The link:vm.html[VM] component provides connections between Camel
+The <<vm-component,VM>> component provides connections between Camel
 contexts as long they run in the same *JVM*.
 
 === URI format
@@ -112,10 +112,10 @@ And the sample using spring DSL:
 </route>
 ----
 
-See also samples from the link:seda.html[SEDA] component, how they can
+See also samples from the <<seda-component,SEDA>> component, how they can
 be used together.
 
 === See Also
 
-* link:seda.html[SEDA]
-* link:vm.html[VM]
\ No newline at end of file
+* <<seda-component,SEDA>>
+* <<vm-component,VM>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/direct-vm-component.adoc b/camel-core/src/main/docs/direct-vm-component.adoc
index 40fc27b..1c81f41 100644
--- a/camel-core/src/main/docs/direct-vm-component.adoc
+++ b/camel-core/src/main/docs/direct-vm-component.adoc
@@ -8,8 +8,8 @@ any consumers in the JVM when a producer sends a message exchange. +
  This endpoint can be used to connect existing routes in the same camel
 context, as well from other camel contexts in the *same* JVM.
 
-This component differs from the link:direct.html[Direct] component in
-that link:direct-vm.html[Direct-VM] supports communication across
+This component differs from the <<direct-component,Direct>> component in
+that <<direct-vm-component,Direct-VM>> supports communication across
 CamelContext instances - so you can use this mechanism to communicate
 across web applications (provided that camel-core.jar is on the
 system/boot classpath).
@@ -134,6 +134,6 @@ And the sample using spring DSL:
 
 === See Also
 
-* link:direct.html[Direct]
-* link:seda.html[SEDA]
-* link:vm.html[VM]
\ No newline at end of file
+* <<direct-component,Direct>>
+* <<seda-component,SEDA>>
+* <<vm-component,VM>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/dynamic-router.adoc b/camel-core/src/main/docs/dynamic-router.adoc
index 638f326..07a1f2a 100644
--- a/camel-core/src/main/docs/dynamic-router.adoc
+++ b/camel-core/src/main/docs/dynamic-router.adoc
@@ -60,7 +60,7 @@ from("direct:start")
     .dynamicRouter(method(DynamicRouterTest.class, "slip"));
 ----
 
-Which will leverage a link:bean.html[Bean] to compute the slip
+Which will leverage a <<bean-component,Bean>> to compute the slip
 _on-the-fly_, which could be implemented as follows:
 
 [source,java]
@@ -139,7 +139,7 @@ link:exchange.html[Exchange] are. Although there was a bug in the method
 call expression, see the warning below.
 
 WARNING:*Using beans to store state*
-Mind that in Camel 2.9.2 or older, when using a link:bean.html[Bean] the
+Mind that in Camel 2.9.2 or older, when using a <<bean-component,Bean>> the
 state is not propagated, so you will have to use a
 link:processor.html[Processor] instead. This is fixed in Camel 2.9.3
 onwards.
@@ -198,12 +198,12 @@ In the above we can use the
 link:parameter-binding-annotations.html[Parameter Binding Annotations]
 to bind different parts of the link:message.html[Message] to method
 parameters or use an link:expression.html[Expression] such as using
-link:xpath.html[XPath] or link:xquery.html[XQuery].
+<<xpath-language,XPath>> or <<xpath-language,XQuery>>.
 
 The method can be invoked in a number of ways as described in the
 link:bean-integration.html[Bean Integration] such as
 
 * link:pojo-producing.html[POJO Producing]
 * link:spring-remoting.html[Spring Remoting]
-* link:bean.html[Bean] component
+* <<bean-component,Bean>> component
 
diff --git a/camel-core/src/main/docs/eips/aggregate-eip.adoc b/camel-core/src/main/docs/eips/aggregate-eip.adoc
index e484b9f..3f3ed1b 100644
--- a/camel-core/src/main/docs/eips/aggregate-eip.adoc
+++ b/camel-core/src/main/docs/eips/aggregate-eip.adoc
@@ -190,7 +190,7 @@ The aggregator provides a pluggable repository which you can implement
 your own `org.apache.camel.spi.AggregationRepository`. +
  If you need persistent repository then you can use either Camel
 link:hawtdb.html[HawtDB], link:leveldb.html[LevelDB], or
-link:sql-component.html[SQL Component] components.
+<<sql-component,SQL Component>> components.
 
 === Using TimeoutAwareAggregationStrategy
 
diff --git a/camel-core/src/main/docs/eips/bean-eip.adoc b/camel-core/src/main/docs/eips/bean-eip.adoc
index 18f1ca2..6745e0b 100644
--- a/camel-core/src/main/docs/eips/bean-eip.adoc
+++ b/camel-core/src/main/docs/eips/bean-eip.adoc
@@ -32,7 +32,7 @@ The Bean EIP supports 5 options which are listed below:
 
 === Bean as endpoint
 
-Camel also supports invoking link:bean.html[Bean] as an Endpoint. In the
+Camel also supports invoking <<bean-component,Bean>> as an Endpoint. In the
 route below:
 
 What happens is that when the exchange is routed to the `myBean` Camel
@@ -45,7 +45,7 @@ type and storing the output of the method on the Exchange Out body.
 
 === Java DSL bean syntax
 
-Java DSL comes with syntactic sugar for the link:bean.html[Bean]
+Java DSL comes with syntactic sugar for the <<bean-component,Bean>>
 component. Instead of specifying the bean explicitly as the endpoint
 (i.e. `to("bean:beanName")`) you can use the following syntax:
 
@@ -86,6 +86,6 @@ mechanisms in Camel.
 
 === See also
 
-* link:class.html[Class] component
+* <<class-component,Class>> component
 * link:bean-binding.html[Bean Binding]
 * link:bean-integration.html[Bean Integration]
\ No newline at end of file
diff --git a/camel-core/src/main/docs/eips/correlation-identifier.adoc b/camel-core/src/main/docs/eips/correlation-identifier.adoc
index 931ab70..14837d0 100644
--- a/camel-core/src/main/docs/eips/correlation-identifier.adoc
+++ b/camel-core/src/main/docs/eips/correlation-identifier.adoc
@@ -18,7 +18,7 @@ image:http://www.enterpriseintegrationpatterns.com/img/CorrelationIdentifierSolu
 The use of a Correlation Identifier is key to working with the
 link:bam.html[Camel Business Activity Monitoring Framework] and can also
 be highly useful when testing with simulation or canned data such as
-with the link:mock.html[Mock testing framework]
+with the <<mock-component,Mock testing framework>>
 
 Some link:eip.html[EIP] patterns will spin off a sub message, and in
 those cases, Camel will add a correlation id on the
@@ -31,7 +31,7 @@ Tap] EIP does this.
 
 The following example demonstrates using the Camel JMSMessageID as the
 Correlation Identifier within a request/reply pattern in
-the link:jms.html[JMS] component
+the <<jms-component,JMS>> component
 
 === Samples
 
diff --git a/camel-core/src/main/docs/eips/dead-letter-channel.adoc b/camel-core/src/main/docs/eips/dead-letter-channel.adoc
index 32981d3..f8b96c5 100644
--- a/camel-core/src/main/docs/eips/dead-letter-channel.adoc
+++ b/camel-core/src/main/docs/eips/dead-letter-channel.adoc
@@ -323,7 +323,7 @@ failed.
 
 These information is kept on the Exchange even if the message
 was successfully processed by a given endpoint, and then later fails for
-example in a local link:bean.html[Bean] processing instead. So beware
+example in a local <<bean-component,Bean>> processing instead. So beware
 that this is a hint that helps pinpoint errors.
 
 [source,java]
diff --git a/camel-core/src/main/docs/eips/event-message.adoc b/camel-core/src/main/docs/eips/event-message.adoc
index 37226ca..3575b30 100644
--- a/camel-core/src/main/docs/eips/event-message.adoc
+++ b/camel-core/src/main/docs/eips/event-message.adoc
@@ -12,8 +12,8 @@ implement this pattern using the underlying transport or protocols.
 image:http://www.enterpriseintegrationpatterns.com/img/EventMessageSolution.gif[image]
 
 The default behaviour of many link:components.html[Components] is InOnly
-such as for link:jms.html[JMS], link:file2.html[File] or
-link:seda.html[SEDA]
+such as for <<jms-component,JMS>>, <<jms-component,File>> or
+<<seda-component,SEDA>>
 
 TIP: See the related link:request-reply.html[Request Reply] message.
 
diff --git a/camel-core/src/main/docs/eips/guaranteed-delivery.adoc b/camel-core/src/main/docs/eips/guaranteed-delivery.adoc
index 7fe4fd5..246faa1 100644
--- a/camel-core/src/main/docs/eips/guaranteed-delivery.adoc
+++ b/camel-core/src/main/docs/eips/guaranteed-delivery.adoc
@@ -8,13 +8,13 @@ patterns] using among others the following components:
 
 * link:file2.html[File] for using file systems as a persistent store of
 messages
-* link:jms.html[JMS] when using persistent delivery (the default) for
+* <<jms-component,JMS>> when using persistent delivery (the default) for
 working with JMS Queues and Topics for high performance, clustering and
 load balancing
-* link:jpa.html[JPA] for using a database as a persistence layer, or use
-any of the many other database component such as link:sql.html[SQL],
-link:jdbc.html[JDBC],
-link:mybatis.html[MyBatis],
+* <<jpa-component,JPA>> for using a database as a persistence layer, or use
+any of the many other database component such as <<sql-component,SQL>>,
+<<jdbc-component,JDBC>>,
+<<mybatis-component,MyBatis>>,
 link:hibernate.html[Hibernate]
 * link:hawtdb.html[HawtDB] for a lightweight key-value persistent store
 
@@ -25,7 +25,7 @@ image:http://www.enterpriseintegrationpatterns.com/img/GuaranteedMessagingSoluti
 
 The following example demonstrates illustrates the use
 of http://www.enterpriseintegrationpatterns.com/GuaranteedMessaging.html[Guaranteed
-Delivery] within the link:jms.html[JMS] component. By default, a message
+Delivery] within the <<jms-component,JMS>> component. By default, a message
 is not considered successfully delivered until the recipient has
 persisted the message locally guaranteeing its receipt in the event the
 destination becomes unavailable.
diff --git a/camel-core/src/main/docs/eips/idempotentConsumer-eip.adoc b/camel-core/src/main/docs/eips/idempotentConsumer-eip.adoc
index f5cb3f4..ffd38e4 100644
--- a/camel-core/src/main/docs/eips/idempotentConsumer-eip.adoc
+++ b/camel-core/src/main/docs/eips/idempotentConsumer-eip.adoc
@@ -20,19 +20,19 @@ Camel provides the following Idempotent Consumer implementations:
 * link:file2.html[FileIdempotentRepository]
 * link:hazelcast-component.html[HazelcastIdempotentRepository]
 (*Available as of Camel 2.8*)
-* link:sql-component.html[JdbcMessageIdRepository] (*Available as of
+* <<sql-component,JdbcMessageIdRepository>> (*Available as of
 Camel 2.7*)
-* link:jpa.html[JpaMessageIdRepository]
-* link:infinispan.html[InfinispanIdempotentRepository] (*Available as of
+* <<jpa-component,JpaMessageIdRepository>>
+* <<infinispan-component,InfinispanIdempotentRepository>> (*Available as of
 Camel 2.13.0)*
-* link:jcache.html[JCacheIdempotentRepository]* (*Available as of Camel
+* <<jcache-component,JCacheIdempotentRepository>>* (*Available as of Camel
 2.17.0)**
 * link:spring.html[SpringCacheIdempotentRepository] *(*Available as of
 Camel 2.17.1)**** 
 **
-* link:ehcache.html[EhcacheIdempotentRepository]** *(*Available as of
+* <<ehcache-component,EhcacheIdempotentRepository>>** *(*Available as of
 Camel 2.18.0)****
-* link:kafka.html[KafkaIdempotentRepository] (*Available as of Camel
+* <<kafka-component,KafkaIdempotentRepository>> (*Available as of Camel
 2.19.0)*
 
 === Options
diff --git a/camel-core/src/main/docs/eips/log-eip.adoc b/camel-core/src/main/docs/eips/log-eip.adoc
index 3756f79..74d915a 100644
--- a/camel-core/src/main/docs/eips/log-eip.adoc
+++ b/camel-core/src/main/docs/eips/log-eip.adoc
@@ -4,7 +4,7 @@
 How can I log the processing of a link:message.html[Message]?
 
 Camel provides many ways to log the fact that you are processing a message. Here are just a few examples:
-* You can use the link:log.html[Log] component which logs the Message content.
+* You can use the <<log-component,Log>> component which logs the Message content.
 * You can use the link:tracer.html[Tracer] which trace logs message flow.
 * You can also use a link:processor.html[Processor] or link:bean.html[Bean] and log from Java code.
 * You can use the log DSL.
@@ -32,7 +32,7 @@ The log DSL is much lighter and meant for logging human logs such as Starting to
 
 === Samples
 
-In *Camel 2.2* you can use the log DSL which allows you to use link:simple.html[Simple] language to construct a dynamic message which gets logged.
+In *Camel 2.2* you can use the log DSL which allows you to use <<simple-language,Simple>> language to construct a dynamic message which gets logged.
 
 For example you can do
 
@@ -167,7 +167,7 @@ In some scenarios it is required that the bundle associated with logger should b
 *Available as of Camel 2.19*
 
 You can enable security masking for logging by setting `logMask` flag to `true`.
-Note that this option also affects link:log.html[Log] component.
+Note that this option also affects <<log-component,Log>> component.
 
 To enable mask in Java DSL at CamelContext level:
 [source,java]
diff --git a/camel-core/src/main/docs/eips/message-bus.adoc b/camel-core/src/main/docs/eips/message-bus.adoc
index ca93314..e90b20b 100644
--- a/camel-core/src/main/docs/eips/message-bus.adoc
+++ b/camel-core/src/main/docs/eips/message-bus.adoc
@@ -10,7 +10,7 @@ consumers to be decoupled.
 image:http://www.enterpriseintegrationpatterns.com/img/MessageBusSolution.gif[image]
 
 Folks often assume that a Message Bus is a JMS though so you may wish to
-refer to the link:jms.html[JMS] component for traditional MOM support. +
+refer to the <<jms-component,JMS>> component for traditional MOM support. +
 
 
 [[MessageBus-Example]]
diff --git a/camel-core/src/main/docs/eips/message-channel.adoc b/camel-core/src/main/docs/eips/message-channel.adoc
index 6fe2ed9..57f8e76 100644
--- a/camel-core/src/main/docs/eips/message-channel.adoc
+++ b/camel-core/src/main/docs/eips/message-channel.adoc
@@ -23,7 +23,7 @@ jms:queue:foo
 -------------
 
 This message channel can be then used within the
-link:jms.html[JMS] component
+<<jms-component,JMS>> component
 
 And the following shows a little Java route snippet:
 
diff --git a/camel-core/src/main/docs/eips/message-endpoint.adoc b/camel-core/src/main/docs/eips/message-endpoint.adoc
index b88b998..3c37ff8 100644
--- a/camel-core/src/main/docs/eips/message-endpoint.adoc
+++ b/camel-core/src/main/docs/eips/message-endpoint.adoc
@@ -51,7 +51,7 @@ And in XML:
 There is a new `.toD` / `<toD>` that allows to send a message to a dynamic
 computed link:endpoint.html[Endpoint] using one or
 more link:expression.html[Expression] that are concat together. By
-default the link:simple.html[Simple] language is used to compute
+default the <<simple-language,Simple>> language is used to compute
 the endpoint. For example to send a message to a endpoint defined by a
 header you can do as shown below:
 
@@ -72,7 +72,7 @@ And in XML:
 ----
 
 You can also prefix the uri with a value because by default the uri is
-evaluated using the link:simple.html[Simple] language
+evaluated using the <<simple-language,Simple>> language
 
 [source,java]
 ----
@@ -94,8 +94,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 link:simple.html[Simple] such
-as link:xpath.html[XPath] - this requires to prefix with language: as
+You can also use other languages than <<simple-language,Simple>> such
+as <<xpath-language,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
@@ -117,7 +117,7 @@ from("direct:start")
   .toD("language:xpath:/order/@uri");
 ----
 
-You can also concat multiple link:language.html[Language](s) together
+You can also concat multiple <<language-component,Language>>(s) together
 using the plus sign `+` such as shown below:
 
 [source,xml]
@@ -129,7 +129,7 @@ using the plus sign `+` such as shown below:
 ----
 
 In the example above the uri is a combination
-of link:simple.html[Simple] language and link:xpath.html[XPath] where
+of <<simple-language,Simple>> language and <<simple-language,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/camel-core/src/main/docs/eips/message-translator.adoc b/camel-core/src/main/docs/eips/message-translator.adoc
index e35da4c..d2137d3 100644
--- a/camel-core/src/main/docs/eips/message-translator.adoc
+++ b/camel-core/src/main/docs/eips/message-translator.adoc
@@ -54,7 +54,7 @@ invoke a bean
 
 You can also use link:templating.html[Templating] to consume a message
 from one destination, transform it with something like
-link:velocity.html[Velocity] or link:xquery.html[XQuery] and then send
+<<velocity-component,Velocity>> or <<velocity-component,XQuery>> and then send
 it on to another destination. For example using InOnly (one way
 messaging)
 
diff --git a/camel-core/src/main/docs/eips/point-to-point-channel.adoc b/camel-core/src/main/docs/eips/point-to-point-channel.adoc
index db3f61b..24190d3 100644
--- a/camel-core/src/main/docs/eips/point-to-point-channel.adoc
+++ b/camel-core/src/main/docs/eips/point-to-point-channel.adoc
@@ -6,18 +6,18 @@ http://www.enterpriseintegrationpatterns.com/PointToPointChannel.html[Point
 to Point Channel] from the link:enterprise-integration-patterns.html[EIP
 patterns] using the following components
 
-* link:seda.html[SEDA] for in-VM seda based messaging
-* link:jms.html[JMS] for working with JMS Queues for high performance,
+* <<seda-component,SEDA>> for in-VM seda based messaging
+* <<jms-component,JMS>> for working with JMS Queues for high performance,
 clustering and load balancing
-* link:jpa.html[JPA] for using a database as a simple message queue
-* link:xmpp.html[XMPP] for point-to-point communication over XMPP
+* <<jpa-component,JPA>> for using a database as a simple message queue
+* <<xmpp-component,XMPP>> for point-to-point communication over XMPP
 (Jabber)
 * and others
 
 image:http://www.enterpriseintegrationpatterns.com/img/PointToPointSolution.gif[image]
 
 The following example demonstrates point to point messaging using
-the link:jms.html[JMS] component 
+the <<jms-component,JMS>> component 
 
 [[PointtoPointChannel-Samples]]
 === Samples
diff --git a/camel-core/src/main/docs/eips/publish-subscribe-channel.adoc b/camel-core/src/main/docs/eips/publish-subscribe-channel.adoc
index 1ce16e6..aab788d 100644
--- a/camel-core/src/main/docs/eips/publish-subscribe-channel.adoc
+++ b/camel-core/src/main/docs/eips/publish-subscribe-channel.adoc
@@ -7,13 +7,13 @@ Subscribe Channel] from the
 link:enterprise-integration-patterns.html[EIP patterns] using for
 example the following components:
 
-* link:jms.html[JMS] for working with JMS Topics for high performance,
+* <<jms-component,JMS>> for working with JMS Topics for high performance,
 clustering and load balancing
-* link:xmpp.html[XMPP] when using rooms for group communication
-* link:seda.html[SEDA] for working with SEDA in the same
+* <<xmpp-component,XMPP>> when using rooms for group communication
+* <<seda-component,SEDA>> for working with SEDA in the same
 link:camelcontext.html[CamelContext] which can work in pub-sub, but
 allowing multiple consumers.
-* link:vm.html[VM] as SEDA but for intra-JVM.
+* <<vm-component,VM>> as SEDA but for intra-JVM.
 
 image:http://www.enterpriseintegrationpatterns.com/img/PublishSubscribeSolution.gif[image]
 
diff --git a/camel-core/src/main/docs/file-component.adoc b/camel-core/src/main/docs/file-component.adoc
index 27c929e..d39ba4b 100644
--- a/camel-core/src/main/docs/file-component.adoc
+++ b/camel-core/src/main/docs/file-component.adoc
@@ -184,7 +184,7 @@ 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 link:file-language.html[File
-Language], or link:simple.html[Simple] then the result of the expression
+Language], or <<simple-language,Simple>> then the result of the expression
 evaluation is the file name to be used - eg if you set
 
 [source]
@@ -192,7 +192,7 @@ evaluation is the file name to be used - eg if you set
 move=../backup/copy-of-${file:name}
 ----
 
-then that's using the link:file-language.html[File Language] which we
+then that's using the <<file-language,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.
@@ -230,10 +230,10 @@ processed and after it's processed, it's moved to the `.done` folder.
 
 The *move* and *preMove* options
 are link:expression.html[Expression]-based, so we have the full power of
-the link:file-language.html[File Language] to do advanced configuration
+the <<file-language,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 link:file-language.html[File Language] expression. So when we
+into a <<file-language,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
@@ -256,7 +256,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 link:file-language.html[File Language]
+See more examples at <<file-language,File Language>>
 
 === Message Headers
 
@@ -270,7 +270,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
-link:file-language.html[File Language] or link:simple.html[Simple]
+<<file-language,File Language>> or <<file-language,Simple>>
 expression; or an link:expression.html[Expression] object. If it's
 `null` then Camel will auto-generate a filename based on the message
 unique ID.
@@ -478,8 +478,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 link:file-language.html[File Language] expression in the
-`CamelFileName` header. See the link:file-language.html[File Language]
+string-based <<file-language,File Language>> expression in the
+`CamelFileName` header. See the <<file-language,File Language>>
 for syntax and samples.
 
 === Consuming files from folders where others drop files directly
@@ -761,7 +761,7 @@ today's date as a sub-folder name:
 from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
 ----
 
-See link:file-language.html[File Language] for more samples.
+See <<file-language,File Language>> for more samples.
 
 === Avoiding reading the same file more than once (idempotent consumer)
 
@@ -962,7 +962,7 @@ link:registry.html[Registry] for a bean with the ID, `mySorter`.
 ==== Sorting using sortBy
 
 Camel supports pluggable sorting strategies. This strategy it to use the
-link:file-language.html[File Language] to configure the sorting. The
+<<file-language,File Language>> to configure the sorting. The
 `sortBy` option is configured as follows:
 
 [source]
@@ -986,7 +986,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 link:file-language.html[File Language] we
+As we have the full power of <<file-language,File Language>> we
 can use some of the other parameters, so if we want to sort by file size
 we do:
 
@@ -1122,6 +1122,6 @@ problems.
 
 === See Also
 
-* link:file-language.html[File Language]
+* <<file-language,File Language>>
 * link:ftp2.html[FTP]
 * link:polling-consumer.html[Polling Consumer]
\ No newline at end of file
diff --git a/camel-core/src/main/docs/file-language.adoc b/camel-core/src/main/docs/file-language.adoc
index c7e5368..2e3f19e 100644
--- a/camel-core/src/main/docs/file-language.adoc
+++ b/camel-core/src/main/docs/file-language.adoc
@@ -5,11 +5,11 @@
 
 INFO:*File language is now merged with Simple language*
 From Camel 2.2 onwards, the file language is now merged with
-link:simple.html[Simple] language which means you can use all the file
+<<simple-language,Simple>> language which means you can use all the file
 syntax directly within the simple language.
 
 The File Expression Language is an extension to the
-link:simple.html[Simple] language, adding file related capabilities.
+<<simple-language,Simple>> language, adding file related capabilities.
 These capabilities are related to common use cases working with file
 path and names. The goal is to allow expressions to be used with the
 link:file2.html[File] and link:ftp.html[FTP] components for setting
@@ -32,18 +32,18 @@ The File language supports 2 options which are listed below.
 
 === Syntax
 
-This language is an *extension* to the link:simple.html[Simple] language
-so the link:simple.html[Simple] syntax applies also. So the table below
+This language is an *extension* to the <<simple-language,Simple>> language
+so the <<simple-language,Simple>> syntax applies also. So the table below
 only lists the additional.  +
- As opposed to link:simple.html[Simple] language
-link:file-language.html[File Language] also supports
-link:constant.html[Constant] expressions so you can enter a fixed
+ As opposed to <<simple-language,Simple>> language
+<<file-language,File Language>> also supports
+<<constant-language,Constant>> expressions so you can enter a fixed
 filename.
 
 All the file tokens use the same expression name as the method on the
 `java.io.File` object, for instance `file:absolute` refers to the
 `java.io.File.getAbsolute()` method. Notice that not all expressions are
-supported by the current Exchange. For instance the link:ftp.html[FTP]
+supported by the current Exchange. For instance the <<ftp-component,FTP>>
 component supports some of the options, where as the
 link:file2.html[File] component supports all of them.
 
@@ -95,9 +95,9 @@ this expression strips only the last part, and keep the others.
 |file:modified |Date |yes |no |yes |no |Refers to the file last modified returned as a Date type
 
 |date:_command:pattern_ |String |yes |yes |yes |yes |for date formatting using the `java.text.SimpleDateFormat` patterns. Is
-an *extension* to the link:simple.html[Simple] language. Additional
+an *extension* to the <<simple-language,Simple>> language. Additional
 command is: *file* (consumers only) for the last modified timestamp of
-the file. Notice: all the commands from the link:simple.html[Simple]
+the file. Notice: all the commands from the <<simple-language,Simple>>
 language can also be used.
 |===
 
@@ -171,7 +171,7 @@ return as:
 
 === Samples
 
-You can enter a fixed link:constant.html[Constant] expression such as
+You can enter a fixed <<constant-language,Constant>> expression such as
 `myfile.txt`:
 
 [source]
@@ -196,7 +196,7 @@ should be a sibling folder then you can append .. as:
 fileName="../backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"
 ----
 
-As this is an extension to the link:simple.html[Simple] language we have
+As this is an extension to the <<simple-language,Simple>> language we have
 access to all the goodies from this language also, so in this use case
 we want to use the in.header.type as a parameter in the dynamic
 expression:
@@ -223,14 +223,14 @@ fileName="uniquefile-${bean:myguidgenerator.generateid}.txt"
 ----
 
 And of course all this can be combined in one expression where you can
-use the link:file-language.html[File Language], link:simple.html[Simple]
-and the link:bean.html[Bean] language in one combined expression. This
+use the <<file-language,File Language>>, <<file-language,Simple>>
+and the <<bean-component,Bean>> language in one combined expression. This
 is pretty powerful for those common file path patterns.
 
 === Using Spring PropertyPlaceholderConfigurer together with the File component
 
-In Camel you can use the link:file-language.html[File Language] directly
-from the link:simple.html[Simple] language which makes a
+In Camel you can use the <<file-language,File Language>> directly
+from the <<simple-language,Simple>> language which makes a
 link:content-based-router.html[Content Based Router] easier to do in
 Spring XML, where we can route based on file extensions as shown below:
 
diff --git a/camel-core/src/main/docs/gzip-dataformat.adoc b/camel-core/src/main/docs/gzip-dataformat.adoc
index 70bc62a..2ec6fef 100644
--- a/camel-core/src/main/docs/gzip-dataformat.adoc
+++ b/camel-core/src/main/docs/gzip-dataformat.adoc
@@ -5,7 +5,7 @@
 
 The GZip link:data-format.html[Data Format] is a message compression and
 de-compression format. It uses the same deflate algorithm that is used
-in link:zip-dataformat.html[Zip DataFormat], although some additional
+in <<zip-dataformat,Zip DataFormat>>, although some additional
 headers are provided. This format is produced by popular `gzip`/`gunzip`
 tool. Messages marshalled using GZip compression can be unmarshalled
 using GZip decompression just prior to being consumed at the endpoint.
diff --git a/camel-core/src/main/docs/language-component.adoc b/camel-core/src/main/docs/language-component.adoc
index 8eb82be..4d29204 100644
--- a/camel-core/src/main/docs/language-component.adoc
+++ b/camel-core/src/main/docs/language-component.adoc
@@ -15,7 +15,7 @@ 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
-link:groovy.html[Groovy] or link:javascript.html[JavaScript] languages.
+<<groovy-language,Groovy>> or <<groovy-language,JavaScript>> languages.
 
 === URI format
 
@@ -26,7 +26,7 @@ language://languageName[:script][?options]
 
 And from Camel 2.11 onwards you can refer to an external resource for
 the script using same notation as supported by the other
-link:language.html[Language]s in Camel
+<<language-component,Language>>s in Camel
 
 [source]
 ----
@@ -90,17 +90,17 @@ script configured on the endpoint.
 
 === Examples
 
-For example you can use the link:simple.html[Simple] language to
+For example you can use the <<simple-language,Simple>> language to
 link:message-translator.html[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 link:groovy.html[Groovy] language, such as this
+You can also use the <<groovy-language,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
-link:xpath.html[XPath] language to extract the text from the `<foo>`
+<<xpath-language,XPath>> language to extract the text from the `<foo>`
 tag.
 
 [source,java]
@@ -127,5 +127,5 @@ evaluation. +
 updated script is used:
 
 From *Camel 2.11* onwards you can refer to the resource similar to the
-other link:language.html[Language]s in Camel by prefixing with
+other <<language-component,Language>>s in Camel by prefixing with
 `"resource:"` as shown below:
\ No newline at end of file
diff --git a/camel-core/src/main/docs/log-component.adoc b/camel-core/src/main/docs/log-component.adoc
index d6a04ce..8e46851 100644
--- a/camel-core/src/main/docs/log-component.adoc
+++ b/camel-core/src/main/docs/log-component.adoc
@@ -227,7 +227,7 @@ Note that the masking formatter must implement `org.apache.camel.spi.MaskingForm
 
 *Available as of Camel 2.11*
 
-With the options outlined in the link:log.html[#Formatting] section, you
+With the options outlined in the <<log-component,#Formatting>> section, you
 can control much of the output of the logger. However, log lines will
 always follow this structure:
 
diff --git a/camel-core/src/main/docs/mock-component.adoc b/camel-core/src/main/docs/mock-component.adoc
index 8170645..532b223 100644
--- a/camel-core/src/main/docs/mock-component.adoc
+++ b/camel-core/src/main/docs/mock-component.adoc
@@ -5,8 +5,8 @@
 
 
 link:testing.html[Testing] of distributed and asynchronous processing is
-notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
-and link:dataset.html[DataSet] endpoints work great with the
+notoriously difficult. The <<mock-component,Mock>>, <<mock-component,Test>>
+and <<dataset-component,DataSet>> endpoints work great with the
 link:testing.html[Camel Testing Framework] to simplify your unit and
 integration testing using
 link:enterprise-integration-patterns.html[Enterprise Integration
@@ -29,16 +29,16 @@ link:expression.html[Expression] to create an order testing function,
 * Messages arrive match some kind of link:predicate.html[Predicate] such
 as that specific headers have certain values, or that parts of the
 messages match some predicate, such as by evaluating an
-link:xpath.html[XPath] or link:xquery.html[XQuery]
+<<xpath-language,XPath>> or <<xpath-language,XQuery>>
 link:expression.html[Expression].
 
 [NOTE]
-There is also the link:test.html[Test endpoint] which is a
+There is also the <<test-component,Test endpoint>> which is a
 Mock endpoint, but which uses a second endpoint to provide the list of
 expected message bodies and automatically sets up the Mock endpoint
 assertions. In other words, it's a Mock endpoint that automatically sets
 up its assertions from some sample messages in a link:file2.html[File]
-or link:jpa.html[database], for example.
+or <<jpa-component,database>>, for example.
 
 [CAUTION]
 *Mock endpoints keep received Exchanges in memory indefinitely.* +
@@ -244,7 +244,7 @@ Camel routes.
 
 [NOTE]
 *How it works* The endpoints are still in action. What happens differently
-is that a link:mock.html[Mock] endpoint is injected and receives the
+is that a <<mock-component,Mock>> endpoint is injected and receives the
 message first and then delegates the message to the target endpoint. You
 can view this as a kind of intercept and delegate or endpoint listener.
 
@@ -351,7 +351,7 @@ include::../../../../components/camel-spring/src/test/resources/org/apache/camel
 Then in your unit test you load the new XML file
 (`test-camel-route.xml`) instead of `camel-route.xml`.
 
-To only mock all link:log.html[Log] endpoints you can define the pattern
+To only mock all <<log-component,Log>> endpoints you can define the pattern
 in the constructor for the bean:
 
 [source,xml]
@@ -391,7 +391,7 @@ include::../../../../components/camel-test/src/test/java/org/apache/camel/test/p
 
 *Available as of Camel 2.10*
 
-The link:mock.html[Mock] endpoints will by default keep a copy of every
+The <<mock-component,Mock>> endpoints will by default keep a copy of every
 link:exchange.html[Exchange] that it received. So if you test with a lot
 of messages, then it will consume memory. +
 From Camel 2.10 onwards we have introduced two options `retainFirst` and
@@ -426,7 +426,7 @@ expectations on the 10 retained messages.
 
 *Available as of Camel 2.7*
 
-The link:mock.html[Mock] endpoint stores the arrival time of the message
+The <<mock-component,Mock>> endpoint stores the arrival time of the message
 as a property on the link:exchange.html[Exchange].
 
 [source,java]
@@ -437,7 +437,7 @@ Date time = exchange.getProperty(Exchange.RECEIVED_TIMESTAMP, Date.class);
 You can use this information to know when the message arrived on the
 mock. But it also provides foundation to know the time interval between
 the previous and next message arrived on the mock. You can use this to
-set expectations using the `arrives` DSL on the link:mock.html[Mock]
+set expectations using the `arrives` DSL on the <<mock-component,Mock>>
 endpoint.
 
 For example to say that the first message should arrive between 0-2
diff --git a/camel-core/src/main/docs/properties-component.adoc b/camel-core/src/main/docs/properties-component.adoc
index dca3957..b12529b 100644
--- a/camel-core/src/main/docs/properties-component.adoc
+++ b/camel-core/src/main/docs/properties-component.adoc
@@ -106,7 +106,7 @@ The property placeholder is generally in use when doing:
 * lookup of beans in the link:registry.html[Registry]
 * additional supported in Spring XML (see below in examples)
 * using Blueprint PropertyPlaceholder with Camel
-link:properties.html[Properties] component
+<<properties-component,Properties>> component
 * using `@PropertyInject` to inject a property in a POJO
 * *Camel 2.14.1* Using default value if a property does not exists
 * *Camel 2.14.1* Include out of the box functions, to lookup property
@@ -309,7 +309,7 @@ inside the Spring as well as the Blueprint XML.
 For example in OSGi you may want to expose a service which returns the
 properties as a `java.util.Properties` object.
 
-Then you could setup the link:properties.html[Properties] component as
+Then you could setup the <<properties-component,Properties>> component as
 follows:
 
 [source,xml]
@@ -408,9 +408,9 @@ link:producertemplate.html[ProducerTemplate] for example:
 template.sendBody("{{cool.start}}", "Hello World");
 ----
 
-=== Example with link:simple.html[Simple] language
+=== Example with <<simple-language,Simple>> language
 
-The link:simple.html[Simple] language now also support using property
+The <<simple-language,Simple>> language now also support using property
 placeholders, for example in the route below:
 
 [source,java]
@@ -423,7 +423,7 @@ from("direct:start")
     .transform().simple("Hi ${body} do you think ${properties:cheese.quote}?");
 ----
 
-You can also specify the location in the link:simple.html[Simple]
+You can also specify the location in the <<simple-language,Simple>>
 language for example:
 
 [source,java]
@@ -720,7 +720,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 link:simple.html[Simple] in Camel, and therefore
+syntax clashes with the <<simple-language,Simple>> in Camel, and therefore
 take care. For example:
 
 [source,xml]
@@ -731,7 +731,7 @@ take care. For example:
 ----
 
 clashes with Spring property placeholders, and you should use `$simple{ }`
-to indicate using the link:simple.html[Simple] language in Camel.
+to indicate using the <<simple-language,Simple>> language in Camel.
 
 [source,xml]
 ----
@@ -748,7 +748,7 @@ An alternative is to configure the `PropertyPlaceholderConfigurer` with
 *Available as of Camel 2.10*
 
 When link:testing.html[Testing] with Camel and using the
-link:properties.html[Properties] component, you may want to be able to
+<<properties-component,Properties>> component, you may want to be able to
 provide the properties to be used from directly within the unit test
 source code. +
 This is now possible from Camel 2.10 onwards, as the Camel test kits, eg
@@ -827,7 +827,7 @@ private int timeout;
 
 *Available as of Camel 2.14.1*
 
-The link:properties.html[Properties] component includes the following
+The <<properties-component,Properties>> component includes the following
 functions out of the box
 
 * `env` - A function to lookup the property from OS environment variables
@@ -895,7 +895,7 @@ export $FOO_SERVICE_PORT=8888
 
 For example if the FOO service a remote HTTP service, then we can refer
 to the service in the Camel endpoint uri, and use
-the link:http.html[HTTP] component to make the HTTP call:
+the <<http-component,HTTP>> component to make the HTTP call:
 
 [source,xml]
 ----
@@ -924,7 +924,7 @@ example to call a service on localhost, maybe for unit testing etc
 
 *Available as of Camel 2.14.1*
 
-The link:properties.html[Properties] component allow to plugin 3rd party
+The <<properties-component,Properties>> component allow to plugin 3rd party
 functions which can be used during parsing of the property placeholders.
 These functions are then able to do custom logic to resolve the
 placeholders, such as looking up in databases, do custom computations,
@@ -992,6 +992,6 @@ pc.addFunction(new MyBeerFunction());
 
 === See Also
 
-* link:properties.html[Properties] component
+* <<properties-component,Properties>> component
 * link:jasypt.html[Jasypt] for using encrypted values (eg passwords) in
 the properties
\ No newline at end of file
diff --git a/camel-core/src/main/docs/request-reply.adoc b/camel-core/src/main/docs/request-reply.adoc
index 339c7fd..5b7a75f 100644
--- a/camel-core/src/main/docs/request-reply.adoc
+++ b/camel-core/src/main/docs/request-reply.adoc
@@ -11,7 +11,7 @@ this pattern using the underlying transport or protocols.
 
 image:http://www.enterpriseintegrationpatterns.com/img/RequestReply.gif[image]
 
-For example when using link:jms.html[JMS] with InOut the component will
+For example when using <<jms-component,JMS>> with InOut the component will
 by default perform these actions
 
 * create by default a temporary inbound queue
@@ -27,7 +27,7 @@ TIP: *Related* See the related link:event-message.html[Event Message] message
 [[RequestReply-ExplicitlyspecifyingInOut]]
 === Explicitly specifying InOut
 
-When consuming messages from link:jms.html[JMS] a Request-Reply is
+When consuming messages from <<jms-component,JMS>> a Request-Reply is
 indicated by the presence of the *JMSReplyTo* header.
 
 You can explicitly force an endpoint to be in Request Reply mode by
diff --git a/camel-core/src/main/docs/rest-component.adoc b/camel-core/src/main/docs/rest-component.adoc
index 3bc6b74..f045422 100644
--- a/camel-core/src/main/docs/rest-component.adoc
+++ b/camel-core/src/main/docs/rest-component.adoc
@@ -245,4 +245,4 @@ containers.
 === See Also
 
 * link:rest-dsl.html[Rest DSL]
-* link:servlet.html[SERVLET]
\ No newline at end of file
+* <<servlet-component,SERVLET>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/rest-dsl.adoc b/camel-core/src/main/docs/rest-dsl.adoc
index fc5c201..7032e42 100644
--- a/camel-core/src/main/docs/rest-dsl.adoc
+++ b/camel-core/src/main/docs/rest-dsl.adoc
@@ -8,10 +8,10 @@ REST style with verbs such as get, post, delete etc.
 
 === How it works
 
-The Rest DSL is a facade that builds link:rest.html[Rest] endpoints as
+The Rest DSL is a facade that builds <<rest-component,Rest>> endpoints as
 consumers for Camel routes. The actual REST transport is leveraged by
 using Camel REST components such
-as link:restlet.html[Restlet], link:spark-rest.html[Spark-rest], and
+as <<restlet-component,Restlet>>, <<restlet-component,Spark-rest>>, and
 others that has native REST integration.
 
 === Components supporting Rest DSL
@@ -19,19 +19,19 @@ others that has native REST integration.
 The following Camel components supports the Rest DSL. See the bottom of
 this page for how to integrate a component with the Rest DSL.
 
-* link:netty-http.html[camel-netty-http] (also
+* <<netty-http-component,camel-netty-http>> (also
 supports link:swagger-java.html[Swagger Java])
-* link:netty4-http.html[camel-netty4-http] (also
+* <<netty4-http-component,camel-netty4-http>> (also
 supports link:swagger-java.html[Swagger Java])
-* link:jetty.html[camel-jetty] (also
+* <<jetty-component,camel-jetty>> (also
 supports link:swagger-java.html[Swagger Java])
-* link:restlet.html[camel-restlet] (also
+* <<restlet-component,camel-restlet>> (also
 supports link:swagger-java.html[Swagger Java])
-* link:servlet.html[camel-servlet] (also
+* <<servlet-component,camel-servlet>> (also
 supports link:swagger-java.html[Swagger Java])
-* link:spark-rest.html[camel-spark-rest] (also
+* <<spark-rest-component,camel-spark-rest>> (also
 supports link:swagger-java.html[Swagger Java] from Camel 2.17 onwards)
-* link:undertow.html[camel-undertow] (also
+* <<undertow-component,camel-undertow>> (also
 supports link:swagger-java.html[Swagger Java] from Camel 2.17 onwards)
 
 === Rest DSL with Java
@@ -180,7 +180,7 @@ only. The example above can be defined as:
 
 The link:rest-dsl.html[Rest DSL] supports the new .toD <toD> as dynamic
 to in the rest-dsl. For example to do a request/reply
-over link:jms.html[JMS] where the queue name is dynamic defined
+over <<jms-component,JMS>> where the queue name is dynamic defined
 
 [source,java]
 ----
@@ -203,7 +203,7 @@ over link:jms.html[JMS] where the queue name is dynamic defined
 
 See more details at link:message-endpoint.html[Message Endpoint] about
 the dynamic to, and what syntax it supports. By default it uses
-the link:simple.html[Simple] language, but it has more power than so.
+the <<simple-language,Simple>> language, but it has more power than so.
 
 === Embedding Camel routes
 
diff --git a/camel-core/src/main/docs/return-address.adoc b/camel-core/src/main/docs/return-address.adoc
index c0c5e6f5..239e788 100644
--- a/camel-core/src/main/docs/return-address.adoc
+++ b/camel-core/src/main/docs/return-address.adoc
@@ -7,7 +7,7 @@ patterns] by using the `JMSReplyTo` header.
 
 image:http://www.enterpriseintegrationpatterns.com/img/ReturnAddressSolution.gif[image]
 
-For example when using link:jms.html[JMS] with InOut the component will
+For example when using <<jms-component,JMS>> with InOut the component will
 by default return to the address given in `JMSReplyTo`.
 
 *Requestor Code*
diff --git a/camel-core/src/main/docs/scheduler-component.adoc b/camel-core/src/main/docs/scheduler-component.adoc
index dc212b3..fbb9a49 100644
--- a/camel-core/src/main/docs/scheduler-component.adoc
+++ b/camel-core/src/main/docs/scheduler-component.adoc
@@ -5,7 +5,7 @@
 
 The *scheduler:* component is used to generate message exchanges when a
 scheduler fires. This component is similar to the
- link:timer.html[Timer] component, but it offers more functionality in
+ <<timer-component,Timer>> component, but it offers more functionality in
 terms of scheduling. Also this component uses
 JDK `ScheduledExecutorService`. Where as the timer uses a JDK `Timer`.
 
@@ -158,5 +158,5 @@ exchange.
 
 === See Also
 
-* link:timer.html[Timer]
-* link:quartz.html[Quartz]
\ No newline at end of file
+* <<timer-component,Timer>>
+* <<quartz-component,Quartz>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/seda-component.adoc b/camel-core/src/main/docs/seda-component.adoc
index f09f6a5..3edb668 100644
--- a/camel-core/src/main/docs/seda-component.adoc
+++ b/camel-core/src/main/docs/seda-component.adoc
@@ -12,15 +12,15 @@ and consumers are invoked in a separate thread from the producer.
 Note that queues are only visible within a _single_
 link:camelcontext.html[CamelContext]. If you want to communicate across
 `CamelContext` instances (for example, communicating between Web
-applications), see the link:vm.html[VM] component.
+applications), see the <<vm-component,VM>> component.
 
 This component does not implement any kind of persistence or recovery,
 if the VM terminates while messages are yet to be processed. If you need
 persistence, reliability or distributed SEDA, try using either
-link:jms.html[JMS] or link:activemq.html[ActiveMQ].
+<<jms-component,JMS>> or <<jms-component,ActiveMQ>>.
 
 TIP:*Synchronous*
-The link:direct.html[Direct] component provides synchronous invocation
+The <<direct-component,Direct>> component provides synchronous invocation
 of any consumers when a producer sends a message exchange.
 
 === URI format
@@ -133,7 +133,7 @@ ArrayBlockingQueueFactory and PriorityBlockingQueueFactory:
 
 === Use of Request Reply
 
-The link:seda.html[SEDA] component supports using
+The <<seda-component,SEDA>> component supports using
 link:request-reply.html[Request Reply], where the caller will wait for
 the link:async.html[Async] route to complete. For instance:
 
@@ -152,7 +152,7 @@ copies the response to the original message response.
 
 NOTE: *until 2.2: Works only with 2 endpoints*
 Using link:request-reply.html[Request Reply] over link:seda.html[SEDA]
-or link:vm.html[VM] only works with 2 endpoints. You *cannot* chain
+or <<vm-component,VM>> only works with 2 endpoints. You *cannot* chain
 endpoints by sending to A -> B -> C etc. Only between A -> B. The reason
 is the implementation logic is fairly simple. To support 3+ endpoints
 makes the logic much more complex to handle ordering and notification
@@ -187,7 +187,7 @@ from("seda:stageName").thread(5).process(...)
 
 Can wind up with two `BlockQueues`: one from the SEDA endpoint, and one
 from the workqueue of the thread pool, which may not be what you want.
-Instead, you might wish to configure a link:direct.html[Direct] endpoint
+Instead, you might wish to configure a <<direct-component,Direct>> endpoint
 with a thread pool, which can process messages both synchronously and
 asynchronously. For example:
 
@@ -241,7 +241,7 @@ int size = seda.getExchanges().size();
 
 === See Also
 
-* link:vm.html[VM]
-* link:disruptor.html[Disruptor]
-* link:direct.html[Direct]
+* <<vm-component,VM>>
+* <<disruptor-component,Disruptor>>
+* <<direct-component,Direct>>
 * link:async.html[Async]
\ No newline at end of file
diff --git a/camel-core/src/main/docs/simple-language.adoc b/camel-core/src/main/docs/simple-language.adoc
index f45c1da..bf66151 100644
--- a/camel-core/src/main/docs/simple-language.adoc
+++ b/camel-core/src/main/docs/simple-language.adoc
@@ -8,19 +8,19 @@ created, but has since grown more powerful. It is primarily intended for
 being a really small and simple language for evaluating
 link:expression.html[Expression]s and link:predicate.html[Predicate]s
 without requiring any new dependencies or knowledge of
-link:xpath.html[XPath]; so it is ideal for testing in camel-core. The
+<<xpath-language,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:
 
-* link:spel.html[SpEL]
-* link:mvel.html[Mvel]
-* link:groovy.html[Groovy]
+* <<spel-language,SpEL>>
+* <<mvel-component,Mvel>>
+* <<groovy-language,Groovy>>
 * link:javascript.html[JavaScript]
-* link:el.html[EL]
-* link:ognl.html[OGNL]
+* <<el-language,EL>>
+* <<ognl-language,OGNL>>
 * one of the supported link:scripting-languages.html[Scripting
 Languages]
 
@@ -36,13 +36,13 @@ Spring property placeholder together with Camel.
 
 === Simple Language Changes in Camel 2.9 onwards
 
-The link:simple.html[Simple] language have been improved from Camel 2.9
+The <<simple-language,Simple>> language have been improved from Camel 2.9
 onwards to use a better syntax parser, which can do index precise error
 messages, so you know exactly what is wrong and where the problem is.
 For example if you have made a typo in one of the operators, then
 previously the parser would not be able to detect this, and cause the
 evaluation to be true. There are a few changes in the syntax which are
-no longer backwards compatible. When using link:simple.html[Simple]
+no longer backwards compatible. When using <<simple-language,Simple>>
 language as a link:predicate.html[Predicate] then the literal text
 *must* be enclosed in either single or double quotes. For example:
 `"${body} == 'Camel'"`. Notice how we have single quotes around the
@@ -215,9 +215,9 @@ Command accepts offsets such as: *now-24h* or *in.header.xxx+1h* or even *now+1h
 
 |date-with-timezone:_command:timezone:pattern_ |String |Date formatting using `java.text.SimpleDataFormat` timezones and patterns.
 
-|bean:_bean expression_ |Object |Invoking a bean expression using the link:bean.html[Bean] language.
+|bean:_bean expression_ |Object |Invoking a bean expression using the <<bean-component,Bean>> language.
 Specifying a method name you must use dot as separator. We also support
-the ?method=methodname syntax that is used by the link:bean.html[Bean]
+the ?method=methodname syntax that is used by the <<bean-component,Bean>>
 component.
 
 |properties:_locations:key_ |String |*Deprecated (use properties-location instead) Camel 2.3:* Lookup a
@@ -281,7 +281,7 @@ fields. From *Camel 2.11.1* onwards we added special support for accessing the
 length field of Java arrays.
 
 
-The link:simple.html[Simple] and link:bean.html[Bean] language now
+The <<simple-language,Simple>> and <<simple-language,Bean>> language now
 supports a Camel OGNL notation for invoking beans in a chain like
 fashion. Suppose the Message IN body contains a POJO which has a `getAddress()`
 method.
@@ -502,7 +502,7 @@ function, otherwise parsed as literal.
 |\ |*Camel 2.9.3 to 2.10.x* To escape a value, eg \$, to indicate a $ sign.
 Special: Use \n for new line, \t for tab, and \r for carriage return.
 *Notice:* Escaping is *not* supported using the
-link:file-language.html[File Language]. *Notice:* From Camel 2.11
+<<file-language,File Language>>. *Notice:* From Camel 2.11
 onwards the escape character is no longer support, but replaced with the
 following three special escaping.
 
@@ -803,7 +803,7 @@ from("direct:order")
 ----
 
 We can use the `?method=methodname` option that we are familiar with the
-link:bean.html[Bean] component itself:
+<<bean-component,Bean>> component itself:
 
 [source,java]
 ----
@@ -858,7 +858,7 @@ From Camel 2.9 onwards you can nest functions, such as shown below:
 Suppose you have an enum for customers
 
 And in a link:content-based-router.html[Content Based Router] we can use
-the link:simple.html[Simple] language to refer to this enum, to check
+the <<simple-language,Simple>> language to refer to this enum, to check
 the message which enum it matches.
 
 === Using new lines or tabs in XML DSLs
@@ -895,7 +895,7 @@ whitespace characters.
 
 *Available as of Camel 2.8*
 
-You can now provide a result type to the link:simple.html[Simple]
+You can now provide a result type to the <<simple-language,Simple>>
 expression, which means the result of the evaluation will be converted
 to the desired type. This is most useable to define types such as
 booleans, integers, etc.
@@ -977,4 +977,4 @@ You can set a spring bean into an exchange property as shown below:
 
 === Dependencies
 
-The link:simple.html[Simple] language is part of *camel-core*.
\ No newline at end of file
+The <<simple-language,Simple>> language is part of *camel-core*.
\ No newline at end of file
diff --git a/camel-core/src/main/docs/stub-component.adoc b/camel-core/src/main/docs/stub-component.adoc
index f38eed6..0a77d0f 100644
--- a/camel-core/src/main/docs/stub-component.adoc
+++ b/camel-core/src/main/docs/stub-component.adoc
@@ -6,12 +6,12 @@
 The *stub:* component provides a simple way to stub out any physical
 endpoints while in development or testing, allowing you for example to
 run a route without needing to actually connect to a specific
-link:mail.html[SMTP] or link:http.html[Http] endpoint. Just add *stub:*
+<<mail-component,SMTP>> or <<mail-component,Http>> endpoint. Just add *stub:*
 in front of any endpoint URI to stub out the endpoint.
 
-Internally the Stub component creates link:vm.html[VM] endpoints. The
-main difference between link:stub.html[Stub] and link:vm.html[VM] is
-that link:vm.html[VM] will validate the URI and parameters you give it,
+Internally the Stub component creates <<vm-component,VM>> endpoints. The
+main difference between <<stub-component,Stub>> and <<stub-component,VM>> is
+that <<vm-component,VM>> will validate the URI and parameters you give it,
 so putting vm: in front of a typical URI with query arguments will
 usually fail. Stub won't though, as it basically ignores all query
 parameters to let you quickly stub out one or more endpoints in your
diff --git a/camel-core/src/main/docs/test-component.adoc b/camel-core/src/main/docs/test-component.adoc
index a09b61c..a590b50 100644
--- a/camel-core/src/main/docs/test-component.adoc
+++ b/camel-core/src/main/docs/test-component.adoc
@@ -4,23 +4,23 @@
 *Available as of Camel version 1.3*
 
 link:testing.html[Testing] of distributed and asynchronous processing is
-notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
-and link:dataset.html[DataSet] endpoints work great with the
+notoriously difficult. The <<mock-component,Mock>>, <<mock-component,Test>>
+and <<dataset-component,DataSet>> endpoints work great with the
 link:testing.html[Camel Testing Framework] to simplify your unit and
 integration testing using
 link:enterprise-integration-patterns.html[Enterprise Integration
 Patterns] and Camel's large range of link:components.html[Components]
 together with the powerful link:bean-integration.html[Bean Integration].
 
-The *test* component extends the link:mock.html[Mock] component to
+The *test* component extends the <<mock-component,Mock>> component to
 support pulling messages from another endpoint on startup to set the
-expected message bodies on the underlying link:mock.html[Mock] endpoint.
+expected message bodies on the underlying <<mock-component,Mock>> endpoint.
 That is, you use the test endpoint in a route and messages arriving on
 it will be implicitly compared to some expected messages extracted from
 some other location.
 
 So you can use, for example, an expected set of message bodies as files.
-This will then set up a properly configured link:mock.html[Mock]
+This will then set up a properly configured <<mock-component,Mock>>
 endpoint, which is only valid if the received messages match the number
 of expected messages and their message payloads are equal.
 
@@ -37,7 +37,7 @@ for this component when using *Camel 2.8* or older:
 </dependency>
 ----
 
-From Camel 2.9 onwards the link:test.html[Test] component is provided
+From Camel 2.9 onwards the <<test-component,Test>> component is provided
 directly in the camel-core.
 
 === URI format
@@ -113,7 +113,7 @@ http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/compon
 method], your test case will perform the necessary assertions.
 
 To see how you can set other expectations on the test endpoint, see the
-link:mock.html[Mock] component.
+<<mock-component,Mock>> component.
 
 === See Also
 
diff --git a/camel-core/src/main/docs/timer-component.adoc b/camel-core/src/main/docs/timer-component.adoc
index 0d882ab..5bc70a6 100644
--- a/camel-core/src/main/docs/timer-component.adoc
+++ b/camel-core/src/main/docs/timer-component.adoc
@@ -24,7 +24,7 @@ You can append query options to the URI in the following format,
 `exchange.getIn().getBody()` returns `null`.
 
 TIP:*Advanced Scheduler*
-See also the link:quartz.html[Quartz] component that supports much more
+See also the <<quartz-component,Quartz>> component that supports much more
 advanced scheduling.
 
 TIP:*Specify time in human friendly format*
@@ -164,5 +164,5 @@ starting the route. To do that you use the repeatCount option as shown:
 
 === See Also
 
-* link:scheduler.html[Scheduler]
-* link:quartz.html[Quartz]
\ No newline at end of file
+* <<scheduler-component,Scheduler>>
+* <<quartz-component,Quartz>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/validator-component.adoc b/camel-core/src/main/docs/validator-component.adoc
index d933bb6..a3dc1f2 100644
--- a/camel-core/src/main/docs/validator-component.adoc
+++ b/camel-core/src/main/docs/validator-component.adoc
@@ -8,14 +8,14 @@ using the JAXP Validation API and based on any of the supported XML
 schema languages, which defaults to http://www.w3.org/XML/Schema[XML
 Schema]
 
-Note that the link:jing.html[Jing] component also supports the following
+Note that the <<jing-component,Jing>> component also supports the following
 useful schema languages:
 
 * http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
 Syntax]
 * http://relaxng.org/[RelaxNG XML Syntax]
 
-The link:msv.html[MSV] component also supports
+The <<msv-component,MSV>> component also supports
 http://relaxng.org/[RelaxNG XML Syntax].
 
 === URI format
diff --git a/camel-core/src/main/docs/validator.adoc b/camel-core/src/main/docs/validator.adoc
index 443c8e5..683c3e6 100644
--- a/camel-core/src/main/docs/validator.adoc
+++ b/camel-core/src/main/docs/validator.adoc
@@ -105,7 +105,7 @@ And here is an example to specify endpoint ref in XML DSL:
 
 Note that the Endpoint Validator just forwards the message to the specified endpoint. In above example,
 camel forwards the message to the `validator:` endpoint, which actually is a
-link:validator-component.adoc[Validation Component]. You can also use any other validation component like
+<<validator-component,Validation Component>>. You can also use any other validation component like
 link:bean-validation.html[Bean Validation Component].
 
 [[Validator-Custom]]
diff --git a/camel-core/src/main/docs/vm-component.adoc b/camel-core/src/main/docs/vm-component.adoc
index 989256a..c21db86 100644
--- a/camel-core/src/main/docs/vm-component.adoc
+++ b/camel-core/src/main/docs/vm-component.adoc
@@ -9,12 +9,12 @@ messages on a
 http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
 and invoking consumers in a separate thread pool.
 
-This component differs from the link:seda.html[Seda] component in that
+This component differs from the <<seda-component,Seda>> component in that
 VM supports communication across CamelContext instances - so you can use
 this mechanism to communicate across web applications (provided that
 `camel-core.jar` is on the `system/boot` classpath).
 
-VM is an extension to the link:seda.html[Seda] component.
+VM is an extension to the <<seda-component,Seda>> component.
 
 === URI format
 
@@ -30,9 +30,9 @@ camel-core.jar)
 You can append query options to the URI in the following format:
 `?option=value&option=value&...`
 
-An exactly identical link:vm.html[VM] endpoint URI *must* be used for
+An exactly identical <<vm-component,VM>> endpoint URI *must* be used for
 both the producer and the consumer endpoint. Otherwise, Camel will
-create a second link:vm.html[VM] endpoint despite that the `queueName`
+create a second <<vm-component,VM>> endpoint despite that the `queueName`
 portion of the URI is identical. For example:
 
 [source,java]
@@ -116,8 +116,8 @@ with the following path and query parameters:
 // endpoint options: END
 
 
-See the link:seda.html[Seda] component for options and other important
-usage details as the same rules apply to the link:vm.html[Vm] component.
+See the <<seda-component,Seda>> component for options and other important
+usage details as the same rules apply to the <<vm-component,Vm>> component.
 
 === Samples
 
@@ -139,4 +139,4 @@ from("vm:order.email").bean(MyOrderEmailSender.class);
 
 === See Also
 
-* link:seda.html[Seda]
\ No newline at end of file
+* <<seda-component,Seda>>
\ No newline at end of file
diff --git a/camel-core/src/main/docs/xpath-language.adoc b/camel-core/src/main/docs/xpath-language.adoc
index cd49968..c8ace31 100644
--- a/camel-core/src/main/docs/xpath-language.adoc
+++ b/camel-core/src/main/docs/xpath-language.adoc
@@ -16,7 +16,7 @@ link:recipient-list.html[Recipient List].
 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
-link:xpath.html[XPath] as link:message-filter.html[Message Filter] or
+<<xpath-language,XPath>> as <<xpath-language,Message Filter>> or
 link:content-based-router.html[Content Based Router] then you need to
 access the data multiple times, and you should use
 link:stream-caching.html[Stream Caching] or convert the message body to
@@ -125,9 +125,9 @@ exchange:
 |out:header |the header name |Object |Will return the *out* message header.
 
 |function:properties |key for property |String |*Camel 2.5:* To lookup a property using the
-link:properties.html[Properties] component (property placeholders).
+<<properties-component,Properties>> component (property placeholders).
 
-|function:simple |simple expression |Object |*Camel 2.5:* To evaluate a link:simple.html[Simple] expression.
+|function:simple |simple expression |Object |*Camel 2.5:* To evaluate a <<simple-language,Simple>> expression.
 |===
 
 CAUTION: `function:properties` and `function:simple` is not supported
@@ -172,10 +172,10 @@ on the mailinglist] about using your own namespaces with xpath
 
 === Setting result type
 
-The link:xpath.html[XPath] expression will return a result type using
+The <<xpath-language,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
-link:xpath.html[XPath] which result type to use.
+<<xpath-language,XPath>> which result type to use.
 
 In Java DSL:
 
@@ -422,7 +422,7 @@ Any of these options can be used to activate this logging:
 `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
-link:xpath.html[Auditing Namespaces], in which case the logging will
+<<xpath-language,Auditing Namespaces>>, in which case the logging will
 occur on the INFO level
 
 === Auditing namespaces
diff --git a/camel-core/src/main/docs/xslt-component.adoc b/camel-core/src/main/docs/xslt-component.adoc
index f05d67c..1c8a681 100644
--- a/camel-core/src/main/docs/xslt-component.adoc
+++ b/camel-core/src/main/docs/xslt-component.adoc
@@ -48,7 +48,7 @@ for this component:
 </dependency>
 ----
 
-From *Camel 2.9* onwards the link:xslt.html[XSLT] component is provided
+From *Camel 2.9* onwards the <<xslt-component,XSLT>> component is provided
 directly in the camel-core.
 
 === Options
diff --git a/components/camel-ahc-ws/src/main/docs/ahc-ws-component.adoc b/components/camel-ahc-ws/src/main/docs/ahc-ws-component.adoc
index 2dcbc8d..ff8a193 100644
--- a/components/camel-ahc-ws/src/main/docs/ahc-ws-component.adoc
+++ b/components/camel-ahc-ws/src/main/docs/ahc-ws-component.adoc
@@ -7,7 +7,7 @@ The *ahc-ws* component provides Websocket
 based link:endpoint.html[endpoints] for a client communicating with
 external servers over Websocket (as a client opening a websocket
 connection to an external server). +
-The component uses the link:ahc.html[AHC] component that in turn uses
+The component uses the <<ahc-component,AHC>> component that in turn uses
 the https://github.com/AsyncHttpClient/async-http-client[Async Http
 Client] library.
 
@@ -167,4 +167,4 @@ And the equivalent Spring sample:
 * link:getting-started.html[Getting Started]
 
 * link:../../../../camel-ahc/src/main/docs/readme.html[AHC]
-* link:atmosphere-websocket.html[Atmosphere-Websocket]
\ No newline at end of file
+* <<atmosphere-websocket-component,Atmosphere-Websocket>>
\ No newline at end of file
diff --git a/components/camel-ahc/src/main/docs/ahc-component.adoc b/components/camel-ahc/src/main/docs/ahc-component.adoc
index ec013ce..fffc8a6 100644
--- a/components/camel-ahc/src/main/docs/ahc-component.adoc
+++ b/components/camel-ahc/src/main/docs/ahc-component.adoc
@@ -440,6 +440,6 @@ Spring DSL based configuration of endpoint
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:jetty.html[Jetty]
-* link:http.html[HTTP]
-* link:http4.html[HTTP4]
\ No newline at end of file
+* <<jetty-component,Jetty>>
+* <<http-component,HTTP>>
+* <<http4-component,HTTP4>>
\ No newline at end of file
diff --git a/components/camel-amqp/src/main/docs/amqp-component.adoc b/components/camel-amqp/src/main/docs/amqp-component.adoc
index d6dd2dd..5db7578 100644
--- a/components/camel-amqp/src/main/docs/amqp-component.adoc
+++ b/components/camel-amqp/src/main/docs/amqp-component.adoc
@@ -6,7 +6,7 @@
 The *amqp:* component supports the http://www.amqp.org/[AMQP 1.0
 protocol] using the JMS Client API of the http://qpid.apache.org/[Qpid]
 project. In case you want to use AMQP 0.9 (in particular RabbitMQ) you
-might also be interested in the link:rabbitmq.html[Camel RabbitMQ]
+might also be interested in the <<rabbitmq-component,Camel RabbitMQ>>
 component. Please keep in mind that prior to the Camel 2.17.0 AMQP
 component supported AMQP 0.9 and above, however since Camel 2.17.0 it
 supports only AMQP 1.0.
@@ -330,7 +330,7 @@ AMQPConnectionDetails amqpConnection() {
 }
 ------------------------------------------------------------------------------------- 
 
-You can also rely on the link:properties.html[Camel properties] to read
+You can also rely on the <<properties-component,Camel properties>> to read
 the AMQP connection details. Factory
 method `AMQPConnectionDetails.discoverAMQP()` attempts to read Camel
 properties in a Kubernetes-like convention, just as demonstrated on the
diff --git a/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc b/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
index 320e4dd..5e5364b 100644
--- a/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
+++ b/components/camel-atmosphere-websocket/src/main/docs/atmosphere-websocket-component.adoc
@@ -7,7 +7,7 @@ The *atmosphere-websocket:* component provides Websocket
 based link:endpoint.html[endpoints] for a servlet communicating with
 external clients over Websocket (as a servlet accepting websocket
 connections from external clients). +
-The component uses the link:servlet.html[SERVLET] component and uses
+The component uses the <<servlet-component,SERVLET>> component and uses
 the https://github.com/Atmosphere/atmosphere[Atmosphere] library to
 support the Websocket transport in various Servlet containers (e..g.,
 Jetty, Tomcat, ...).
@@ -185,7 +185,7 @@ And the equivalent Spring sample:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:servlet.html[SERVLET]
-* link:ahc-ws.html[AHC-WS]
+* <<servlet-component,SERVLET>>
+* <<ahc-ws-component,AHC-WS>>
 *
 https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=39621544[Websocket]
\ No newline at end of file
diff --git a/components/camel-atom/src/main/docs/atom-component.adoc b/components/camel-atom/src/main/docs/atom-component.adoc
index 086e2ff..bd9015f 100644
--- a/components/camel-atom/src/main/docs/atom-component.adoc
+++ b/components/camel-atom/src/main/docs/atom-component.adoc
@@ -146,4 +146,4 @@ in any Container or using Spring.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:rss.html[RSS]
\ No newline at end of file
+* <<rss-component,RSS>>
\ No newline at end of file
diff --git a/components/camel-azure/src/main/docs/azure.adoc b/components/camel-azure/src/main/docs/azure.adoc
index ea11038..6a9b53c 100644
--- a/components/camel-azure/src/main/docs/azure.adoc
+++ b/components/camel-azure/src/main/docs/azure.adoc
@@ -10,6 +10,6 @@ provide connectivity to Azure services from Camel.
 |=======================================================================
 |Azure Service |Camel Component |Camel Version | Component Description
 
-|https://azure.microsoft.com/services/storage/blobs[Storage Blob Service] |link:azure-blob.html[Azure-Blob] |2.9.0 |Supports storing and retrieving of blobs
-|https://azure.microsoft.com/services/storage/queues[Storage Queue Service] |link:azure-queue.html[Azure-Queue] |2.9.0 |Supports storing and retrieving of messages in the queues
+|https://azure.microsoft.com/services/storage/blobs[Storage Blob Service] |<<azure-blob-component,Azure-Blob>> |2.9.0 |Supports storing and retrieving of blobs
+|https://azure.microsoft.com/services/storage/queues[Storage Queue Service] |<<azure-queue-component,Azure-Queue>> |2.9.0 |Supports storing and retrieving of messages in the queues
 |=======================================================================
diff --git a/components/camel-bam/src/main/docs/bam-example.adoc b/components/camel-bam/src/main/docs/bam-example.adoc
index 130d04f..90159eb 100644
--- a/components/camel-bam/src/main/docs/bam-example.adoc
+++ b/components/camel-bam/src/main/docs/bam-example.adoc
@@ -53,17 +53,17 @@ the Camel link:components.html[Components]
 correlate together the purchase order and invoice messages which can be
 any link:expression.html[Expression] via any of the
 link:languages-supported.html[Languages Supported]. In this case we are
-using link:xpath.html[XPath].
+using <<xpath-language,XPath>>.
 
 Then the final line of code defines the temporal rules to use; namely
 that it is considered to be an error if an invoice is not received
 within 2 seconds of a purchase order being received. When a failure
-occurs in this example we just send it to the link:log.html[Log]
+occurs in this example we just send it to the <<log-component,Log>>
 component to log out an error level message to commons-logging / log4j.
 You could change this to use some of the other
 link:components.html[Components] such as link:activemq.html[ActiveMQ],
-link:jms.html[JMS], link:irc.html[IRC], link:mail.html[Mail],
-link:xmpp.html[XMPP] etc.
+<<jms-component,JMS>>, <<jms-component,IRC>>, <<jms-component,Mail>>,
+<<xmpp-component,XMPP>> etc.
 
 ### Running the example
 
diff --git a/components/camel-context/src/main/docs/context-component.adoc b/components/camel-context/src/main/docs/context-component.adoc
index 7f6b0af..c580a27 100644
--- a/components/camel-context/src/main/docs/context-component.adoc
+++ b/components/camel-context/src/main/docs/context-component.adoc
@@ -8,7 +8,7 @@ CamelContext with a number of routes which is then treated as a black
 box, allowing you to refer to the local endpoints within the component
 from other CamelContexts.
 
-It is similar to the link:routebox.html[Routebox] component in idea,
+It is similar to the <<routebox-component,Routebox>> component in idea,
 though the Context component tries to be really simple for end users;
 just a simple convention over configuration approach to refer to local
 endpoints inside the CamelContext Component.
diff --git a/components/camel-crypto/src/main/docs/crypto-dataformat.adoc b/components/camel-crypto/src/main/docs/crypto-dataformat.adoc
index d3d9c83..d4986dd 100644
--- a/components/camel-crypto/src/main/docs/crypto-dataformat.adoc
+++ b/components/camel-crypto/src/main/docs/crypto-dataformat.adoc
@@ -262,7 +262,7 @@ or with spring.
 
 ### Dependencies
 
-To use the link:crypto.html[Crypto] dataformat in your camel routes you
+To use the <<crypto-component,Crypto>> dataformat in your camel routes you
 need to add the following dependency to your pom.
 
 [source,xml]
diff --git a/components/camel-cxf/src/main/docs/cxfrs-component.adoc b/components/camel-cxf/src/main/docs/cxfrs-component.adoc
index c8fd4c1..6702b5e 100644
--- a/components/camel-cxf/src/main/docs/cxfrs-component.adoc
+++ b/components/camel-cxf/src/main/docs/cxfrs-component.adoc
@@ -292,7 +292,7 @@ export the resources classes as a REST service. And we leverage the
 http://cxf.apache.org/docs/invokers.html[CXF Invoker
 API] to turn a REST request into a normal Java object method
 invocation. +
- Unlike the link:restlet.html[Camel Restlet] component, you don't need
+ Unlike the <<restlet-component,Camel Restlet>> component, you don't need
 to specify the URI template within your endpoint, CXF takes care of the
 REST request URI to resource class method mapping according to the
 JSR-311 specification. All you need to do in Camel is delegate this
diff --git a/components/camel-disruptor/src/main/docs/disruptor-component.adoc b/components/camel-disruptor/src/main/docs/disruptor-component.adoc
index bbc9953..e7a2e71 100644
--- a/components/camel-disruptor/src/main/docs/disruptor-component.adoc
+++ b/components/camel-disruptor/src/main/docs/disruptor-component.adoc
@@ -8,10 +8,10 @@ http://www.eecs.harvard.edu/~mdw/proj/seda/[SEDA] behavior much as the
 standard SEDA Component, but utilizes a
 https://github.com/LMAX-Exchange/disruptor[Disruptor] instead of a
 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
-utilized by the standard link:seda.html[SEDA]. Alternatively, a
+utilized by the standard <<seda-component,SEDA>>. Alternatively, a
 
 *disruptor-vm:* endpoint is supported by this component, providing an
-alternative to the standard link:vm.html[VM]. As with the SEDA
+alternative to the standard <<vm-component,VM>>. As with the SEDA
 component, buffers of the *disruptor:* endpoints are only visible within
 a *single* link:camelcontext.html[CamelContext] and no support is
 provided for persistence or recovery. The buffers of the
diff --git a/components/camel-ejb/src/main/docs/ejb-component.adoc b/components/camel-ejb/src/main/docs/ejb-component.adoc
index bce4fc0..09add07 100644
--- a/components/camel-ejb/src/main/docs/ejb-component.adoc
+++ b/components/camel-ejb/src/main/docs/ejb-component.adoc
@@ -131,7 +131,7 @@ public class GreaterImpl implements GreaterLocal {
 
 In this example we want to invoke the `hello` method on the EJB. Since
 this example is based on an unit test using Apache OpenEJB we have to
-set a `JndiContext` on the link:ejb.html[EJB] component with the OpenEJB
+set a `JndiContext` on the <<ejb-component,EJB>> component with the OpenEJB
 settings.
 
 [source,java]
@@ -169,10 +169,10 @@ from("direct:start")
 *In a real application server*
 
 In a real application server you most likely do not have to setup a
-`JndiContext` on the link:ejb.html[EJB] component as it will create a
+`JndiContext` on the <<ejb-component,EJB>> component as it will create a
 default `JndiContext` on the same JVM as the application server, which
 usually allows it to access the JNDI registry and lookup the
-link:ejb.html[EJB]s. However if you need to access a application server on a remote JVM or
+<<ejb-component,EJB>>s. However if you need to access a application server on a remote JVM or
 the likes, you have to prepare the properties beforehand.
 
 #### Using Spring XML
@@ -180,7 +180,7 @@ the likes, you have to prepare the properties beforehand.
 And this is the same example using Spring XML instead:
 
 Again since this is based on an unit test we need to setup the
-link:ejb.html[EJB] component:
+<<ejb-component,EJB>> component:
 
 [source,XML]
 -------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -195,7 +195,7 @@ link:ejb.html[EJB] component:
 </p:properties>
 -------------------------------------------------------------------------------------------------------------------------------------------------------------
 
-Before we are ready to use link:ejb.html[EJB] in the Camel routes:
+Before we are ready to use <<ejb-component,EJB>> in the Camel routes:
 
 [source,XML]
 -------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -214,6 +214,6 @@ Before we are ready to use link:ejb.html[EJB] in the Camel routes:
 * link:component.html[Component]
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
-* link:bean.html[Bean]
+* <<bean-component,Bean>>
 * link:bean-binding.html[Bean Binding]
 * link:bean-integration.html[Bean Integration]
\ No newline at end of file
diff --git a/components/camel-elsql/src/main/docs/elsql-component.adoc b/components/camel-elsql/src/main/docs/elsql-component.adoc
index 781df4a..a6721dd 100644
--- a/components/camel-elsql/src/main/docs/elsql-component.adoc
+++ b/components/camel-elsql/src/main/docs/elsql-component.adoc
@@ -4,7 +4,7 @@
 *Available as of Camel version 2.16*
 
 The *elsql:* component is an extension to the existing
-link:sql-component.html[SQL Component] that uses
+<<sql-component,SQL Component>> that uses
 https://github.com/OpenGamma/ElSql[ElSql] to define the SQL queries. 
 
 This component uses `spring-jdbc` behind the scenes for the actual SQL
@@ -40,7 +40,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. *Camel 2.16.1:* from message body if link:simple.html[Simple]
+1. *Camel 2.16.1:* from message body if <<simple-language,Simple>>
 expression.
 
 2. from message body if its a `java.util.Map`3. from message headers
@@ -227,6 +227,6 @@ assumes to have `getLicense` and `getMinimum` methods:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:sql-component.html[SQL Component]
-* link:mybatis.html[MyBatis]
-* link:jdbc.html[JDBC]
\ No newline at end of file
+* <<sql-component,SQL Component>>
+* <<mybatis-component,MyBatis>>
+* <<jdbc-component,JDBC>>
\ No newline at end of file
diff --git a/components/camel-flatpack/src/main/docs/flatpack-component.adoc b/components/camel-flatpack/src/main/docs/flatpack-component.adoc
index c411608..f049d5a 100644
--- a/components/camel-flatpack/src/main/docs/flatpack-component.adoc
+++ b/components/camel-flatpack/src/main/docs/flatpack-component.adoc
@@ -202,7 +202,7 @@ easy link:bean-integration.html[Bean Integration]
 
 ### Flatpack DataFormat
 
-The link:flatpack.html[Flatpack] component ships with the Flatpack data
+The <<flatpack-component,Flatpack>> component ships with the Flatpack data
 format that can be used to format between fixed width or delimited text
 messages to a `List` of rows as `Map`.
 
diff --git a/components/camel-flatpack/src/main/docs/flatpack-dataformat.adoc b/components/camel-flatpack/src/main/docs/flatpack-dataformat.adoc
index 8c0be57c..bd1a2fb 100644
--- a/components/camel-flatpack/src/main/docs/flatpack-dataformat.adoc
+++ b/components/camel-flatpack/src/main/docs/flatpack-dataformat.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.1*
 
-The link:flatpack.html[Flatpack] component ships with the Flatpack data
+The <<flatpack-component,Flatpack>> component ships with the Flatpack data
 format that can be used to format between fixed width or delimited text
 messages to a `List` of rows as `Map`.
 
diff --git a/components/camel-ftp/src/main/docs/ftps-component.adoc b/components/camel-ftp/src/main/docs/ftps-component.adoc
index edbf784..ca85f49 100644
--- a/components/camel-ftp/src/main/docs/ftps-component.adoc
+++ b/components/camel-ftp/src/main/docs/ftps-component.adoc
@@ -19,7 +19,7 @@ for this component:
 </dependency>
 -----------------------------------------------------------------------
 
-For more information you can look at link:ftp.html[FTP component]
+For more information you can look at <<ftp-component,FTP component>>
 
 ### URI Options
 
diff --git a/components/camel-ftp/src/main/docs/sftp-component.adoc b/components/camel-ftp/src/main/docs/sftp-component.adoc
index c7299f3..2006bdf 100644
--- a/components/camel-ftp/src/main/docs/sftp-component.adoc
+++ b/components/camel-ftp/src/main/docs/sftp-component.adoc
@@ -19,7 +19,7 @@ for this component:
 </dependency>
 -----------------------------------------------------------------------
 
-For more information you can look at link:ftp.html[FTP component]
+For more information you can look at <<ftp-component,FTP component>>
 
 ### URI Options
 
diff --git a/components/camel-groovy/src/main/docs/groovy-language.adoc b/components/camel-groovy/src/main/docs/groovy-language.adoc
index f97af3a..5a35351 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` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -126,7 +126,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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-grpc/src/main/docs/grpc-component.adoc b/components/camel-grpc/src/main/docs/grpc-component.adoc
index b7e0f42..7d16a26 100644
--- a/components/camel-grpc/src/main/docs/grpc-component.adoc
+++ b/components/camel-grpc/src/main/docs/grpc-component.adoc
@@ -263,4 +263,4 @@ https://www.xolstice.org/protobuf-maven-plugin[Maven Protocol Buffers Plugin]
 * link:configuring-camel.html[Configuring Camel]
 * link:component.html[Component]
 * link:endpoint.html[Endpoint]
-* link:protobuf.html[Protocol Buffers Data Format]
\ No newline at end of file
+* <<protobuf-dataformat,Protocol Buffers Data Format>>
\ No newline at end of file
diff --git a/components/camel-hazelcast/src/main/docs/hazelcast.adoc b/components/camel-hazelcast/src/main/docs/hazelcast.adoc
index 55f638d..91d39ee 100644
--- a/components/camel-hazelcast/src/main/docs/hazelcast.adoc
+++ b/components/camel-hazelcast/src/main/docs/hazelcast.adoc
@@ -31,17 +31,17 @@ for this component:
 
 ### Hazelcast components
 See followings for each component usage:
-* link:hazelcast-map-component.html[map]
-* link:hazelcast-multimap-component.html[multimap]
-* link:hazelcast-queue-component.html[queue]
-* link:hazelcast-topic-component.html[topic]
-* link:hazelcast-list-component.html[list]
-* link:hazelcast-seda-component.html[seda]
-* link:hazelcast-set-component.html[set]
-* link:hazelcast-atomicvalue-component.html[atomic number]
-* link:hazelcast-instance-component.html[cluster support (instance)]
-* link:hazelcast-replicatedmap-component.html[replicatedmap] 
-* link:hazelcast-ringbuffer-component.html[ringbuffer] 
+* <<hazelcast-map-component,map>>
+* <<hazelcast-multimap-component,multimap>>
+* <<hazelcast-queue-component,queue>>
+* <<hazelcast-topic-component,topic>>
+* <<hazelcast-list-component,list>>
+* <<hazelcast-seda-component,seda>>
+* <<hazelcast-set-component,set>>
+* <<hazelcast-atomicvalue-component,atomic number>>
+* <<hazelcast-instance-component,cluster support (instance)>>
+* <<hazelcast-replicatedmap-component,replicatedmap>> 
+* <<hazelcast-ringbuffer-component,ringbuffer>> 
 
 
 
diff --git a/components/camel-hdfs/src/main/docs/hdfs-component.adoc b/components/camel-hdfs/src/main/docs/hdfs-component.adoc
index 9dba902..ba2c869 100644
--- a/components/camel-hdfs/src/main/docs/hdfs-component.adoc
+++ b/components/camel-hdfs/src/main/docs/hdfs-component.adoc
@@ -222,7 +222,7 @@ split strategy.
 
 *Available as of Camel 2.10.4*
 
-When using the link:hdfs.html[HDFS] producer *without* a split strategy,
+When using the <<hdfs-component,HDFS>> producer *without* a split strategy,
 then the file output stream is by default closed after the write.
 However you may want to keep the stream open, and only explicitly close
 the stream later. For that you can use the header
diff --git a/components/camel-hdfs2/src/main/docs/hdfs2-component.adoc b/components/camel-hdfs2/src/main/docs/hdfs2-component.adoc
index 2fa0b5e..8356261 100644
--- a/components/camel-hdfs2/src/main/docs/hdfs2-component.adoc
+++ b/components/camel-hdfs2/src/main/docs/hdfs2-component.adoc
@@ -213,7 +213,7 @@ split strategy.
 
 ### Controlling to close file stream
 
-When using the link:hdfs2.html[HDFS2] producer *without* a split
+When using the <<hdfs2-component,HDFS2>> producer *without* a split
 strategy, then the file output stream is by default closed after the
 write. However you may want to keep the stream open, and only explicitly
 close the stream later. For that you can use the header
diff --git a/components/camel-hl7/src/main/docs/hl7-dataformat.adoc b/components/camel-hl7/src/main/docs/hl7-dataformat.adoc
index 1a71d85..d122114 100644
--- a/components/camel-hl7/src/main/docs/hl7-dataformat.adoc
+++ b/components/camel-hl7/src/main/docs/hl7-dataformat.adoc
@@ -9,12 +9,12 @@ v2 messages] using the http://hl7api.sourceforge.net[HAPI library].
 
 This component supports the following:
 
-* HL7 MLLP codec for link:mina2.html[Mina]
-* HL7 MLLP codec for link:netty4.html[Netty4] from *Camel 2.15* onwards
+* HL7 MLLP codec for <<mina2-component,Mina>>
+* HL7 MLLP codec for <<netty4-component,Netty4>> from *Camel 2.15* onwards
 * link:type-converter.html[Type Converter] from/to HAPI and String
 * HL7 DataFormat using the HAPI library
 * Even more ease-of-use as it's integrated well with the
-link:mina2.html[camel-mina2] component.
+<<mina2-component,camel-mina2>> component.
 
 Maven users will need to add the following dependency to their `pom.xml`
 for this component:
@@ -35,8 +35,8 @@ HL7 is often used with the HL7 MLLP protocol, which is a text based TCP
 socket based protocol. This component ships with a Mina and Netty4 Codec
 that conforms to the MLLP protocol so you can easily expose an HL7
 listener accepting HL7 requests over the TCP transport layer. To expose
-a HL7 listener service, the link:mina2.html[camel-mina2] or
-link:netty4.html[camel-netty4] component is used with the
+a HL7 listener service, the <<mina2-component,camel-mina2>> or
+<<netty4-component,camel-netty4>> component is used with the
 `HL7MLLPCodec` (mina2) or `HL7MLLPNettyDecoder/HL7MLLPNettyEncoder`
 (Netty4).
 
@@ -207,7 +207,7 @@ String patientId = msg.getQRD().getWhoSubjectFilter(0).getIDNumber().getValue();
 
 ### HL7 DataFormat
 
-The link:hl7.html[HL7] component ships with a HL7 data format that can
+The <<hl7-dataformat,HL7>> component ships with a HL7 data format that can
 be used to marshal or unmarshal HL7 model objects.
 
 // dataformat options: START
diff --git a/components/camel-http/src/main/docs/http-component.adoc b/components/camel-http/src/main/docs/http-component.adoc
index 3667eb7..30a0425 100644
--- a/components/camel-http/src/main/docs/http-component.adoc
+++ b/components/camel-http/src/main/docs/http-component.adoc
@@ -34,8 +34,8 @@ Will by default use port 80 for HTTP and 443 for HTTPS.
 You can only produce to endpoints generated by the HTTP component.
 Therefore it should never be used as input into your camel Routes. To
 bind/expose an HTTP endpoint via a HTTP server as input to a camel
-route, you can use the link:jetty.html[Jetty Component] or the
-link:servlet.html[Servlet Component]
+route, you can use the <<jetty-component,Jetty Component>> or the
+<<servlet-component,Servlet Component>>
 
 
 ### Examples
@@ -417,7 +417,7 @@ behavior.
 
 #### Setting MaxConnectionsPerHost
 
-The link:http.html[HTTP] Component has a
+The <<http-component,HTTP>> Component has a
 `org.apache.commons.httpclient.HttpConnectionManager` where you can
 configure various global configuration for the given component. +
  By global, we mean that any endpoint the component creates has the same
@@ -549,4 +549,4 @@ keystore and truststore as described above, it will work fine.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:jetty.html[Jetty]
\ No newline at end of file
+* <<jetty-component,Jetty>>
\ No newline at end of file
diff --git a/components/camel-http4/src/main/docs/http4-component.adoc b/components/camel-http4/src/main/docs/http4-component.adoc
index 0a15f8c..5eed8d5 100644
--- a/components/camel-http4/src/main/docs/http4-component.adoc
+++ b/components/camel-http4/src/main/docs/http4-component.adoc
@@ -44,7 +44,7 @@ You can append query options to the URI in the following format,
 You can only produce to endpoints generated by the HTTP4 component.
 Therefore it should never be used as input into your Camel Routes. To
 bind/expose an HTTP endpoint via a HTTP server as input to a Camel
-route, use the link:jetty.html[Jetty Component] instead.
+route, use the <<jetty-component,Jetty Component>> instead.
 
 ### Http4 Component Options
 
@@ -663,10 +663,10 @@ public class HttpContextFactory {
 [[HTTP4-UsingdifferentSSLContextParameters]]
 Using different SSLContextParameters
 
-The link:http4.html[HTTP4] component only support one instance of
+The <<http4-component,HTTP4>> component only support one instance of
 `org.apache.camel.util.jsse.SSLContextParameters` per component. If you
 need to use 2 or more different instances, then you need to setup
-multiple link:http4.html[HTTP4] components as shown below. Where we have
+multiple <<http4-component,HTTP4>> components as shown below. Where we have
 2 components, each using their own instance of `sslContextParameters`
 property.
 
diff --git a/components/camel-ibatis/src/main/docs/ibatis-component.adoc b/components/camel-ibatis/src/main/docs/ibatis-component.adoc
index 016d3f4..b420925 100644
--- a/components/camel-ibatis/src/main/docs/ibatis-component.adoc
+++ b/components/camel-ibatis/src/main/docs/ibatis-component.adoc
@@ -11,7 +11,7 @@ http://ibatis.apache.org/[Apache iBATIS].
 
 The Apache iBatis project is no longer active. The project is moved
 outside Apache and is now know as the MyBatis project. +
-Therefore we encourage users to use link:mybatis.html[MyBatis] instead.
+Therefore we encourage users to use <<mybatis-component,MyBatis>> instead.
 This camel-ibatis component will be removed in Camel 3.0.
 
 iBatis do not support Spring 4.x. So you can only use Spring 3.x or
@@ -212,10 +212,10 @@ body to iBatis:
 
 Since this component does not support scheduled polling, you need to use
 another mechanism for triggering the scheduled polls, such as the
-link:timer.html[Timer] or link:quartz.html[Quartz] components.
+<<timer-component,Timer>> or <<timer-component,Quartz>> components.
 
 In the sample below we poll the database, every 30 seconds using the
-link:timer.html[Timer] component and send the data to the JMS queue:
+<<timer-component,Timer>> component and send the data to the JMS queue:
 
 [source,java]
 ---------------------------------------------------------------------------------------------------------------------------------------
@@ -253,4 +253,4 @@ And the statements in the sqlmap file:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:mybatis.html[MyBatis]
\ No newline at end of file
+* <<mybatis-component,MyBatis>>
\ No newline at end of file
diff --git a/components/camel-ignite/src/main/docs/ignite.adoc b/components/camel-ignite/src/main/docs/ignite.adoc
index 0cc2634..f165706 100644
--- a/components/camel-ignite/src/main/docs/ignite.adoc
+++ b/components/camel-ignite/src/main/docs/ignite.adoc
@@ -8,13 +8,13 @@ image:https://ignite.apache.org/images/apache-ignite.png[]
 
 This component offers seven endpoints to cover much of Ignite's functionality:
 
-* link:ignite-cache-component.html[Ignite Cache].
-* link:ignite-compute-component.html[Ignite Compute].
-* link:ignite-messaging-component.html[Ignite Messaging].
-* link:ignite-events-component.html[Ignite Events].
-* link:ignite-set-component.html[Ignite Sets].
-* link:ignite-queue-component.html[Ignite Queues].
-* link:ignite-idgen-component.html[Ignite ID Generator].
+* <<ignite-cache-component,Ignite Cache>>.
+* <<ignite-compute-component,Ignite Compute>>.
+* <<ignite-messaging-component,Ignite Messaging>>.
+* <<ignite-events-component,Ignite Events>>.
+* <<ignite-set-component,Ignite Sets>>.
+* <<ignite-queue-component,Ignite Queues>>.
+* <<ignite-idgen-component,Ignite ID Generator>>.
 
 To use this component, add the following dependency to your pom.xml:
 
diff --git a/components/camel-jasypt/src/main/docs/jasypt.adoc b/components/camel-jasypt/src/main/docs/jasypt.adoc
index 8497447..5541a0f 100644
--- a/components/camel-jasypt/src/main/docs/jasypt.adoc
+++ b/components/camel-jasypt/src/main/docs/jasypt.adoc
@@ -4,7 +4,7 @@
 
 http://www.jasypt.org/[Jasypt] is a simplified encryption library which
 makes encryption and decryption easy. Camel integrates with Jasypt to
-allow sensitive information in link:properties.html[Properties] files to
+allow sensitive information in <<properties-component,Properties>> files to
 be encrypted. By dropping *`camel-jasypt`* on the classpath those
 encrypted values will automatically be decrypted on-the-fly by Camel.
 This ensures that human eyes can't easily spot sensitive information
@@ -83,7 +83,7 @@ Decrypted text: tiger
 ---------------------
 
 The idea is then to use those encrypted values in your
-link:properties.html[Properties] files. Notice how the password value is
+<<properties-component,Properties>> files. Notice how the password value is
 encrypted and the value has the tokens surrounding `ENC(value here)`
 
 TIP: When running jasypt tooling, if you come across `java.lang.NoClassDefFoundError: org/jasypt/encryption/pbe/StandardPBEStringEncryptor` this means you have to include jasypt{version}.jar in your classpath. Example of adding jar to classpath may be copying jasypt{version}.jar to $JAVA_HOME\jre\lib\ext if you are going to run as `java -jar ...`. The latter may be adding jasypt{version}.jar to classpath using `-cp`, in that case you should provide main class to execute as eg: `java -cp  [...]
@@ -140,7 +140,7 @@ The `password` option is then a matter of defining as follows:
 
 In Java DSL you need to configure link:jasypt.html[Jasypt] as a
 `JasyptPropertiesParser` instance and set it on the
-link:properties.html[Properties] component as show below:
+<<properties-component,Properties>> component as show below:
 
 The properties file `myproperties.properties` then contain the encrypted
 value, such as shown below. Notice how the password value is encrypted
@@ -149,7 +149,7 @@ and the value has the tokens surrounding `ENC(value here)`
 ### Example with Spring XML
 
 In Spring XML you need to configure the `JasyptPropertiesParser` which
-is shown below. Then the Camel link:properties.html[Properties]
+is shown below. Then the Camel <<properties-component,Properties>>
 component is told to use `jasypt` as the properties parser, which means
 link:jasypt.html[Jasypt] has its chance to decrypt values looked up in
 the properties.
@@ -170,7 +170,7 @@ the properties.
 </bean>
 -----------------------------------------------------------------------------------------------------------
 
-The link:properties.html[Properties] component can also be inlined
+The <<properties-component,Properties>> component can also be inlined
 inside the `<camelContext>` tag which is shown below. Notice how we use
 the `propertiesParserRef` attribute to refer to
 link:jasypt.html[Jasypt].
@@ -200,7 +200,7 @@ link:jasypt.html[Jasypt].
 
 In Blueprint XML you need to configure
 the `JasyptPropertiesParser` which is shown below. Then the
-Camel link:properties.html[Properties] component is told to
+Camel <<properties-component,Properties>> component is told to
 use `jasypt` as the properties parser, which
 means link:jasypt.html[Jasypt] has its chance to decrypt values looked
 up in the properties.
@@ -240,7 +240,7 @@ up in the properties.
 </blueprint>
 ----------------------------------------------------------------------------------------------------------------
 
-The link:properties.html[Properties] component can also be inlined
+The <<properties-component,Properties>> component can also be inlined
 inside the `<camelContext>` tag which is shown below. Notice how we use
 the `propertiesParserRef` attribute to refer
 to link:jasypt.html[Jasypt].
@@ -275,7 +275,7 @@ to link:jasypt.html[Jasypt].
 ### See Also
 
 * link:security.html[Security]
-* link:properties.html[Properties]
+* <<properties-component,Properties>>
 * http://activemq.apache.org/encrypted-passwords.html[Encrypted
 passwords in ActiveMQ] - ActiveMQ has a similar feature as this
 `camel-jasypt` component
diff --git a/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc b/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
index de7ff7a..c850c16 100644
--- a/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
+++ b/components/camel-jaxb/src/main/docs/jaxb-dataformat.adoc
@@ -191,7 +191,7 @@ In this Spring DSL we have defined to use `iso-8859-1` as the encoding:
 
 *Available as of Camel 2.11*
 
-When marshalling using link:jaxb.html[JAXB] or link:soap.html[SOAP] then
+When marshalling using <<jaxb-dataformat,JAXB>> or <<jaxb-dataformat,SOAP>> then
 the JAXB implementation will automatic assign namespace prefixes, such
 as ns2, ns3, ns4 etc. To control this mapping, Camel allows you to refer
 to a map which contains the desired mapping.
@@ -213,7 +213,7 @@ namespace "http://www.mycompany.com/foo/2" is not using any prefix.
   </util:map>
 -----------------------------------------------------------------------
 
-To use this in link:jaxb.html[JAXB] or link:soap.html[SOAP] you refer to
+To use this in <<jaxb-dataformat,JAXB>> or <<jaxb-dataformat,SOAP>> you refer to
 this map, using the `namespacePrefixRef` attribute as shown below. Then
 Camel will lookup in the link:registry.html[Registry] a `java.util.Map`
 with the id "myMap", which was what we defined above.
diff --git a/components/camel-jdbc/src/main/docs/jdbc-component.adoc b/components/camel-jdbc/src/main/docs/jdbc-component.adoc
index dcd9d43..535295c 100644
--- a/components/camel-jdbc/src/main/docs/jdbc-component.adoc
+++ b/components/camel-jdbc/src/main/docs/jdbc-component.adoc
@@ -6,7 +6,7 @@
 The *jdbc* component enables you to access databases through JDBC, where
 SQL queries (SELECT) and operations (INSERT, UPDATE, etc) are sent in
 the message body. This component uses the standard JDBC API, unlike the
-link:sql-component.html[SQL Component] component, which uses
+<<sql-component,SQL Component>> component, which uses
 spring-jdbc.
 
 Maven users will need to add the following dependency to their `pom.xml`
@@ -140,7 +140,7 @@ type.
 *Available as of Camel 2.10*
 
 If you insert data using SQL INSERT, then the RDBMS may support auto
-generated keys. You can instruct the link:jdbc.html[JDBC] producer to
+generated keys. You can instruct the <<jdbc-component,JDBC>> producer to
 return the generated keys in headers. +
  To do that set the header `CamelRetrieveGeneratedKeys=true`. Then the
 generated keys will be provided as headers with the keys listed in the
@@ -214,8 +214,8 @@ from("direct:hello")
 ### Sample - Polling the database every minute
 
 If we want to poll a database using the JDBC component, we need to
-combine it with a polling scheduler such as the link:timer.html[Timer]
-or link:quartz.html[Quartz] etc. In the following example, we retrieve
+combine it with a polling scheduler such as the <<timer-component,Timer>>
+or <<quartz-component,Quartz>> etc. In the following example, we retrieve
 data from the database every 60 seconds:
 
 [source,java]
@@ -250,4 +250,4 @@ from("timer://MoveNewCustomersEveryHour?period=3600000")
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:sql.html[SQL]
\ No newline at end of file
+* <<sql-component,SQL>>
\ No newline at end of file
diff --git a/components/camel-jetty9/src/main/docs/jetty-component.adoc b/components/camel-jetty9/src/main/docs/jetty-component.adoc
index b537e51..616abb0 100644
--- a/components/camel-jetty9/src/main/docs/jetty-component.adoc
+++ b/components/camel-jetty9/src/main/docs/jetty-component.adoc
@@ -189,7 +189,7 @@ with the following path and query parameters:
 
 ### Message Headers
 
-Camel uses the same message headers as the link:http.html[HTTP]
+Camel uses the same message headers as the <<http-component,HTTP>>
 component. 
 From Camel 2.2, it also uses (Exchange.HTTP_CHUNKED,CamelHttpChunked)
 header to turn on or turn off the chuched encoding on the camel-jetty
@@ -207,7 +207,7 @@ message header not only from Get Method, but also other HTTP method.
 
 The Jetty component supports both consumer and producer endpoints.
 Another option for producing to other HTTP endpoints, is to use the
-link:http.html[HTTP Component]
+<<http-component,HTTP Component>>
 
 ### Producer Example
 
@@ -272,8 +272,8 @@ 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
-link:simple.html[Simple] (such as link:el.html[EL] or
-link:ognl.html[OGNL]) we could also test for the parameter value and do
+<<simple-language,Simple>> (such as <<simple-language,EL>> or
+<<ognl-language,OGNL>>) we could also test for the parameter value and do
 routing based on the header value as well.
 
 ### Session Support
@@ -680,7 +680,7 @@ comma-separated list of bean IDs.
 ### How to return a custom HTTP 500 reply message
 
 You may want to return a custom reply message when something goes wrong,
-instead of the default reply message Camel link:jetty.html[Jetty]
+instead of the default reply message Camel <<jetty-component,Jetty>>
 replies with. +
  You could use a custom `HttpBinding` to be in control of the message
 mapping, but often it may be easier to use Camel's
@@ -738,4 +738,4 @@ name collisions when registering Jetty MBeans.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:http.html[HTTP]
\ No newline at end of file
+* <<http-component,HTTP>>
\ No newline at end of file
diff --git a/components/camel-jgroups/src/main/docs/jgroups-component.adoc b/components/camel-jgroups/src/main/docs/jgroups-component.adoc
index 5463455..a822357 100644
--- a/components/camel-jgroups/src/main/docs/jgroups-component.adoc
+++ b/components/camel-jgroups/src/main/docs/jgroups-component.adoc
@@ -183,7 +183,7 @@ method. The expression created by this factory method will return given
 delay value only if the Camel context is in the state different than
 `started`. This expression is particularly useful if you would like to
 use JGroups component for keeping singleton (master) route within the
-cluster. link:controlbus-component.html[Control Bus] `start` command
+cluster. <<controlbus-component,Control Bus>> `start` command
 won't initialize the singleton route if the Camel Context hasn't been
 yet started. So you need to delay a startup of the master route, to be
 sure that it has been initialized after the Camel Context startup.
@@ -258,7 +258,7 @@ mockEndpoint.assertIsSatisfied();
 The snippet below demonstrates how to keep the singleton consumer route
 in the cluster of Camel Contexts. As soon as the master node dies, one
 of the slaves will be elected as a new master and started. In this
-particular example we want to keep singleton link:jetty.html[jetty]
+particular example we want to keep singleton <<jetty-component,jetty>>
 instance listening for the requests on
 address` http://localhost:8080/orders`.
 
diff --git a/components/camel-jing/src/main/docs/jing-component.adoc b/components/camel-jing/src/main/docs/jing-component.adoc
index b9309c6..8bc232f 100644
--- a/components/camel-jing/src/main/docs/jing-component.adoc
+++ b/components/camel-jing/src/main/docs/jing-component.adoc
@@ -24,7 +24,7 @@ for this component:
 </dependency>
 ------------------------------------------------------------
 
-Note that the link:msv.html[MSV] component can also support RelaxNG XML
+Note that the <<msv-component,MSV>> component can also support RelaxNG XML
 syntax.
 
 ### URI format Camel 2.16
diff --git a/components/camel-jms/src/main/docs/jms-component.adoc b/components/camel-jms/src/main/docs/jms-component.adoc
index 289b4d9..62726f9 100644
--- a/components/camel-jms/src/main/docs/jms-component.adoc
+++ b/components/camel-jms/src/main/docs/jms-component.adoc
@@ -35,7 +35,7 @@ component.
 *Transacted and caching*
 
 See section _Transactions and Cache Levels_ below if you are using
-transactions with link:jms.html[JMS] as it can impact performance.
+transactions with <<jms-component,JMS>> as it can impact performance.
 ====
 
 [NOTE]
@@ -1004,7 +1004,7 @@ reply queues instead.
 ### Synchronizing clocks between senders and receivers
 
 When doing messaging between systems, its desirable that the systems
-have synchronized clocks. For example when sending a link:jms.html[JMS]
+have synchronized clocks. For example when sending a <<jms-component,JMS>>
 message, then you can set a time to live value on the message. Then the
 receiver can inspect this value, and determine if the message is already
 expired, and thus drop the message instead of consume and process it.
@@ -1017,18 +1017,18 @@ plugin] to synchronize clocks.
 
 Read first above about synchronized clocks.
 
-When you do request/reply (InOut) over link:jms.html[JMS] with Camel
+When you do request/reply (InOut) over <<jms-component,JMS>> with Camel
 then Camel uses a timeout on the sender side, which is default 20
 seconds from the `requestTimeout` option. You can control this by
 setting a higher/lower value. However the time to live value is still
-set on the link:jms.html[JMS] message being send. So that requires the
+set on the <<jms-component,JMS>> message being send. So that requires the
 clocks to be synchronized between the systems. If they are not, then you
 may want to disable the time to live value being set. This is now
 possible using the `disableTimeToLive` option from *Camel 2.8* onwards.
 So if you set this option to `disableTimeToLive=true`, then Camel does
-*not* set any time to live value when sending link:jms.html[JMS]
+*not* set any time to live value when sending <<jms-component,JMS>>
 messages. *But* the request timeout is still active. So for example if
-you do request/reply over link:jms.html[JMS] and have disabled time to
+you do request/reply over <<jms-component,JMS>> and have disabled time to
 live, then Camel will still use a timeout by 20 seconds (the
 `requestTimeout` option). That option can of course also be configured.
 So the two options `requestTimeout` and `disableTimeToLive` gives you
@@ -1071,7 +1071,7 @@ the service bean as shown below:
      .to("bean:processReply");
 ----------------------------------------------------------------------------------------
 
-When you do fire and forget (InOut) over link:jms.html[JMS] with Camel
+When you do fire and forget (InOut) over <<jms-component,JMS>> with Camel
 then Camel by default does *not* set any time to live value on the
 message. You can configure a value by using the `timeToLive` option. For
 example to indicate a 5 sec., you set `timeToLive=5000`. The option
@@ -1251,9 +1251,9 @@ together link:tutorial-jmsremoting.html[Tutorial-JmsRemoting].
 
 #### Using JMS as a Dead Letter Queue storing Exchange
 
-Normally, when using link:jms.html[JMS] as the transport, it only
+Normally, when using <<jms-component,JMS>> as the transport, it only
 transfers the body and headers as the payload. If you want to use
-link:jms.html[JMS] with a link:dead-letter-channel.html[Dead Letter
+<<jms-component,JMS>> with a link:dead-letter-channel.html[Dead Letter
 Channel], using a JMS queue as the Dead Letter Queue, then normally the
 caused Exception is not stored in the JMS message. You can, however, use
 the `transferExchange` option on the JMS dead letter queue to instruct
@@ -1289,7 +1289,7 @@ You can use JMS to store the cause error message or to store a custom
 body, which you can initialize yourself. The following example uses the
 link:message-translator.html[Message Translator] EIP to do a
 transformation on the failed exchange before it is moved to the
-link:jms.html[JMS] dead letter queue:
+<<jms-component,JMS>> dead letter queue:
 
 [source,java]
 --------------------------------------------------------------------------------------------------
@@ -1307,7 +1307,7 @@ a custom processor.
 
 ### Sending an InOnly message and keeping the JMSReplyTo header
 
-When sending to a link:jms.html[JMS] destination using *camel-jms* the
+When sending to a <<jms-component,JMS>> destination using *camel-jms* the
 producer will use the MEP to detect if its _InOnly_ or _InOut_ messaging.
 However there can be times where you want to send an _InOnly_ message but
 keeping the `JMSReplyTo` header. To do so you have to instruct Camel to
diff --git a/components/camel-jmx/src/main/docs/jmx-component.adoc b/components/camel-jmx/src/main/docs/jmx-component.adoc
index 302b5a2..342c6b5 100644
--- a/components/camel-jmx/src/main/docs/jmx-component.adoc
+++ b/components/camel-jmx/src/main/docs/jmx-component.adoc
@@ -15,7 +15,7 @@ endif::[]
 Apache Camel has extensive support for JMX to allow you to monitor and
 control the Camel managed objects with a JMX client.
 
-Camel also provides a link:jmx.html[JMX] component that allows you to
+Camel also provides a <<jmx-component,JMX>> component that allows you to
 subscribe to MBean notifications. This page is about how to manage and
 monitor Camel using JMX.
 
diff --git a/components/camel-josql/src/main/docs/sql-language.adoc b/components/camel-josql/src/main/docs/sql-language.adoc
index 7cf3e27..1425314 100644
--- a/components/camel-josql/src/main/docs/sql-language.adoc
+++ b/components/camel-josql/src/main/docs/sql-language.adoc
@@ -6,13 +6,13 @@
 The SQL support is added by http://josql.sourceforge.net/[JoSQL] and is
 primarily used for performing SQL queries on in-memory objects. If you
 prefer to perform actual database queries then check out the
-link:jpa.html[JPA] component.
+<<jpa-component,JPA>> component.
 
 *Looking for the SQL component*
 
-Camel has both a link:sql.html[SQL] language and a
-link:sql-component.html[SQL Component]. This page is about the SQL
-language. Click on link:sql-component.html[SQL Component] if you are
+Camel has both a <<sql-component,SQL>> language and a
+<<sql-component,SQL Component>>. This page is about the SQL
+language. Click on <<sql-component,SQL Component>> if you are
 looking for the component instead.
 
 To use SQL in your camel routes you need to add the a dependency on
diff --git a/components/camel-jpa/src/main/docs/jpa-component.adoc b/components/camel-jpa/src/main/docs/jpa-component.adoc
index f359e77..f7d3c0b 100644
--- a/components/camel-jpa/src/main/docs/jpa-component.adoc
+++ b/components/camel-jpa/src/main/docs/jpa-component.adoc
@@ -361,7 +361,7 @@ the message body.
 ### Example
 
 See link:http://camel.apache.org/tracer-example.html[Tracer Example] for an example using
-link:jpa.html[JPA] to store traced messages into a database.
+<<jpa-component,JPA>> to store traced messages into a database.
 
 ### Using the JPA-Based Idempotent Repository
 
diff --git a/components/camel-jsch/src/main/docs/scp-component.adoc b/components/camel-jsch/src/main/docs/scp-component.adoc
index e47f21d..260fad7 100644
--- a/components/camel-jsch/src/main/docs/scp-component.adoc
+++ b/components/camel-jsch/src/main/docs/scp-component.adoc
@@ -6,7 +6,7 @@
 The *camel-jsch* component supports the
 http://en.wikipedia.org/wiki/Secure_copy[SCP protocol] using the Client
 API of the http://www.jcraft.com/jsch/[Jsch] project. Jsch is already
-used in camel by the link:ftp.html[FTP] component for the *sftp:*
+used in camel by the <<ftp-component,FTP>> component for the *sftp:*
 protocol.
 
 Maven users will need to add the following dependency to their `pom.xml`
diff --git a/components/camel-jsonpath/src/main/docs/jsonpath-language.adoc b/components/camel-jsonpath/src/main/docs/jsonpath-language.adoc
index 6a960e7..93fe221 100644
--- a/components/camel-jsonpath/src/main/docs/jsonpath-language.adoc
+++ b/components/camel-jsonpath/src/main/docs/jsonpath-language.adoc
@@ -45,7 +45,7 @@ The JsonPath language supports 7 options which are listed below.
 === Using XML configuration
 
 If you prefer to configure your routes in your link:spring.html[Spring]
-XML file then you can use link:jsonpath.html[JSonPath] expressions as
+XML file then you can use <<jsonpath-language,JSonPath>> expressions as
 follows
 
 [source,xml]
diff --git a/components/camel-jxpath/src/main/docs/jxpath-language.adoc b/components/camel-jxpath/src/main/docs/jxpath-language.adoc
index 7f6a393..32d036c 100644
--- a/components/camel-jxpath/src/main/docs/jxpath-language.adoc
+++ b/components/camel-jxpath/src/main/docs/jxpath-language.adoc
@@ -4,7 +4,7 @@
 *Available as of Camel version 1.3*
 
 Camel supports http://commons.apache.org/jxpath/[JXPath] to allow
-link:xpath.html[XPath] expressions to be used on beans in an
+<<xpath-language,XPath>> expressions to be used on beans in an
 link:expression.html[Expression] or link:predicate.html[Predicate] to be
 used in the link:dsl.html[DSL] or link:xml-configuration.html[Xml
 Configuration]. For example you could use JXPath to create an
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-component.adoc
index a4bd8ca..86f9ac8 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-component.adoc
@@ -8,20 +8,20 @@
 The composite kubernetes component has been deprecated. Use individual
 component splitted as following.
 
-* link:kubernetes.html[Kubernetes Components]
-  ** link:kubernetes-build-configs-component.html[Kubernetes Build Config]
+* <<kubernetes-component,Kubernetes Components>>
+  ** <<kubernetes-build-configs-component,Kubernetes Build Config>>
   ** link:kubernetes-builds-component.html[Kubernetes Build]
-  ** link:kubernetes-config-maps-component.html[Kubernetes ConfigMap]
-  ** link:kubernetes-namespaces-component.html[Kubernetes Namespace]
-  ** link:kubernetes-nodes-component.html[Kubernetes Node]
-  ** link:kubernetes-persistent-volumes-component.html[Kubernetes Persistent Volume]
-  ** link:kubernetes-persistent-volumes-claims-component.html[Kubernetes Persistent Volume Claim]
-  ** link:kubernetes-pods-component.html[Kubernetes Pod]
-  ** link:kubernetes-replication-controllers-component.html[Kubernetes Replication Controller]
-  ** link:kubernetes-resources-quota-component.html[Kubernetes Resource Quota]
-  ** link:kubernetes-secrets-component.html[Kubernetes Secrets]
-  ** link:kubernetes-service-accounts-component.html[Kubernetes Service Account]
-  ** link:kubernetes-services-component.html[Kubernetes Service]
+  ** <<kubernetes-config-maps-component,Kubernetes ConfigMap>>
+  ** <<kubernetes-namespaces-component,Kubernetes Namespace>>
+  ** <<kubernetes-nodes-component,Kubernetes Node>>
+  ** <<kubernetes-persistent-volumes-component,Kubernetes Persistent Volume>>
+  ** <<kubernetes-persistent-volumes-claims-component,Kubernetes Persistent Volume Claim>>
+  ** <<kubernetes-pods-component,Kubernetes Pod>>
+  ** <<kubernetes-replication-controllers-component,Kubernetes Replication Controller>>
+  ** <<kubernetes-resources-quota-component,Kubernetes Resource Quota>>
+  ** <<kubernetes-secrets-component,Kubernetes Secrets>>
+  ** <<kubernetes-service-accounts-component,Kubernetes Service Account>>
+  ** <<kubernetes-services-component,Kubernetes Service>>
 ====================================================================================
 
 The *Kubernetes* component is a component for integrating your
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
index 26be9f5..9f961c9 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-config-maps-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes ConfigMap* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes ConfigMap* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes ConfigMap operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
index c374f00..af3334d 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-deployments-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.20*
 
-The *Kubernetes Deployments* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Deployments* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes secret operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
index ae1c41d..d921aa7 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-namespaces-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Namespaces* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Namespaces* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes namespace operations and a consumer to consume
 kubernetes namespace events.
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
index a2b32fb..dadcc16 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-nodes-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Nodes* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Nodes* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes node operations and a consumer to consume kubernetes
 node events.
  
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
index b07034a..efed60e 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-claims-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Persistent Volume Claim* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Persistent Volume Claim* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes persistent volume claim operations.
  
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc
index 501c0d7..62cacae 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-persistent-volumes-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Persistent Volume* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Persistent Volume* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes persistent volume operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
index f4f8ff1..6ee0150 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-pods-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Pods* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Pods* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes pod operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
index 1f572a9..95ff190 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-replication-controllers-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Replication Controller* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Replication Controller* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes replication controller operations and a consumer to
 consume kubernetes replication controller events.
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
index e20fb9a..a090ba7 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-resources-quota-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Resources Quota* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Resources Quota* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes resource quota operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
index e0b44df..091aeaa 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-secrets-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Secrets* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Secrets* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes secret operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
index c8a6ab5..5dfa086 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-service-accounts-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Service Account* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Service Account* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes Service Account operations.
 
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc b/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc
index 0a9a410..10ab6b8 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-services-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Services* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Services* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes service operations and a consumer to consume kubernetes
 service events.
 
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes.adoc b/components/camel-kubernetes/src/main/docs/kubernetes.adoc
index a91b07c..aa7f724 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes.adoc
@@ -6,21 +6,21 @@ The *Kubernetes* components integrate your application with Kubernetes standalo
 
 The camel-kubernetes consists of 13 components:
 
-* link:kubernetes-config-maps-component.html[Kubernetes ConfigMap]
-* link:kubernetes-namespaces-component.html[Kubernetes Namespace]
-* link:kubernetes-nodes-component.html[Kubernetes Node]
-* link:kubernetes-persistent-volumes-component.html[Kubernetes Persistent Volume]
-* link:kubernetes-persistent-volumes-claims-component.html[Kubernetes Persistent Volume Claim]
-* link:kubernetes-pods-component.html[Kubernetes Pod]
-* link:kubernetes-replication-controllers-component.html[Kubernetes Replication Controller]
-* link:kubernetes-resources-quota-component.html[Kubernetes Resource Quota]
-* link:kubernetes-secrets-component.html[Kubernetes Secrets]
-* link:kubernetes-service-accounts-component.html[Kubernetes Service Account]
-* link:kubernetes-services-component.html[Kubernetes Service]
+* <<kubernetes-config-maps-component,Kubernetes ConfigMap>>
+* <<kubernetes-namespaces-component,Kubernetes Namespace>>
+* <<kubernetes-nodes-component,Kubernetes Node>>
+* <<kubernetes-persistent-volumes-component,Kubernetes Persistent Volume>>
+* <<kubernetes-persistent-volumes-claims-component,Kubernetes Persistent Volume Claim>>
+* <<kubernetes-pods-component,Kubernetes Pod>>
+* <<kubernetes-replication-controllers-component,Kubernetes Replication Controller>>
+* <<kubernetes-resources-quota-component,Kubernetes Resource Quota>>
+* <<kubernetes-secrets-component,Kubernetes Secrets>>
+* <<kubernetes-service-accounts-component,Kubernetes Service Account>>
+* <<kubernetes-services-component,Kubernetes Service>>
 
 In OpenShift, also:
 
-* link:kubernetes-build-configs-component.html[Kubernetes Build Config]
+* <<kubernetes-build-configs-component,Kubernetes Build Config>>
 * link:kubernetes-builds-component.html[Kubernetes Build]
 
 
diff --git a/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc
index 80cfe30..63cf61c 100644
--- a/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/openshift-build-configs-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Openshift Build Config* component is one of link:kubernetes.html[Kubernetes Components] which
+The *OpenShift Build Config* component is one of link:kubernetes.html[Kubernetes Components] which
 provides a producer to execute kubernetes build config operations. 
 
 
diff --git a/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc b/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc
index 463d438..fbaff2f 100644
--- a/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc
+++ b/components/camel-kubernetes/src/main/docs/openshift-builds-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.17*
 
-The *Kubernetes Builds* component is one of link:kubernetes.html[Kubernetes Components] which
+The *Kubernetes Builds* component is one of <<kubernetes-component,Kubernetes Components>> which
 provides a producer to execute kubernetes build operations.
 
 
diff --git a/components/camel-mina/src/main/docs/mina-component.adoc b/components/camel-mina/src/main/docs/mina-component.adoc
index 2398655..1b215ff 100644
--- a/components/camel-mina/src/main/docs/mina-component.adoc
+++ b/components/camel-mina/src/main/docs/mina-component.adoc
@@ -6,7 +6,7 @@
 *Deprecated*
 
 WARNING: This component is deprecated as the Apache Mina 1.x project is EOL.
-Instead use link:mina2.html[MINA2] or link:netty.html[Netty] instead.
+Instead use <<mina2-component,MINA2>> or <<mina2-component,Netty>> instead.
 
 The *mina:* component is a transport for working with
 http://mina.apache.org/[Apache MINA]
@@ -142,7 +142,7 @@ documentation] how to write your own codec. To use your custom codec
 with `camel-mina`, you should register your codec in the
 link:registry.html[Registry]; for example, by creating a bean in the
 Spring XML file. Then use the `codec` option to specify the bean ID of
-your codec. See link:hl7.html[HL7] that has a custom codec.
+your codec. See <<hl7-dataformat,HL7>> that has a custom codec.
 
 ### Sample with sync=false
 
@@ -167,7 +167,7 @@ fact, something we have dynamically set in our processor code logic.
 
 ### Sample with Spring DSL
 
-Spring DSL can, of course, also be used for link:mina.html[MINA]. In the
+Spring DSL can, of course, also be used for <<mina-component,MINA>>. In the
 sample below we expose a TCP server on port 5555:
 
 [source,xml]
@@ -336,5 +336,5 @@ Then, you can configure your endpoint using Spring DSL:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:mina2.html[MINA2]
-* link:netty.html[Netty]
\ No newline at end of file
+* <<mina2-component,MINA2>>
+* <<netty-component,Netty>>
\ No newline at end of file
diff --git a/components/camel-mina2/src/main/docs/mina2-component.adoc b/components/camel-mina2/src/main/docs/mina2-component.adoc
index d52be53..2a23498 100644
--- a/components/camel-mina2/src/main/docs/mina2-component.adoc
+++ b/components/camel-mina2/src/main/docs/mina2-component.adoc
@@ -6,7 +6,7 @@
 The *mina2:* component is a transport for working with
 http://mina.apache.org/[Apache MINA 2.x]
 
-TIP: Favor using link:netty.html[Netty] as Netty is a much more active
+TIP: Favor using <<netty-component,Netty>> as Netty is a much more active
 maintained and popular project than Apache Mina currently is
 
 INFO: Be careful with sync=false on consumer endpoints. Since camel-mina2 all
@@ -147,7 +147,7 @@ See the Mina how to write your own codec. To use your custom codec with
 `camel-mina`, you should register your codec in the
 link:registry.html[Registry]; for example, by creating a bean in the
 Spring XML file. Then use the `codec` option to specify the bean ID of
-your codec. See link:hl7.html[HL7] that has a custom codec.
+your codec. See <<hl7-dataformat,HL7>> that has a custom codec.
 
 ### Sample with sync=false
 
@@ -203,7 +203,7 @@ assertEquals("Bye World", response);
 
 ### Sample with Spring DSL
 
-Spring DSL can, of course, also be used for link:mina.html[MINA]. In the
+Spring DSL can, of course, also be used for <<mina-component,MINA>>. In the
 sample below we expose a TCP server on port 5555:
 
 [source,xml]
@@ -270,5 +270,5 @@ is, after `codec` and `logger`.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:mina.html[MINA]
-* link:netty.html[Netty]
\ No newline at end of file
+* <<mina-component,MINA>>
+* <<netty-component,Netty>>
\ No newline at end of file
diff --git a/components/camel-mongodb-gridfs/src/main/docs/mongodb-gridfs-component.adoc b/components/camel-mongodb-gridfs/src/main/docs/mongodb-gridfs-component.adoc
index 44d22ec..f12af2c 100644
--- a/components/camel-mongodb-gridfs/src/main/docs/mongodb-gridfs-component.adoc
+++ b/components/camel-mongodb-gridfs/src/main/docs/mongodb-gridfs-component.adoc
@@ -97,7 +97,7 @@ MongoDB instance.
 ### Sample route
 
 The following route defined in Spring XML executes the operation
-link:mongodb-gridfs.html[*findOne*] on a collection.
+<<mongodb-gridfs-component,*findOne*>> on a collection.
 
 *Get a file from GridFS*
 
diff --git a/components/camel-mongodb/src/main/docs/mongodb-component.adoc b/components/camel-mongodb/src/main/docs/mongodb-component.adoc
index 377c95b..fe08eec 100644
--- a/components/camel-mongodb/src/main/docs/mongodb-component.adoc
+++ b/components/camel-mongodb/src/main/docs/mongodb-component.adoc
@@ -134,7 +134,7 @@ MongoDB instance.
 ### Sample route
 
 The following route defined in Spring XML executes the operation
-link:mongodb.html[*dbStats*] on a collection.
+<<mongodb-component,*dbStats*>> on a collection.
 
 *Get DB stats for specified collection*
 
@@ -170,7 +170,7 @@ from("direct:findById")
 
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields filter. See
-link:mongodb.html[Specifying optional parameters].
+<<mongodb-component,Specifying optional parameters>>.
 
 #### findOneByQuery
 
@@ -178,7 +178,7 @@ Use this operation to retrieve just one element from the collection that
 matches a MongoDB query. *The query object is extracted from the IN
 message body*, i.e. it should be of type `DBObject` or convertible to
 `DBObject`. It can be a JSON String or a Hashmap. See
-link:mongodb.html[#Type conversions] for more info.
+<<mongodb-component,#Type conversions>> for more info.
 
 Example with no query (returns any object of the collection):
 
@@ -200,7 +200,7 @@ from("direct:findOneByQuery")
 ------------------------------------------------------------------------------------
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields filter and/or a sort clause. See
-link:mongodb.html[Specifying optional parameters].
+<<mongodb-component,Specifying optional parameters>>.
 
 #### findAll
 
@@ -208,7 +208,7 @@ The `findAll` operation returns all documents matching a query, or none
 at all, in which case all documents contained in the collection are
 returned. *The query object is extracted from the IN message body*, i.e.
 it should be of type `DBObject` or convertible to `DBObject`. It can be
-a JSON String or a Hashmap. See link:mongodb.html[#Type conversions] for
+a JSON String or a Hashmap. See <<mongodb-component,#Type conversions>> for
 more info.
 
 Example with no query (returns all object in the collection):
@@ -287,7 +287,7 @@ consideration. |int/Integer
 |=======================================================================
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields filter and/or a sort clause. See
-link:mongodb.html[Specifying optional parameters].
+<<mongodb-component,Specifying optional parameters>>.
 
 #### count
 
diff --git a/components/camel-mongodb3/src/main/docs/mongodb3-component.adoc b/components/camel-mongodb3/src/main/docs/mongodb3-component.adoc
index 64a3ca7..86ec3e8 100644
--- a/components/camel-mongodb3/src/main/docs/mongodb3-component.adoc
+++ b/components/camel-mongodb3/src/main/docs/mongodb3-component.adoc
@@ -145,7 +145,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/context
 ### Sample route
 
 The following route defined in Spring XML executes the operation
-link:mongodb3.html[*dbStats*] on a collection.
+<<mongodb3-component,*dbStats*>> on a collection.
 
 *Get DB stats for specified collection*
 
@@ -181,7 +181,7 @@ from("direct:findById")
 
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields filter. See
-link:mongodb3.html[Specifying optional parameters].
+<<mongodb3-component,Specifying optional parameters>>.
 
 #### findOneByQuery
 
@@ -189,7 +189,7 @@ Use this operation to retrieve just one element (the first) from the collection
 matches a MongoDB query. *The query object is extracted `CamelMongoDbCriteria` header*.
 if the CamelMongoDbCriteria header is null the query object is extracted 
 message body, i.e. it should be of type `Bson` or convertible to
-`Bson`. It can be a JSON String or a Hashmap. See link:mongodb3.html[#Type conversions] for more info.
+`Bson`. It can be a JSON String or a Hashmap. See <<mongodb3-component,#Type conversions>> for more info.
 you can use the Filters class from MongoDB Driver.
 
 Example with no query (returns any object of the collection):
@@ -212,7 +212,7 @@ from("direct:findOneByQuery")
 ------------------------------------------------------------------------------------
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields projection and/or a sort clause. See
-link:mongodb3.html[Specifying optional parameters].
+<<mongodb3-component,Specifying optional parameters>>.
 
 #### findAll
 
@@ -222,7 +222,7 @@ returned.  *The query object is extracted `CamelMongoDbCriteria` header*.
 if the CamelMongoDbCriteria header is null the query object is extracted 
 message body, i.e. it should be of type `Bson` or convertible to
 `Bson`. It can be
-a JSON String or a Hashmap. See link:mongodb3.html[#Type conversions] for
+a JSON String or a Hashmap. See <<mongodb3-component,#Type conversions>> for
 more info.
 
 Example with no query (returns all object in the collection):
@@ -295,7 +295,7 @@ consideration. |int/Integer
 |=======================================================================
 
 TIP: *Supports optional parameters*. This operation supports specifying a fields projection and/or a sort clause. See
-link:mongodb3.html[Specifying optional parameters].
+<<mongodb3-component,Specifying optional parameters>>.
 
 #### count
 
diff --git a/components/camel-msv/src/main/docs/msv-component.adoc b/components/camel-msv/src/main/docs/msv-component.adoc
index d2877d8..13c0643 100644
--- a/components/camel-msv/src/main/docs/msv-component.adoc
+++ b/components/camel-msv/src/main/docs/msv-component.adoc
@@ -21,7 +21,7 @@ for this component:
 </dependency>
 ------------------------------------------------------------
 
-Note that the link:jing.html[Jing] component also supports
+Note that the <<jing-component,Jing>> component also supports
 http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
 Syntax]
 
diff --git a/components/camel-mybatis/src/main/docs/mybatis-component.adoc b/components/camel-mybatis/src/main/docs/mybatis-component.adoc
index af8499d..60f5a49 100644
--- a/components/camel-mybatis/src/main/docs/mybatis-component.adoc
+++ b/components/camel-mybatis/src/main/docs/mybatis-component.adoc
@@ -290,9 +290,9 @@ See "ScheduledPollConsumer Options"
 on link:polling-consumer.html[Polling Consumer] for more options.
 
 Alternatively you can use another mechanism for triggering the scheduled
-polls, such as the link:timer.html[Timer] or link:quartz.html[Quartz]
+polls, such as the <<timer-component,Timer>> or <<timer-component,Quartz>>
 components. In the sample below we poll the database, every 30 seconds
-using the link:timer.html[Timer] component and send the data to the JMS
+using the <<timer-component,Timer>> component and send the data to the JMS
 queue:
 
 [source,java]
diff --git a/components/camel-nagios/src/main/docs/nagios-component.adoc b/components/camel-nagios/src/main/docs/nagios-component.adoc
index 789faba..b5bb8e7 100644
--- a/components/camel-nagios/src/main/docs/nagios-component.adoc
+++ b/components/camel-nagios/src/main/docs/nagios-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.3*
 
-The link:nagios.html[Nagios] component allows you to send passive checks
+The <<nagios-component,Nagios>> component allows you to send passive checks
 to http://nagios.org[Nagios].
 
 Maven users will need to add the following dependency to their `pom.xml`
@@ -26,7 +26,7 @@ for this component:
 nagios://host[:port][?Options]
 ------------------------------
 
-Camel provides two abilities with the link:nagios.html[Nagios]
+Camel provides two abilities with the <<nagios-component,Nagios>>
 component. You can send passive check messages by sending a message to
 its endpoint. +
  Camel also provides a link:camel-jmx.html[EventNotifer] which allows
@@ -121,7 +121,7 @@ To send a `CRITICAL` message you can send the headers such as:
 
 ### Using `NagiosEventNotifer`
 
-The link:nagios.html[Nagios] component also provides an
+The <<nagios-component,Nagios>> component also provides an
 link:camel-jmx.html[EventNotifer] which you can use to send events to
 Nagios. For example we can enable this from Java as follows:
 
diff --git a/components/camel-netty-http/src/main/docs/netty-http-component.adoc b/components/camel-netty-http/src/main/docs/netty-http-component.adoc
index 0f1c3fd..0cf6751 100644
--- a/components/camel-netty-http/src/main/docs/netty-http-component.adoc
+++ b/components/camel-netty-http/src/main/docs/netty-http-component.adoc
@@ -3,13 +3,13 @@
 
 *Available as of Camel version 2.12*
 
-The *netty-http* component is an extension to link:netty.html[Netty]
-component to facilitiate HTTP transport with link:netty.html[Netty].
+The *netty-http* component is an extension to <<netty-component,Netty>>
+component to facilitiate HTTP transport with <<netty-component,Netty>>.
 
 This camel component supports both producer and consumer endpoints.
 
 WARNING: This component is deprecated. You should use
-link:netty4-http.html[Netty4 HTTP].
+<<netty4-http-component,Netty4 HTTP>>.
 
 INFO: *Stream*.
 Netty is stream based, which means the input it receives is submitted to
@@ -66,10 +66,10 @@ at the endpoint URI definition level (like `to` or `from` DSL elements).
 ### HTTP Options
 
 INFO: *A lot more options*. *Important:* This component inherits all the options from
-link:netty.html[Netty]. So make sure to look at the
-link:netty.html[Netty] documentation as well. +
- Notice that some options from link:netty.html[Netty] is not applicable
-when using this link:netty-http.html[Netty HTTP] component, such as
+<<netty-component,Netty>>. So make sure to look at the
+<<netty-component,Netty>> documentation as well. +
+ Notice that some options from <<netty-component,Netty>> is not applicable
+when using this <<netty-http-component,Netty HTTP>> component, such as
 options related to UDP transport.
 
 
@@ -241,7 +241,7 @@ success, and 500 for failure.
 |=======================================================================
 
 The following headers is provided as meta-data when a route starts from
-an link:netty-http.html[Netty HTTP] endpoint:
+an <<netty-http-component,Netty HTTP>> endpoint:
 
 The description in the table takes offset in a route having:
 `from("netty-http:http:0.0.0.0:8080/myapp")...`
@@ -291,7 +291,7 @@ org.jboss.netty.handler.codec.http.HttpRequest request = exchange.getIn(NettyHtt
 
 ### Examples
 
-In the route below we use link:netty-http.html[Netty HTTP] as a HTTP
+In the route below we use <<netty-http-component,Netty HTTP>> as a HTTP
 server, which returns back a hardcoded "Bye World" message.
 
 [source,java]
@@ -313,7 +313,7 @@ And we get back "Bye World" as the output.
 
 ### How do I let Netty match wildcards
 
-By default link:netty-http.html[Netty HTTP] will only match on exact
+By default <<netty-http-component,Netty HTTP>> will only match on exact
 uri's. But you can instruct Netty to match prefixes. For example
 
 [source,java]
@@ -321,7 +321,7 @@ uri's. But you can instruct Netty to match prefixes. For example
 from("netty-http:http://0.0.0.0:8123/foo").to("mock:foo");
 ----------------------------------------------------------
 
-In the route above link:netty-http.html[Netty HTTP] will only match if
+In the route above <<netty-http-component,Netty HTTP>> will only match if
 the uri is an exact match, so it will match if you enter +
  `http://0.0.0.0:8123/foo` but not match if you do
 `http://0.0.0.0:8123/foo/bar`.
@@ -345,7 +345,7 @@ from("netty-http:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
 ### Using multiple routes with same port
 
 In the same link:camelcontext.html[CamelContext] you can have multiple
-routes from link:netty-http.html[Netty HTTP] that shares the same port
+routes from <<netty-http-component,Netty HTTP>> that shares the same port
 (eg a `org.jboss.netty.bootstrap.ServerBootstrap` instance). Doing this
 requires a number of bootstrap options to be identical in the routes, as
 the routes will share the same
@@ -401,7 +401,7 @@ By configuring the common server bootstrap option in an single instance
 of a
 `org.apache.camel.component.netty.NettyServerBootstrapConfiguration`
 type, we can use the `bootstrapConfiguration` option on the
-link:netty-http.html[Netty HTTP] consumers to refer and reuse the same
+<<netty-http-component,Netty HTTP>> consumers to refer and reuse the same
 options across all consumers.
 
 [source,xml]
@@ -440,7 +440,7 @@ for more details and example how to do that.
 
 ### Using HTTP Basic Authentication
 
-The link:netty-http.html[Netty HTTP] consumer supports HTTP basic
+The <<netty-http-component,Netty HTTP>> consumer supports HTTP basic
 authentication by specifying the security realm name to use, as shown
 below
 
@@ -520,6 +520,6 @@ below:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:netty.html[Netty]
+* <<netty-component,Netty>>
 * link:netty-http-server-example.html[Netty HTTP Server Example]
-* link:jetty.html[Jetty]
\ No newline at end of file
+* <<jetty-component,Jetty>>
\ No newline at end of file
diff --git a/components/camel-netty/src/main/docs/netty-component.adoc b/components/camel-netty/src/main/docs/netty-component.adoc
index d19d5da..761e44e 100644
--- a/components/camel-netty/src/main/docs/netty-component.adoc
+++ b/components/camel-netty/src/main/docs/netty-component.adoc
@@ -3,7 +3,7 @@
 
 *Available as of Camel version 2.3*
 
-WARNING: This component is deprecated. You should use link:netty4.html[Netty4].
+WARNING: This component is deprecated. You should use <<netty4-component,Netty4>>.
 
 The *netty* component in Camel is a socket communication component,
 based on the http://netty.io/[Netty] project.
@@ -411,7 +411,7 @@ Getting access to SSLSession and the client certificate
 
 You can get access to the `javax.net.ssl.SSLSession` if you eg need to
 get details about the client certificate. When `ssl=true` then the
-link:netty.html[Netty] component will store the `SSLSession` as a header
+<<netty-component,Netty>> component will store the `SSLSession` as a header
 on the Camel link:message.html[Message] as shown below:
 
 [source,java]
@@ -626,5 +626,5 @@ And if we have another route we can refer to the shared worker pool:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:netty-http.html[Netty HTTP]
-* link:mina.html[MINA]
\ No newline at end of file
+* <<netty-http-component,Netty HTTP>>
+* <<mina-component,MINA>>
\ No newline at end of file
diff --git a/components/camel-netty4-http/src/main/docs/netty4-http-component.adoc b/components/camel-netty4-http/src/main/docs/netty4-http-component.adoc
index 4aa7830..3956b88 100644
--- a/components/camel-netty4-http/src/main/docs/netty4-http-component.adoc
+++ b/components/camel-netty4-http/src/main/docs/netty4-http-component.adoc
@@ -3,8 +3,8 @@
 
 *Available as of Camel version 2.14*
 
-The *netty4-http* component is an extension to link:netty4.html[Netty4]
-component to facilitiate HTTP transport with link:netty4.html[Netty4].
+The *netty4-http* component is an extension to <<netty4-component,Netty4>>
+component to facilitiate HTTP transport with <<netty4-component,Netty4>>.
 
 This camel component supports both producer and consumer endpoints.
 
@@ -65,9 +65,9 @@ at the endpoint URI definition level (like `to` or `from` DSL elements).
 
 
 INFO: *A lot more options*. *Important:* This component inherits all the options from
-link:netty4.html[Netty4]. So make sure to look at
-the link:netty4.html[Netty4] documentation as well. +
- Notice that some options from link:netty4.html[Netty4] is not
+<<netty4-component,Netty4>>. So make sure to look at
+the <<netty4-component,Netty4>> documentation as well. +
+ Notice that some options from <<netty4-component,Netty4>> is not
 applicable when using this Netty4 HTTP component, such as options
 related to UDP transport.
 
@@ -524,6 +524,6 @@ below:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:netty.html[Netty]
+* <<netty-component,Netty>>
 * link:netty-http-server-example.html[Netty HTTP Server Example]
-* link:jetty.html[Jetty]
\ No newline at end of file
+* <<jetty-component,Jetty>>
\ No newline at end of file
diff --git a/components/camel-netty4/src/main/docs/netty4-component.adoc b/components/camel-netty4/src/main/docs/netty4-component.adoc
index 8563951..b3daa4a 100644
--- a/components/camel-netty4/src/main/docs/netty4-component.adoc
+++ b/components/camel-netty4/src/main/docs/netty4-component.adoc
@@ -398,7 +398,7 @@ Getting access to SSLSession and the client certificate
 
 You can get access to the `javax.net.ssl.SSLSession` if you eg need to
 get details about the client certificate. When `ssl=true` then the
-link:netty4.html[Netty4] component will store the `SSLSession` as a
+<<netty4-component,Netty4>> component will store the `SSLSession` as a
 header on the Camel link:message.html[Message] as shown below:
 
 [source,java]
@@ -694,5 +694,5 @@ And if we have another route we can refer to the shared worker pool:
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:netty-http.html[Netty HTTP]
-* link:mina.html[MINA]
\ No newline at end of file
+* <<netty-http-component,Netty HTTP>>
+* <<mina-component,MINA>>
\ No newline at end of file
diff --git a/components/camel-openstack/src/main/docs/openstack.adoc b/components/camel-openstack/src/main/docs/openstack.adoc
index 8d953ea..d4b17f7 100644
--- a/components/camel-openstack/src/main/docs/openstack.adoc
+++ b/components/camel-openstack/src/main/docs/openstack.adoc
@@ -22,12 +22,12 @@ for this component:
 [width="100%", options="header"]
 |=======================================================================
 | OpenStack service | Camel Component| Description
-| https://wiki.openstack.org/wiki/Cinder[OpenStack Cinder] | link:openstack-cinder-component.html[openstack-cinder] | Component to maintain OpenStack cinder.
-| https://wiki.openstack.org/wiki/Glance[OpenStack Glance] | link:openstack-glance-component.html[openstack-glance] | Component to maintain OpenStack glance.
-| https://wiki.openstack.org/wiki/Keystone[OpenStack Keystone] | link:openstack-keystone-component.html[openstack-keystone] | Component to maintain OpenStack keystone.
-| https://wiki.openstack.org/wiki/Neutron[OpenStack Neutron] | link:openstack-neutron-component.html[openstack-neutron] | Component to maintain OpenStack neutron.
-| https://wiki.openstack.org/wiki/Nova[OpenStack Nova] | link:openstack-nova-component.html[openstack-nova] | Component to maintain OpenStack nova.
-| https://wiki.openstack.org/wiki/Swift[OpenStack Swift] | link:openstack-swift-component.html[openstack-swift] | Component to maintain OpenStack swift.
+| https://wiki.openstack.org/wiki/Cinder[OpenStack Cinder] | <<openstack-cinder-component,openstack-cinder>> | Component to maintain OpenStack cinder.
+| https://wiki.openstack.org/wiki/Glance[OpenStack Glance] | <<openstack-glance-component,openstack-glance>> | Component to maintain OpenStack glance.
+| https://wiki.openstack.org/wiki/Keystone[OpenStack Keystone] | <<openstack-keystone-component,openstack-keystone>> | Component to maintain OpenStack keystone.
+| https://wiki.openstack.org/wiki/Neutron[OpenStack Neutron] | <<openstack-neutron-component,openstack-neutron>> | Component to maintain OpenStack neutron.
+| https://wiki.openstack.org/wiki/Nova[OpenStack Nova] | <<openstack-nova-component,openstack-nova>> | Component to maintain OpenStack nova.
+| https://wiki.openstack.org/wiki/Swift[OpenStack Swift] | <<openstack-swift-component,openstack-swift>> | Component to maintain OpenStack swift.
 |=======================================================================
 
 
diff --git a/components/camel-protobuf/src/main/docs/protobuf-dataformat.adoc b/components/camel-protobuf/src/main/docs/protobuf-dataformat.adoc
index 397c0b6..6bab036 100644
--- a/components/camel-protobuf/src/main/docs/protobuf-dataformat.adoc
+++ b/components/camel-protobuf/src/main/docs/protobuf-dataformat.adoc
@@ -212,4 +212,4 @@ To use Protobuf in your camel routes you need to add the a dependency on
 </dependency>
 -----------------------------------------
 ### See Also
-* link:grpc.html[Camel gRPC component]
\ No newline at end of file
+* <<grpc-component,Camel gRPC component>>
\ No newline at end of file
diff --git a/components/camel-pubnub/src/main/docs/pubnub-component.adoc b/components/camel-pubnub/src/main/docs/pubnub-component.adoc
index eef881a..14ffb21 100644
--- a/components/camel-pubnub/src/main/docs/pubnub-component.adoc
+++ b/components/camel-pubnub/src/main/docs/pubnub-component.adoc
@@ -201,4 +201,4 @@ The example illustrates the PubNub component subscribing to a infinite stream of
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:rss.html[RSS]
\ No newline at end of file
+* <<rss-component,RSS>>
\ No newline at end of file
diff --git a/components/camel-quartz/src/main/docs/quartz-component.adoc b/components/camel-quartz/src/main/docs/quartz-component.adoc
index b7e60a1..ecec97d 100644
--- a/components/camel-quartz/src/main/docs/quartz-component.adoc
+++ b/components/camel-quartz/src/main/docs/quartz-component.adoc
@@ -9,7 +9,7 @@ the http://www.quartz-scheduler.org/[Quartz Scheduler 1.x].  +
 and JobDetail).
 
 TIP: If you are using Quartz 2.x then from Camel 2.12 onwards there is a
-link:quartz2.html[Quartz2] component you should use
+<<quartz2-component,Quartz2>> component you should use
 
 Maven users will need to add the following dependency to their `pom.xml`
 for this component:
@@ -120,7 +120,7 @@ INFO: *Running in OSGi and having multiple bundles with quartz
 routes*
 If you run in OSGi such as Apache ServiceMix, or Apache Karaf, and have
 multiple bundles with Camel routes that start from
-link:quartz.html[Quartz] endpoints, then make sure if you assign +
+<<quartz-component,Quartz>> endpoints, then make sure if you assign +
  an `id` to the <camelContext> that this id is unique, as this is
 required by the `QuartzScheduler` in the OSGi container. If you do not
 set any `id` on <camelContext> then +
@@ -133,7 +133,7 @@ By default Quartz will look for a `quartz.properties` file in the
 deployments this means just drop the quartz.properties in
 `WEB-INF/classes/org/quartz`.
 
-However the Camel link:quartz.html[Quartz] component also allows you to
+However the Camel <<quartz-component,Quartz>> component also allows you to
 configure properties:
 
 [width="100%",cols="10%,10%,10%,70%",options="header",]
@@ -180,7 +180,7 @@ This is an example:
 *Available as of Camel 2.4*
 
 If you use Quartz in clustered mode, e.g. the `JobStore` is clustered.
-Then from Camel 2.4 onwards the link:quartz.html[Quartz] component will
+Then from Camel 2.4 onwards the <<quartz-component,Quartz>> component will
 *not* pause/remove triggers when a node is being stopped/shutdown. This
 allows the trigger to keep running on the other nodes in the cluster.
 
@@ -260,5 +260,5 @@ link:type-converter.html[Type Converter] in the camel-core.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:quartz2.html[Quartz2]
-* link:timer.html[Timer]
\ No newline at end of file
+* <<quartz2-component,Quartz2>>
+* <<timer-component,Timer>>
\ No newline at end of file
diff --git a/components/camel-quartz2/src/main/docs/quartz2-component.adoc b/components/camel-quartz2/src/main/docs/quartz2-component.adoc
index 5c587dd..283265a 100644
--- a/components/camel-quartz2/src/main/docs/quartz2-component.adoc
+++ b/components/camel-quartz2/src/main/docs/quartz2-component.adoc
@@ -23,7 +23,7 @@ for this component:
 
 *NOTE:* Quartz 2.x API is not compatible with Quartz 1.x. If you need to
 remain on old Quartz 1.x, please +
- use the old link:quartz.html[Quartz] component instead.
+ use the old <<quartz-component,Quartz>> component instead.
 
 === URI format
 
@@ -135,7 +135,7 @@ INFO: *Running in OSGi and having multiple bundles with quartz
 routes*
 If you run in OSGi such as Apache ServiceMix, or Apache Karaf, and have
 multiple bundles with Camel routes that start from
-link:quartz2.html[Quartz2] endpoints, then make sure if you assign an `id` 
+<<quartz2-component,Quartz2>> endpoints, then make sure if you assign an `id` 
 to the <camelContext> that this id is unique, as this is
 required by the `QuartzScheduler` in the OSGi container. If you do not
 set any `id` on <camelContext> then a unique id is auto assigned, and there is no problem.
@@ -147,7 +147,7 @@ By default Quartz will look for a `quartz.properties` file in the
 deployments this means just drop the quartz.properties in
 `WEB-INF/classes/org/quartz`.
 
-However the Camel link:quartz2.html[Quartz2] component also allows you
+However the Camel <<quartz2-component,Quartz2>> component also allows you
 to configure properties:
 
 [width="100%",cols="10%,10%,10%,70%",options="header",]
@@ -180,7 +180,7 @@ unless explicit disabled.
 
 === Starting the Quartz scheduler
 
-The link:quartz2.html[Quartz2] component offers an option to let the
+The <<quartz2-component,Quartz2>> component offers an option to let the
 Quartz scheduler be started delayed, or not auto started at all.
 
 This is an example:
@@ -195,7 +195,7 @@ This is an example:
 === Clustering
 
 If you use Quartz in clustered mode, e.g. the `JobStore` is clustered.
-Then the link:quartz2.html[Quartz2] component will *not* pause/remove
+Then the <<quartz2-component,Quartz2>> component will *not* pause/remove
 triggers when a node is being stopped/shutdown. This allows the trigger
 to keep running on the other nodes in the cluster.
 
@@ -260,7 +260,7 @@ The timeZone value is the values accepted by `java.util.TimeZone`.
 
 === Using QuartzScheduledPollConsumerScheduler
 
-The link:quartz2.html[Quartz2] component provides a
+The <<quartz2-component,Quartz2>> component provides a
 link:polling-consumer.html[Polling Consumer] scheduler which allows to
 use cron based scheduling for link:polling-consumer.html[Polling
 Consumer] such as the link:file2.html[File] and link:ftp2.html[FTP]
@@ -276,8 +276,8 @@ second, then a Camel route can be define simply as:
 ----
 
 Notice we define the `scheduler=quartz2` to instruct Camel to use the
-link:quartz2.html[Quartz2] based scheduler. Then we use `scheduler.xxx`
-options to configure the scheduler. The link:quartz2.html[Quartz2]
+<<quartz2-component,Quartz2>> based scheduler. Then we use `scheduler.xxx`
+options to configure the scheduler. The <<quartz2-component,Quartz2>>
 scheduler requires the cron option to be set.
 
 The following options is supported:
@@ -287,7 +287,7 @@ The following options is supported:
 |Parameter |Default |Type |Description
 
 |`quartzScheduler` |`null` |`org.quartz.Scheduler` |To use a custom Quartz scheduler. If none configure then the shared
-scheduler from the link:quartz2.html[Quartz2] component is used.
+scheduler from the <<quartz2-component,Quartz2>> component is used.
 
 |`cron` |`null` |`String` |*Mandatory*: To define the cron expression for triggering the polls.
 
diff --git a/components/camel-rest-swagger/src/main/docs/rest-swagger-component.adoc b/components/camel-rest-swagger/src/main/docs/rest-swagger-component.adoc
index 7dc7648..1edb9bb 100644
--- a/components/camel-rest-swagger/src/main/docs/rest-swagger-component.adoc
+++ b/components/camel-rest-swagger/src/main/docs/rest-swagger-component.adoc
@@ -8,12 +8,12 @@ http://swagger.io/[Swagger] (Open API) specification document and
 delegates to a component implementing the _RestProducerFactory_
 interface. Currently known working components are:
 
-* link:http-component.html[http]
-* link:http4-component.html[http4]
-* link:netty4-http-component.html[netty4-http]
-* link:restlet-component.html[restlet]
-* link:jetty-component.html[jetty]
-* link:undertow-component.html[undertow]
+* <<http-component,http>>
+* <<http4-component,http4>>
+* <<netty4-http-component,netty4-http>>
+* <<restlet-component,restlet>>
+* <<jetty-component,jetty>>
+* <<undertow-component,undertow>>
 
 Maven users will need to add the following dependency to their
 `pom.xml` for this component:
@@ -143,7 +143,7 @@ http://petstore.swagger.io/[_PetStore_] provided REST API simply
 reference the specification URI and desired operation id from the
 Swagger specification or download the specification and store it as
 `swagger.json` (in the root) of CLASSPATH that way it will be 
-automaticaly used. Let's use the link:undertow-component.html[Undertow]
+automaticaly used. Let's use the <<undertow-component,Undertow>>
 component to perform all the requests and Camels excelent support for 
 link:spring-boot.html[Spring Boot].
 
diff --git a/components/camel-routebox/src/main/docs/routebox-component.adoc b/components/camel-routebox/src/main/docs/routebox-component.adoc
index 398dfe6..dbffbdc 100644
--- a/components/camel-routebox/src/main/docs/routebox-component.adoc
+++ b/components/camel-routebox/src/main/docs/routebox-component.adoc
@@ -7,9 +7,9 @@
 
 The Routebox component will be revisited in upcoming releases to see if
 it can be further simplified, be more intuitive and user friendly. The
-related link:context.html[Context] component may be regardes as the
+related <<context-component,Context>> component may be regardes as the
 simpler component. This component may be @deprecated in favor of
-link:context.html[Context].
+<<context-component,Context>>.
 
 The *routebox* component enables the creation of specialized endpoints
 that offer encapsulation and a strategy based indirection service to a
diff --git a/components/camel-rss/src/main/docs/rss-component.adoc b/components/camel-rss/src/main/docs/rss-component.adoc
index 937d291..b4a6ea0 100644
--- a/components/camel-rss/src/main/docs/rss-component.adoc
+++ b/components/camel-rss/src/main/docs/rss-component.adoc
@@ -174,4 +174,4 @@ return firstEntry.getTitle().contains("Camel");
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:atom.html[Atom]
\ No newline at end of file
+* <<atom-component,Atom>>
\ No newline at end of file
diff --git a/components/camel-ruby/src/main/docs/ruby.adoc b/components/camel-ruby/src/main/docs/ruby.adoc
index a532704..310f5a4 100644
--- a/components/camel-ruby/src/main/docs/ruby.adoc
+++ b/components/camel-ruby/src/main/docs/ruby.adoc
@@ -78,7 +78,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -101,7 +101,7 @@ Using properties function
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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".
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 0297792..21d0629 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
@@ -264,7 +264,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
 link:content-based-router.html[Content Based Router] and link:content-based-router.html[Content Based Router] and 
-link:spel-language.html[Spring Expression Language (SpEL)] to choose when to perform queries.
+<<spel-language,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
@@ -539,7 +539,7 @@ final SObjectCompositeResult contactCreationResult = results.stream().filter(r -
 ### Camel Salesforce Maven Plugin
 
 This Maven plugin generates DTOs for the Camel
-link:salesforce.html[Salesforce].
+<<salesforce-component,Salesforce>>.
 
 ### Options
 
diff --git a/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc b/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
index 8dc2993..a80fcb2 100644
--- a/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
+++ b/components/camel-sap-netweaver/src/main/docs/sap-netweaver-component.adoc
@@ -188,4 +188,4 @@ Destination airport: SFO
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:http.html[HTTP]
\ No newline at end of file
+* <<http-component,HTTP>>
\ No newline at end of file
diff --git a/components/camel-scala/src/main/docs/scala-eip.adoc b/components/camel-scala/src/main/docs/scala-eip.adoc
index f8d52e6..8ec69a4 100644
--- a/components/camel-scala/src/main/docs/scala-eip.adoc
+++ b/components/camel-scala/src/main/docs/scala-eip.adoc
@@ -220,5 +220,5 @@ transformation and pass that to the `process` method instead. The
 example below uses pattern matching to enrich the message content:
 
 Off course, you can also use any other Camel component (e.g.
-link:velocity.html[Velocity]) to enrich the content and add it to a
+<<velocity-component,Velocity>>) to enrich the content and add it to a
 pipeline
diff --git a/components/camel-scala/src/main/docs/scala-supported-languages.adoc b/components/camel-scala/src/main/docs/scala-supported-languages.adoc
index bbdb72a..ec39e85 100644
--- a/components/camel-scala/src/main/docs/scala-supported-languages.adoc
+++ b/components/camel-scala/src/main/docs/scala-supported-languages.adoc
@@ -12,7 +12,7 @@ You can use any of the supported Camel link:languages.html[Languages] in
 the link:scala-dsl.html[Scala DSL]; see below for a couple of examples:
 
 [[ScalaDSL-Supportedlanguages-Using]]
-Using link:xpath.html[XPath]
+Using <<xpath-language,XPath>>
 ++++++++++++++++++++++++++++
 
 With the XPath trait, you have an additional method available on an
@@ -21,7 +21,7 @@ Splitter example, where the `xpath` method is used in a
 `Exchange ⇒ Any*` function literal
 
 [[ScalaDSL-Supportedlanguages-Using.1]]
-Using link:jxpath.html[JXPath]
+Using <<jxpath-language,JXPath>>
 ++++++++++++++++++++++++++++++
 
 With the `org.apache.camel.scala.dsl.languages.JXPath` trait, you can an
diff --git a/components/camel-script/src/main/docs/javaScript-language.adoc b/components/camel-script/src/main/docs/javaScript-language.adoc
index b9a6dd1..1726968 100644
--- a/components/camel-script/src/main/docs/javaScript-language.adoc
+++ b/components/camel-script/src/main/docs/javaScript-language.adoc
@@ -90,7 +90,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -109,7 +109,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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-script/src/main/docs/php-language.adoc b/components/camel-script/src/main/docs/php-language.adoc
index 5e0ff28..df64f52 100644
--- a/components/camel-script/src/main/docs/php-language.adoc
+++ b/components/camel-script/src/main/docs/php-language.adoc
@@ -56,7 +56,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -75,7 +75,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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-script/src/main/docs/python-language.adoc b/components/camel-script/src/main/docs/python-language.adoc
index c2797b3..e4123a3 100644
--- a/components/camel-script/src/main/docs/python-language.adoc
+++ b/components/camel-script/src/main/docs/python-language.adoc
@@ -89,7 +89,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -108,7 +108,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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-script/src/main/docs/ruby-language.adoc b/components/camel-script/src/main/docs/ruby-language.adoc
index efd573b..b2b954a 100644
--- a/components/camel-script/src/main/docs/ruby-language.adoc
+++ b/components/camel-script/src/main/docs/ruby-language.adoc
@@ -89,7 +89,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -108,7 +108,7 @@ header on the Camel message with the key `CamelScriptArguments`. +
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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-servlet/src/main/docs/servlet-component.adoc b/components/camel-servlet/src/main/docs/servlet-component.adoc
index f1b314c..9bdbdb3 100644
--- a/components/camel-servlet/src/main/docs/servlet-component.adoc
+++ b/components/camel-servlet/src/main/docs/servlet-component.adoc
@@ -109,7 +109,7 @@ with the following path and query parameters:
 
 ### Message Headers
 
-Camel will apply the same Message Headers as the link:http.html[HTTP]
+Camel will apply the same Message Headers as the <<http-component,HTTP>>
 component.
 
 Camel will also populate *all* `request.parameter` and
@@ -122,7 +122,7 @@ header named `orderid` with the value 123.
 You can consume only from endpoints generated by the Servlet component.
 Therefore, it should be used only as input into your Camel routes. To
 issue HTTP requests against other HTTP endpoints, use the
-link:http.html[HTTP Component]
+<<http-component,HTTP Component>>
 
 ### Putting Camel JARs in the app server boot classpath
 
@@ -185,7 +185,7 @@ side-effects.
 
 ### Sample
 
-INFO: From Camel 2.7 onwards it's easier to use link:servlet.html[Servlet] in
+INFO: From Camel 2.7 onwards it's easier to use <<servlet-component,Servlet>> in
 Spring web applications. See link:servlet-tomcat-example.html[Servlet
 Tomcat Example] for details.
 
@@ -279,5 +279,5 @@ The automatic mapping of the Camel servlet can also be disabled.
 * link:servlet-tomcat-example.html[Servlet Tomcat Example]
 * link:servlet-tomcat-no-spring-example.html[Servlet Tomcat No Spring
 Example]
-* link:http.html[HTTP]
-* link:jetty.html[Jetty]
\ No newline at end of file
+* <<http-component,HTTP>>
+* <<jetty-component,Jetty>>
\ No newline at end of file
diff --git a/components/camel-servletlistener/src/main/docs/servletlistener.adoc b/components/camel-servletlistener/src/main/docs/servletlistener.adoc
index 79040c6..9705503 100644
--- a/components/camel-servletlistener/src/main/docs/servletlistener.adoc
+++ b/components/camel-servletlistener/src/main/docs/servletlistener.adoc
@@ -67,7 +67,7 @@ in the web.xml file.
 in Camel. You should prefix the option with "propertyPlaceholder.", for
 example to configure the location, use propertyPlaceholder.location as
 name. You can configure all the options from the
-link:properties.html[Properties] component.
+<<properties-component,Properties>> component.
 
 |jmx.XXX |  | To configure link:camel-jmx.html[JMX]. You should prefix the option with
 "jmx.", for example to disable JMX, use jmx.disabled as name. You can
@@ -293,8 +293,8 @@ JNDI or Simple as Camel link:registry.html[Registry]
 
 This component uses either JNDI or Simple as the
 link:registry.html[Registry]. +
- This allows you to lookup link:bean.html[Bean]s and other services in
-JNDI, and as well to bind and unbind your own link:bean.html[Bean]s.
+ This allows you to lookup <<bean-component,Bean>>s and other services in
+JNDI, and as well to bind and unbind your own <<bean-component,Bean>>s.
 
 This is done from Java code by implementing the
 `org.apache.camel.component.servletlistener.CamelContextLifecycle`.
@@ -321,8 +321,8 @@ interface.
   </context-param>
 -------------------------------------------------------------------------------------
 
-As we enlisted our HelloBean link:bean.html[Bean] using the name
-"myBean" we can refer to this link:bean.html[Bean] in the Camel routes
+As we enlisted our HelloBean <<bean-component,Bean>> using the name
+"myBean" we can refer to this <<bean-component,Bean>> in the Camel routes
 as shown below:
 
 [source,java]
@@ -348,7 +348,7 @@ then the `CamelContextLifecycle` must use the `SimpleRegistry`
 See Also
 ^^^^^^^^
 
-* link:servlet.html[SERVLET]
+* <<servlet-component,SERVLET>>
 * link:servlet-tomcat-example.html[Servlet Tomcat Example]
 * link:servlet-tomcat-no-spring-example.html[Servlet Tomcat No Spring
 Example]
diff --git a/components/camel-shiro/src/main/docs/shiro.adoc b/components/camel-shiro/src/main/docs/shiro.adoc
index a0c0b86..4e9ad1f 100644
--- a/components/camel-shiro/src/main/docs/shiro.adoc
+++ b/components/camel-shiro/src/main/docs/shiro.adoc
@@ -135,7 +135,7 @@ of the roles in the list are applicable.
 these or pass in your own Cipher implementation
 
 |`base64` |`false` |`boolean` |*Camel 2.12:* To use base64 encoding for the security token header,
-which allows transferring the header over link:jms.html[JMS] etc. This
+which allows transferring the header over <<jms-component,JMS>> etc. This
 option must also be set on `ShiroSecurityTokenInjector` as well.
 
 |`allPermissionsRequired` |`false` |`boolean` |*Camel 2.13:* The default is that authorization is granted if any of the
diff --git a/components/camel-sjms/src/main/docs/sjms-batch-component.adoc b/components/camel-sjms/src/main/docs/sjms-batch-component.adoc
index 2c13b6e..04f3f52 100644
--- a/components/camel-sjms/src/main/docs/sjms-batch-component.adoc
+++ b/components/camel-sjms/src/main/docs/sjms-batch-component.adoc
@@ -14,7 +14,7 @@ In order to ensure that data is not lost if the system performing the
 processing fails, it is typically consumed within a transaction from the
 queue, and once aggregated stored in a persistent
 `AggregationRepository`, such as the one found in the
-link:jdbc.html[JDBC Component].
+<<jdbc-component,JDBC Component>>.
 
 The behavior of the aggregator pattern involves fetching data from the
 `AggregationRepository` before an incoming message is aggregated, and
@@ -101,7 +101,7 @@ Topic consumption is not supported, as there is no advantage to using
 batch consumption within that context. Topic messages are usually
 non-persistent, and loss is acceptable. If consumed within a transaction
 that fails, a topic message will likely not be redelivered by the
-broker. A plain link:sjms.html[SJMS] consumer endpoint can be used in
+broker. A plain <<sjms-component,SJMS>> consumer endpoint can be used in
 conjunction with a regular non-persistence backed
 link:aggregator2.html[aggregator] in this scenario.
 
diff --git a/components/camel-soap/src/main/docs/soapjaxb-dataformat.adoc b/components/camel-soap/src/main/docs/soapjaxb-dataformat.adoc
index 71e75c4..15002ce 100644
--- a/components/camel-soap/src/main/docs/soapjaxb-dataformat.adoc
+++ b/components/camel-soap/src/main/docs/soapjaxb-dataformat.adoc
@@ -14,7 +14,7 @@ onwards.
 
 *Namespace prefix mapping*
 
-See link:jaxb.html[JAXB] for details how you can control namespace
+See <<jaxb-dataformat,JAXB>> for details how you can control namespace
 prefix mappings when marshalling using link:soap.html[SOAP] data format.
 
 ### SOAP Options
@@ -89,7 +89,7 @@ from("direct:start")
 -------------------------------------------------------------------------------------------------------------------------------------
 
 TIP: *See also*
-As the SOAP dataformat inherits from the link:jaxb.html[JAXB] dataformat
+As the SOAP dataformat inherits from the <<jaxb-dataformat,JAXB>> dataformat
 most settings apply here as well
 
 
diff --git a/components/camel-solr/src/main/docs/solr-component.adoc b/components/camel-solr/src/main/docs/solr-component.adoc
index 7200cf7..cc35a3e 100644
--- a/components/camel-solr/src/main/docs/solr-component.adoc
+++ b/components/camel-solr/src/main/docs/solr-component.adoc
@@ -186,7 +186,7 @@ delete routes and then call the commit route.
 ### Querying Solr
 
 Currently, this component doesn't support querying data natively (may be
-added later). For now, you can query Solr using link:http.html[HTTP] as
+added later). For now, you can query Solr using <<http-component,HTTP>> as
 follows:
 
 [source,java]
diff --git a/components/camel-spark-rest/src/main/docs/spark-rest-component.adoc b/components/camel-spark-rest/src/main/docs/spark-rest-component.adoc
index 8c324bc..ad02fab 100644
--- a/components/camel-spark-rest/src/main/docs/spark-rest-component.adoc
+++ b/components/camel-spark-rest/src/main/docs/spark-rest-component.adoc
@@ -188,4 +188,4 @@ containers.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:rest.html[Rest]
\ No newline at end of file
+* <<rest-component,Rest>>
\ No newline at end of file
diff --git a/components/camel-spring-boot/src/main/docs/spring-boot.adoc b/components/camel-spring-boot/src/main/docs/spring-boot.adoc
index 9f148a6..fa49e56 100644
--- a/components/camel-spring-boot/src/main/docs/spring-boot.adoc
+++ b/components/camel-spring-boot/src/main/docs/spring-boot.adoc
@@ -157,7 +157,7 @@ Spring Boot auto-configuration automatically connects
 to http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config[Spring
 Boot external configuration] (like properties placeholders, OS
 environment variables or system properties) with
-the link:properties.html[Camel properties support]. It basically means
+the <<properties-component,Camel properties support>>. It basically means
 that any property defined in `application.properties` file:  
 
 [source,xml]
diff --git a/components/camel-spring-security/src/main/docs/spring-security.adoc b/components/camel-spring-security/src/main/docs/spring-security.adoc
index f3f3e8f..b897b76 100644
--- a/components/camel-spring-security/src/main/docs/spring-security.adoc
+++ b/components/camel-spring-security/src/main/docs/spring-security.adoc
@@ -88,7 +88,7 @@ authorization is not specified by this component. You can write your own
 processors or components which get authentication information from the
 exchange depending on your needs. For example, you might create a
 processor that gets credentials from an HTTP request header originating
-in the link:jetty.html[Jetty] component. No matter how the credentials
+in the <<jetty-component,Jetty>> component. No matter how the credentials
 are collected, they need to be placed in the In message or the
 `SecurityContextHolder` so the Camel link:spring-security.html[Spring
 Security] component can access them:
@@ -147,7 +147,7 @@ implementation of the
 `org.apache.camel.component.spring.security.AuthenticationAdapter` to
 your `<authorizationPolicy>` bean. This can be useful if you are working
 with components that do not use Spring Security but do provide a
-`Subject`. At this time, only the link:cxf.html[CXF] component populates
+`Subject`. At this time, only the <<cxf-component,CXF>> component populates
 the `Exchange.AUTHENTICATION` header.
 
 [[SpringSecurity-Handlingauthenticationandauthorizationerrors]]
diff --git a/components/camel-spring/src/main/docs/spring.adoc b/components/camel-spring/src/main/docs/spring.adoc
index fea8c87..65fbcbc 100644
--- a/components/camel-spring/src/main/docs/spring.adoc
+++ b/components/camel-spring/src/main/docs/spring.adoc
@@ -4,7 +4,7 @@ Apache Camel is designed to work nicely with the
 http://www.springframework.org/[Spring Framework] in a number of ways.
 
 * Camel uses Spring Transactions as the default transaction handling in
-components like link:jms.html[JMS] and link:jpa.html[JPA]
+components like <<jms-component,JMS>> and <<jms-component,JPA>>
 * Camel works with Spring 2 XML processing with the
 link:xml-configuration.html[Xml Configuration]
 * Camel Spring XML Schema's is defined at link:xml-reference.html[Xml
@@ -24,8 +24,8 @@ and auto-expose Spring beans as components and endpoints.
 * Allows you to reuse the link:spring-testing.html[Spring Testing]
 framework to simplify your unit and integration testing using
 link:enterprise-integration-patterns.html[Enterprise Integration
-Patterns] and Camel's powerful link:mock.html[Mock] and
-link:test.html[Test] endpoints
+Patterns] and Camel's powerful <<mock-component,Mock>> and
+<<test-component,Test>> endpoints
 * From *Camel 2.15* onwards Camel supports Spring Boot using
 the `camel-spring-boot` component.
 
diff --git a/components/camel-sql/src/main/docs/sql-component.adoc b/components/camel-sql/src/main/docs/sql-component.adoc
index cbd6266..f6f9d37 100644
--- a/components/camel-sql/src/main/docs/sql-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-component.adoc
@@ -4,7 +4,7 @@
 *Available as of Camel version 1.4*
 
 The *sql:* component allows you to work with databases using JDBC
-queries. The difference between this component and link:jdbc.html[JDBC]
+queries. The difference between this component and <<jdbc-component,JDBC>>
 component is that in case of SQL the query is a property of the endpoint
 and it uses message payload as parameters passed to the query.
 
@@ -780,4 +780,4 @@ You should also include the specific database driver, if needed.
 
 link:sql-stored-procedure.html[SQL Stored Procedure]
 
-link:jdbc.html[JDBC]
\ No newline at end of file
+<<jdbc-component,JDBC>>
\ No newline at end of file
diff --git a/components/camel-sql/src/main/docs/sql-stored-component.adoc b/components/camel-sql/src/main/docs/sql-stored-component.adoc
index 19b4e59..1eb0e4c 100644
--- a/components/camel-sql/src/main/docs/sql-stored-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-stored-component.adoc
@@ -5,7 +5,7 @@
 
 The *sql-stored:* component allows you to work with databases using JDBC
 Stored Procedure queries. This component is an extension to
-the link:sql-component.html[SQL Component] but specialized for calling
+the <<sql-component,SQL Component>> but specialized for calling
 stored procedures.
 
 This component uses `spring-jdbc` behind the scenes for the actual SQL
@@ -250,4 +250,4 @@ You should also include the specific database driver, if needed.
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:sql-component.html[SQL Component]
\ No newline at end of file
+* <<sql-component,SQL Component>>
\ No newline at end of file
diff --git a/components/camel-syslog/src/main/docs/syslog-dataformat.adoc b/components/camel-syslog/src/main/docs/syslog-dataformat.adoc
index 445e99f..06628f7 100644
--- a/components/camel-syslog/src/main/docs/syslog-dataformat.adoc
+++ b/components/camel-syslog/src/main/docs/syslog-dataformat.adoc
@@ -13,10 +13,10 @@ This component supports the following:
 SyslogMessage model objects.
 * link:type-converter.html[Type Converter] from/to SyslogMessage and
 String
-* Integration with the link:mina.html[camel-mina] component.
-* Integration with the link:netty.html[camel-netty] component.
+* Integration with the <<mina-component,camel-mina>> component.
+* Integration with the <<netty-component,camel-netty>> component.
 * *Camel 2.14:* Encoder and decoder for
-the link:netty.html[camel-netty] component.
+the <<netty-component,camel-netty>> component.
 * *Camel 2.14:* Support for RFC5424 also.
 
 Maven users will need to add the following dependency to their `pom.xml`
@@ -40,7 +40,7 @@ as its underlying transport layer mechanism.
 The UDP port that has been assigned to syslog is 514.
 
 To expose a Syslog listener service we reuse the existing
-link:mina.html[camel-mina] component or link:netty.html[camel-netty]
+<<mina-component,camel-mina>> component or <<mina-component,camel-netty>>
 where we just use the `Rfc3164SyslogDataFormat` to marshal and unmarshal
 messages. Notice that from *Camel 2.14* onwards the syslog dataformat is
 renamed to `SyslogDataFormat`.
@@ -64,8 +64,8 @@ The Syslog dataformat supports 1 options which are listed below.
 *Available as of Camel 2.14*
 
 To expose a Syslog listener service we reuse the
-existing link:mina.html[camel-mina] component
-or link:netty.html[camel-netty] where we just use
+existing <<mina-component,camel-mina>> component
+or <<netty-component,camel-netty>> where we just use
 the `SyslogDataFormat` to marshal and unmarshal messages
 
 #### Exposing a Syslog listener
@@ -93,7 +93,7 @@ as an InputStream:
 </camelContext>
 ------------------------------------------------------------------------------------------
 
-The same route using link:mina.html[camel-mina]
+The same route using <<mina-component,camel-mina>>
 
 [source,xml]
 -------------------------------------------------------------------------
diff --git a/components/camel-test-blueprint/src/main/docs/test-blueprint.adoc b/components/camel-test-blueprint/src/main/docs/test-blueprint.adoc
index a1dc3e2..ca63b8f 100644
--- a/components/camel-test-blueprint/src/main/docs/test-blueprint.adoc
+++ b/components/camel-test-blueprint/src/main/docs/test-blueprint.adoc
@@ -113,7 +113,7 @@ services.put("myService", asService(myService, null));
 ------------------------------------------------------
 
 This allows us to use the service by calling a method on it from a Camel
-link:bean.html[Bean] component in a route as shown:
+<<bean-component,Bean>> component in a route as shown:
 
 [source,xml]
 --------------------------------
diff --git a/components/camel-test-cdi/src/main/docs/test-cdi.adoc b/components/camel-test-cdi/src/main/docs/test-cdi.adoc
index 2b614be..bfb0842 100644
--- a/components/camel-test-cdi/src/main/docs/test-cdi.adoc
+++ b/components/camel-test-cdi/src/main/docs/test-cdi.adoc
@@ -283,7 +283,7 @@ Using ShrinkWarp Descriptors, you have a complete control over the
 configuration and kind of Camel CDI applications you want to test. For
 example, to test a Camel CDI application that uses the Camel
 link:rest-dsl.html[REST DSL] configured with the
-link:servlet.html[Servlet component], you need to create a Web archive,
+<<servlet-component,Servlet component>>, you need to create a Web archive,
 e.g.:
 
 [source,java]
@@ -640,7 +640,7 @@ Routes advising with `adviceWith`
 can _advice_ an existing route before its being tested. It allows to
 add http://camel.apache.org/intercept.html[Intercept] or _weave_ routes
 for testing purpose, for example using
-the link:mock.html[Mock] component.
+the <<mock-component,Mock>> component.
 
 It is recommended to only advice routes which are not started already.
 To meet that requirement, you can use the `CamelContextStartingEvent`
diff --git a/components/camel-test/src/main/docs/test.adoc b/components/camel-test/src/main/docs/test.adoc
index 3d1bf1b..9cf61e3 100644
--- a/components/camel-test/src/main/docs/test.adoc
+++ b/components/camel-test/src/main/docs/test.adoc
@@ -3,23 +3,23 @@ Test Component
 ~~~~~~~~~~~~~~
 
 link:testing.html[Testing] of distributed and asynchronous processing is
-notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
-and link:dataset.html[DataSet] endpoints work great with the
+notoriously difficult. The <<mock-component,Mock>>, <<mock-component,Test>>
+and <<dataset-component,DataSet>> endpoints work great with the
 link:testing.html[Camel Testing Framework] to simplify your unit and
 integration testing using
 link:enterprise-integration-patterns.html[Enterprise Integration
 Patterns] and Camel's large range of link:components.html[Components]
 together with the powerful link:bean-integration.html[Bean Integration].
 
-The *test* component extends the link:mock.html[Mock] component to
+The *test* component extends the <<mock-component,Mock>> component to
 support pulling messages from another endpoint on startup to set the
-expected message bodies on the underlying link:mock.html[Mock] endpoint.
+expected message bodies on the underlying <<mock-component,Mock>> endpoint.
 That is, you use the test endpoint in a route and messages arriving on
 it will be implicitly compared to some expected messages extracted from
 some other location.
 
 So you can use, for example, an expected set of message bodies as files.
-This will then set up a properly configured link:mock.html[Mock]
+This will then set up a properly configured <<mock-component,Mock>>
 endpoint, which is only valid if the received messages match the number
 of expected messages and their message payloads are equal.
 
@@ -36,7 +36,7 @@ for this component when using *Camel 2.8* or older:
 </dependency>
 ------------------------------------------------------------
 
-From Camel 2.9 onwards the link:test.html[Test] component is provided
+From Camel 2.9 onwards the <<test-component,Test>> component is provided
 directly in the camel-core.
 
 [[Test-URIformat]]
@@ -94,7 +94,7 @@ http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/compon
 method], your test case will perform the necessary assertions.
 
 To see how you can set other expectations on the test endpoint, see the
-link:mock.html[Mock] component.
+<<mock-component,Mock>> component.
 
 [[Test-SeeAlso]]
 See Also
diff --git a/components/camel-twitter/src/main/docs/twitter-component.adoc b/components/camel-twitter/src/main/docs/twitter-component.adoc
index b43038e..5713baa 100644
--- a/components/camel-twitter/src/main/docs/twitter-component.adoc
+++ b/components/camel-twitter/src/main/docs/twitter-component.adoc
@@ -7,11 +7,11 @@
 ====================================================================================
 The composite twitter component has been deprecated. Use individual component for directmessage, search, streaming and timeline.
 
-* link:twitter.html[Twitter Components]
-  ** link:twitter-directmessage-component.html[Twitter Direct Message]
-  ** link:twitter-search-component.html[Twitter Search]
-  ** link:twitter-streaming-component.html[Twitter Streaming]
-  ** link:twitter-timeline-component.html[Twitter Timeline]
+* <<twitter-component,Twitter Components>>
+  ** <<twitter-directmessage-component,Twitter Direct Message>>
+  ** <<twitter-search-component,Twitter Search>>
+  ** <<twitter-streaming-component,Twitter Streaming>>
+  ** <<twitter-timeline-component,Twitter Timeline>>
 ====================================================================================
 
 The Twitter component enables the most useful features of the Twitter
diff --git a/components/camel-twitter/src/main/docs/twitter.adoc b/components/camel-twitter/src/main/docs/twitter.adoc
index e9fd24b..cd6d3b4 100644
--- a/components/camel-twitter/src/main/docs/twitter.adoc
+++ b/components/camel-twitter/src/main/docs/twitter.adoc
@@ -4,10 +4,10 @@
 
 The camel-twitter consists of 4 components:
 
-* link:twitter-directmessage-component.html[Twitter Direct Message]
-* link:twitter-search-component.html[Twitter Search]
-* link:twitter-streaming-component.html[Twitter Streaming]
-* link:twitter-timeline-component.html[Twitter Timeline]
+* <<twitter-directmessage-component,Twitter Direct Message>>
+* <<twitter-search-component,Twitter Search>>
+* <<twitter-streaming-component,Twitter Streaming>>
+* <<twitter-timeline-component,Twitter Timeline>>
 
 The Twitter components enable the most useful features of the Twitter
 API by encapsulating http://twitter4j.org/[Twitter4J]. It allows direct,
@@ -43,13 +43,13 @@ will be executed five times (one for each Status).
 [width="100%",cols="10%,10%,10%,70%",options="header",]
 |=======================================================================
 |Endpoint |Context |Body Type |Notice
-|link:twitter-directmessage-component.html[twitter-directmessage] |direct, polling |twitter4j.DirectMessage | 
+|<<twitter-directmessage-component,twitter-directmessage>> |direct, polling |twitter4j.DirectMessage | 
 
-|link:twitter-search-component.html[twitter-search] |direct, polling |twitter4j.Status | 
+|<<twitter-search-component,twitter-search>> |direct, polling |twitter4j.Status | 
 
-|link:twitter-streaming-component.html[twitter-streaming] |event, polling |twitter4j.Status | 
+|<<twitter-streaming-component,twitter-streaming>> |event, polling |twitter4j.Status | 
 
-|link:twitter-timeline-component.html[twitter-timeline] |direct, polling |twitter4j.Status | 
+|<<twitter-timeline-component,twitter-timeline>> |direct, polling |twitter4j.Status | 
 |=======================================================================
 
 ### Producer endpoints
@@ -57,9 +57,9 @@ will be executed five times (one for each Status).
 [width="100%",cols="10%,10%,80%",options="header",]
 |==============================
 |Endpoint |Body Type |Notice
-|link:twitter-directmessage-component.html[twitter-directmessage] |String |
-|link:twitter-search-component.html[twitter-search] |List<twitter4j.Status> |
-|link:twitter-timeline-component.html[twitter-timeline] |String |Only 'user' timelineType is supported for producer
+|<<twitter-directmessage-component,twitter-directmessage>> |String |
+|<<twitter-search-component,twitter-search>> |List<twitter4j.Status> |
+|<<twitter-timeline-component,twitter-timeline>> |String |Only 'user' timelineType is supported for producer
 |==============================
 
 ### Message headers
diff --git a/components/camel-undertow/src/main/docs/undertow-component.adoc b/components/camel-undertow/src/main/docs/undertow-component.adoc
index cf6c11a..c6eb16d 100644
--- a/components/camel-undertow/src/main/docs/undertow-component.adoc
+++ b/components/camel-undertow/src/main/docs/undertow-component.adoc
@@ -117,7 +117,7 @@ with the following path and query parameters:
 
 ### Message Headers
 
-Camel uses the same message headers as the link:http.html[HTTP]
+Camel uses the same message headers as the <<http-component,HTTP>>
 component.
  From Camel 2.2, it also uses
 `Exchange.HTTP_CHUNKED,CamelHttpChunked` header to turn on or turn off
@@ -190,5 +190,5 @@ Transport].
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:jetty.html[Jetty]
-* link:http.html[HTTP]
\ No newline at end of file
+* <<jetty-component,Jetty>>
+* <<http-component,HTTP>>
\ No newline at end of file
diff --git a/components/camel-urlrewrite/src/main/docs/urlrewrite.adoc b/components/camel-urlrewrite/src/main/docs/urlrewrite.adoc
index 2ab2f1f..050e629 100644
--- a/components/camel-urlrewrite/src/main/docs/urlrewrite.adoc
+++ b/components/camel-urlrewrite/src/main/docs/urlrewrite.adoc
@@ -5,16 +5,16 @@ UrlRewrite Component
 *Available as of Camel 2.11*
 
 The `camel-urlrewrite` component allows to plugin url rewrite
-functionality to link:http.html[HTTP], link:http4.html[HTTP4],
-link:jetty.html[Jetty], or link:ahc.html[AHC] components. This component
+functionality to <<http-component,HTTP>>, <<http-component,HTTP4>>,
+<<jetty-component,Jetty>>, or <<jetty-component,AHC>> components. This component
 integrates the
 http://code.google.com/p/urlrewritefilter/[UrlRewriteFilter] project
 with Apache Camel. This allows you to use the capabilities from the url
 rewrite project with your Camel routes.
 
 This component *requires* that your Camel routes starts from a servlet
-based endpoint such as link:jetty.html[Jetty] or
-link:servlet.html[SERVLET].
+based endpoint such as <<jetty-component,Jetty>> or
+<<servlet-component,SERVLET>>.
 
 [[UrlRewrite-Options]]
 Options
@@ -53,8 +53,8 @@ Usage
 ^^^^^
 
 The following component producers supports using together with the
-`camel-urlrewrite` component: link:http.html[HTTP],
-link:http4.html[HTTP4] and link:jetty.html[Jetty].
+`camel-urlrewrite` component: <<http-component,HTTP>>,
+<<http4-component,HTTP4>> and <<http4-component,Jetty>>.
 
 [width="100%",cols="10%,90%",options="header",]
 |=======================================================================
@@ -76,7 +76,7 @@ with any of the components.
 
 You setup the url rewrite as a bean of the type
 `org.apache.camel.component.urlrewrite.http.HttpUrlRewrite` (when using
-link:http.html[HTTP] component) as shown below:
+<<http-component,HTTP>> component) as shown below:
 
 And in XML DSL you can do:
 
@@ -152,8 +152,8 @@ Component(s): camel-http4
 
 The former is a simple and generic interface, which is not dependent on
 the Servlet API. The later is servlet based which requires the Camel route to start from
-a servlet based component such as link:jetty.html[Jetty] or
-link:servlet.html[SERVLET]. The servlet based is more feature rich and
+a servlet based component such as <<jetty-component,Jetty>> or
+<<servlet-component,SERVLET>>. The servlet based is more feature rich and
 that's the API we use to integrate with the
 http://code.google.com/p/urlrewritefilter/[UrlRewriteFilter] project in
 this `camel-urlrewrite` component.
@@ -182,8 +182,8 @@ See Also
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:jetty.html[Jetty]
-* link:http4.html[HTTP4]
-* link:http.html[HTTP]
-* link:ahc.html[AHC]
+* <<jetty-component,Jetty>>
+* <<http4-component,HTTP4>>
+* <<http-component,HTTP>>
+* <<ahc-component,AHC>>
 
diff --git a/components/camel-websocket/src/main/docs/websocket-component.adoc b/components/camel-websocket/src/main/docs/websocket-component.adoc
index 3f507ae..e319b22 100644
--- a/components/camel-websocket/src/main/docs/websocket-component.adoc
+++ b/components/camel-websocket/src/main/docs/websocket-component.adoc
@@ -141,7 +141,7 @@ message, we need to send the transformed message to the same endpoint
 
 This example is part of an unit test, which you can find
 https://svn.apache.org/repos/asf/camel/trunk/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketRouteExampleTest.java[here].
-As a client we use the link:ahc.html[AHC] library which offers support
+As a client we use the <<ahc-component,AHC>> library which offers support
 for web socket as well.
 
 Here is another example where webapp resources location have been
@@ -243,8 +243,8 @@ Java DSL based configuration of endpoint
 * link:endpoint.html[Endpoint]
 * link:getting-started.html[Getting Started]
 
-* link:ahc.html[AHC]
-* link:jetty.html[Jetty]
+* <<ahc-component,AHC>>
+* <<jetty-component,Jetty>>
 * link:twitter-websocket-example.html[Twitter Websocket Example]
 demonstrates how to poll a constant feed of twitter searches and publish
 results in real time using web socket to a web page.
\ No newline at end of file
diff --git a/components/camel-xmljson/src/main/docs/xmljson-dataformat.adoc b/components/camel-xmljson/src/main/docs/xmljson-dataformat.adoc
index da81371..bbfd429 100644
--- a/components/camel-xmljson/src/main/docs/xmljson-dataformat.adoc
+++ b/components/camel-xmljson/src/main/docs/xmljson-dataformat.adoc
@@ -252,7 +252,7 @@ That's why the elements are in a different order in the output XML.
 
 ### Dependencies
 
-To use the link:xmljson.html[XmlJson] dataformat in your camel routes
+To use the <<xmljson-dataformat,XmlJson>> dataformat in your camel routes
 you need to add the following dependency to your pom:
 
 [source,xml]
diff --git a/docs/user-manual/en/async.adoc b/docs/user-manual/en/async.adoc
index 8c9e164..961ae70 100644
--- a/docs/user-manual/en/async.adoc
+++ b/docs/user-manual/en/async.adoc
@@ -50,7 +50,7 @@ event message.
 
 The link:request-reply.html[Request Reply] is when the caller sends a
 message and then *waits for a reply*. This is like the
-link:http.html[HTTP] protocol that we use every day when we surf the
+<<http-component,HTTP>> protocol that we use every day when we surf the
 web. We send a request to fetch a web page and wait until the reply message
 comes with the web content.
 
@@ -76,9 +76,9 @@ diagram below:
 image:async.data/camel_sync_request_reply.png[image]
 
 \1. The client sends a sync link:request-reply.html[Request Reply]
-message over link:http.html[HTTP] to Camel. The client application will
+message over <<http-component,HTTP>> to Camel. The client application will
 wait for the response that Camel routes and processes. +
- 2. The message invokes an external link:mina.html[TCP] service using
+ 2. The message invokes an external <<mina-component,TCP>> service using
 synchronous link:request-reply.html[Request Reply]. The client
 application still waits for the response. +
  3. The response is send back to the client.
@@ -100,7 +100,7 @@ image:async.data/camel_async_request_reply.png[image]
 link:request-reply.html[Request Reply] message over link:http.html[HTTP]
 to Camel. The control is immediately returned to the client application,
 that can continue and do other work while Camel routes the message. +
- 2. Camel invokes an external link:mina.html[TCP] service using
+ 2. Camel invokes an external <<mina-component,TCP>> service using
 synchronous link:request-reply.html[Request Reply]. The client
 application can do other work simultaneously. +
  3. The client wants to get the reply so it uses the Future handle it
@@ -119,9 +119,9 @@ completely. This is illustrated in the diagram below:
 image:async.data/camel_sync_request_only.png[image]
 
 \1. The client sends a link:event-message.html[Request only] and we can
-still use link:http.html[HTTP] despite http being
+still use <<http-component,HTTP>> despite http being
 link:request-reply.html[Request Reply] by nature. +
- 2. Camel invokes an external link:mina.html[TCP] service using
+ 2. Camel invokes an external <<mina-component,TCP>> service using
 synchronous link:request-reply.html[Request Reply]. The client
 application is still waiting. +
  3. The message is processed completely and the control is returned to
@@ -148,11 +148,11 @@ processed in Camel. This is illustrated in the diagram below:
 image:async.data/camel_async_request_only.png[image]
 
 \1. The client sends a link:event-message.html[Request only] and we can
-still use link:http.html[HTTP] despite http being
+still use <<http-component,HTTP>> despite http being
 link:request-reply.html[Request Reply] by nature. The control is
 immediately returned to the client application, that can continue and do
 other work while Camel routes the message. +
- 2. Camel invokes an external link:mina.html[TCP] service using
+ 2. Camel invokes an external <<mina-component,TCP>> service using
 synchronous link:request-reply.html[Request Reply]. The client
 application can do other work simultaneously. +
  3. The message completes but no result is returned to the client.
@@ -264,19 +264,19 @@ exception.
 Example: Asynchronous Request Reply
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Suppose we want to call a link:http.html[HTTP] service but it is usually
+Suppose we want to call a <<http-component,HTTP>> service but it is usually
 slow and thus we do not want to block and wait for the response, as we
 can do other important computation. So we can initiate an
 link:async.html[Async] exchange to the link:http.html[HTTP] endpoint and
-then do other stuff while the slow link:http.html[HTTP] service is
+then do other stuff while the slow <<http-component,HTTP>> service is
 processing our request. And then a bit later we can use the `Future`
-handle to get the response from the link:http.html[HTTP] service. Yeah
+handle to get the response from the <<http-component,HTTP>> service. Yeah
 nice so lets do it:
 
-First we define some routes in Camel. One for the link:http.html[HTTP]
+First we define some routes in Camel. One for the <<http-component,HTTP>>
 service where we simulate a slow server as it takes at least 1 second to
 reply. And then other route that we want to invoke while the
-link:http.html[HTTP] service is on route. This allows you to be able to
+<<http-component,HTTP>> service is on route. This allows you to be able to
 process the two routes simultaneously:
 
 And then we have the client API where we call the two routes and we can
@@ -300,13 +300,13 @@ messages that differs:
 Using the link:async.html[Async] API with callbacks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Suppose we want to call a link:http.html[HTTP] service but it is usually
+Suppose we want to call a <<http-component,HTTP>> service but it is usually
 slow and thus we do not want to block and wait for the response, but
 instead let a callback gather the response. This allows us to send
 multiple requests without waiting for the replies before we can send the
 next request.
 
-First we define a route in Camel for the link:http.html[HTTP] service
+First we define a route in Camel for the <<http-component,HTTP>> service
 where we simulate a slow server as it takes at least 1 second to reply.
 
 Then we define our callback where we gather the responses. As this is
@@ -318,7 +318,7 @@ link:exchange.html[Exchange] was processed successfully or failed. The
 `org.apache.camel.spi.Synchronization` API provides fine grained methods
 for `onCompletion` and `onFailure` for the two situations.
 
-And then we have the client API where we call the link:http.html[HTTP]
+And then we have the client API where we call the <<http-component,HTTP>>
 service using `asyncCallback` 3 times with different input. As the
 invocation is link:async.html[Async] the client will send 3 requests
 right after each other, so we have 3 concurrent exchanges in progress.
@@ -513,8 +513,8 @@ See Also
 *
 http://davsclaus.blogspot.com/2009/05/on-road-to-camel-20-concurrency-with.html[Blog
 entry on using async for concurrent file processing]
-* link:seda.html[SEDA]
-* link:direct.html[Direct]
+* <<seda-component,SEDA>>
+* <<direct-component,Direct>>
 * link:toasync.html[ToAsync] for non blocking
 link:request-reply.html[Request Reply]
 
diff --git a/docs/user-manual/en/asynchronous-routing-engine.adoc b/docs/user-manual/en/asynchronous-routing-engine.adoc
index 1b022d9..c085484 100644
--- a/docs/user-manual/en/asynchronous-routing-engine.adoc
+++ b/docs/user-manual/en/asynchronous-routing-engine.adoc
@@ -9,37 +9,37 @@ All the link:enterprise-integration-patterns.html[Enterprise
 Integration Patterns] are supported as well a selected number of
 link:components.html[Components]:
 
-* link:ahc.html[AHC] *Camel 2.8:* (only producer)
+* <<ahc-component,AHC>> *Camel 2.8:* (only producer)
 * link:aws.html[AWS] *Camel 2.11:* (only consumer) for S3 and SNS.
-* link:avro.html[Avro] *Camel 2.10:* (only producer)
-* link:cxf.html[CXF] *Camel 2.5:* (both consumer and producer)
-* link:cxfrs.html[CXFRS] *Camel 2.5:* (only consumer)
-* link:direct-vm.html[Direct-VM] *Camel 2.10.5/2.11.0:* (both consumer
+* <<avro-component,Avro>> *Camel 2.10:* (only producer)
+* <<cxf-component,CXF>> *Camel 2.5:* (both consumer and producer)
+* <<cxfrs-component,CXFRS>> *Camel 2.5:* (only consumer)
+* <<direct-vm-component,Direct-VM>> *Camel 2.10.5/2.11.0:* (both consumer
 and producer)
-* link:file.html[File] - (only consumer)
-* link:ftp.html[FTP] - (only consumer)
-* link:guava-eventbus.html[Guava EventBus] *Camel 2.10:* (only consumer)
+* <<file-component,File>> - (only consumer)
+* <<ftp-component,FTP>> - (only consumer)
+* <<guava-eventbus-component,Guava EventBus>> *Camel 2.10:* (only consumer)
 * link:jbi.html[JBI] (both consumer and producer)
-* link:jetty.html[Jetty] (both consumer and producer)
-* link:jgroups.html[JGroups] *Camel 2.10:* (only consumer)
-* link:jms.html[JMS] *Camel 2.5:* (only producer for
+* <<jetty-component,Jetty>> (both consumer and producer)
+* <<jgroups-component,JGroups>> *Camel 2.10:* (only consumer)
+* <<jms-component,JMS>> *Camel 2.5:* (only producer for
 link:request-reply.html[Request Reply] messaging over JMS). *Camel 2.9:*
 (consumer, if option `asyncConsumer=true` is used).
-* link:jms.html[JMS] *Camel 2.9:* (also consumer)
-* link:mqtt.html[MQTT] *Camel 2.10.2:* (only producer)
+* <<jms-component,JMS>> *Camel 2.9:* (also consumer)
+* <<mqtt-component,MQTT>> *Camel 2.10.2:* (only producer)
 * link:nmr.html[NMR] (both consumer and producer)
-* link:netty.html[Netty] only producer (*Camel 2.10:* also consumer)
-* link:restlet.html[Restlet] *Camel 2.8:* (only producer)
-* link:seda.html[SEDA] (both consumer and producer) SEDA was mistakenly
+* <<netty-component,Netty>> only producer (*Camel 2.10:* also consumer)
+* <<restlet-component,Restlet>> *Camel 2.8:* (only producer)
+* <<seda-component,SEDA>> (both consumer and producer) SEDA was mistakenly
 in this list until November 3rd 2012. As of Camel 2.10.x, it still does
 not leverage the Async Routing Engine, but support is planned for
 http://camel.apache.org/camel-30-roadmap.html#Camel3.0-Roadmap-SEDA%2FVMcomponentstoleverageasyncroutingengine[Camel
 3.0].
 
-* link:timer.html[Timer] *Camel 2.12:* (only consumer)
+* <<timer-component,Timer>> *Camel 2.12:* (only consumer)
 
 When we say a component is supported, that means, the component is
-leveraging the asynchronous model. For example link:jetty.html[Jetty]
+leveraging the asynchronous model. For example <<jetty-component,Jetty>>
 uses continuations and the async http client to be fully asynchronous
 and non blocked. That means no threads will ever be blocked while
 waiting for a reply.
@@ -53,10 +53,10 @@ Forcing to use synchronous processing
 
 You can configure the endpoints with the option `synchronous=true` to
 force using synchronous processing. For example when sending a web
-service request using link:cxf.html[CXF], the caller will wait for the
+service request using <<cxf-component,CXF>>, the caller will wait for the
 reply if `synchronous=true` was configured. Currently this option is
 supported by the all the producers. If you don't want to let the
-link:cxf.html[CXF] consumer leverage the CXF continuation API to use the
+<<cxf-component,CXF>> consumer leverage the CXF continuation API to use the
 asynchronous processing, you can also use this option `synchronous=true`
 to disable it. The link:jbi.html[JBI] and link:nmr.html[NMR] component
 are always asynchronous and doesn't support this option.
diff --git a/docs/user-manual/en/backlogdebugger.adoc b/docs/user-manual/en/backlogdebugger.adoc
index 46138a3..6e3541d 100644
--- a/docs/user-manual/en/backlogdebugger.adoc
+++ b/docs/user-manual/en/backlogdebugger.adoc
@@ -103,5 +103,5 @@ See Also
 
 * link:backlogtracer.html[BacklogTracer]
 * link:debugger.html[Debugger]
-* link:log.html[Log]
+* <<log-component,Log>>
 
diff --git a/docs/user-manual/en/bam-example.adoc b/docs/user-manual/en/bam-example.adoc
index 3517c5a..49c0771 100644
--- a/docs/user-manual/en/bam-example.adoc
+++ b/docs/user-manual/en/bam-example.adoc
@@ -79,17 +79,17 @@ the Camel link:components.html[Components]
 correlate together the purchase order and invoice messages which can be
 any link:expression.html[Expression] via any of the
 link:languages-supported.html[Languages Supported]. In this case we are
-using link:xpath.html[XPath].
+using <<xpath-language,XPath>>.
 
 Then the final line of code defines the temporal rules to use; namely
 that it is considered to be an error if an invoice is not received
 within 2 seconds of a purchase order being received. When a failure
-occurs in this example we just send it to the link:log.html[Log]
+occurs in this example we just send it to the <<log-component,Log>>
 component to log out an error level message to commons-logging / log4j.
 You could change this to use some of the other
 link:components.html[Components] such as link:activemq.html[ActiveMQ],
-link:jms.html[JMS], link:irc.html[IRC], link:mail.html[Mail],
-link:xmpp.html[XMPP] etc.
+<<jms-component,JMS>>, <<jms-component,IRC>>, <<jms-component,Mail>>,
+<<xmpp-component,XMPP>> etc.
 
 [[BAMExample-Runningtheexample]]
 Running the example
diff --git a/docs/user-manual/en/batch-consumer.adoc b/docs/user-manual/en/batch-consumer.adoc
index d3a1a2a..d799d54 100644
--- a/docs/user-manual/en/batch-consumer.adoc
+++ b/docs/user-manual/en/batch-consumer.adoc
@@ -13,19 +13,19 @@ that a consumer can implement to indicate it support batching as well.
 The following components supports link:batch-consumer.html[Batch
 Consumer] by its consumer:
 
-* link:atom.html[Atom]
+* <<atom-component,Atom>>
 * link:file2.html[File]
 * link:ftp2.html[FTP]
-* link:hbase.html[hbase]
-* link:ibatis.html[iBatis]
-* link:jpa.html[JPA]
-* link:jclouds.html[JCLOUDS]
-* link:mail.html[Mail]
-* link:mybatis.html[MyBatis]
-* link:snmp.html[SNMP]
-* link:sql-component.html[SQL]
-* link:aws-sqs.html[SQS]
-* link:aws-s3.html[S3]
+* <<hbase-component,hbase>>
+* <<ibatis-component,iBatis>>
+* <<jpa-component,JPA>>
+* <<jclouds-component,JCLOUDS>>
+* <<mail-component,Mail>>
+* <<mybatis-component,MyBatis>>
+* <<snmp-component,SNMP>>
+* <<sql-component,SQL>>
+* <<aws-sqs-component,SQS>>
+* <<aws-s3-component,S3>>
 
 [[BatchConsumer-ConsumerOptions]]
 Consumer Options
diff --git a/docs/user-manual/en/bean-integration.adoc b/docs/user-manual/en/bean-integration.adoc
index 0937240..ef382bc 100644
--- a/docs/user-manual/en/bean-integration.adoc
+++ b/docs/user-manual/en/bean-integration.adoc
@@ -67,8 +67,8 @@ to use the annotations for routing and messaging.
 Bean Component
 ^^^^^^^^^^^^^^
 
-The link:bean.html[Bean] component allows one to invoke a particular
-method. Alternately the link:bean.html[Bean] component supports the
+The <<bean-component,Bean>> component allows one to invoke a particular
+method. Alternately the <<bean-component,Bean>> component supports the
 creation of a proxy via
 http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/ProxyHelper.html[ProxyHelper]
 to a Java interface; which the implementation just sends a message
@@ -94,7 +94,7 @@ headers and so forth.
 *Bean binding*
 
 Whenever Camel invokes a bean method via one of the above methods
-(link:bean.html[Bean] component, link:spring-remoting.html[Spring
+(<<bean-component,Bean>> component, link:spring-remoting.html[Spring
 Remoting] or link:pojo-consuming.html[POJO Consuming]) then the
 *link:bean-binding.html[Bean Binding]* mechanism is used to figure out
 what method to use (if it is not explicit) and how to bind the
diff --git a/docs/user-manual/en/browsable-endpoint.adoc b/docs/user-manual/en/browsable-endpoint.adoc
index ab0d138..78a7d59 100644
--- a/docs/user-manual/en/browsable-endpoint.adoc
+++ b/docs/user-manual/en/browsable-endpoint.adoc
@@ -9,9 +9,9 @@ which are pending or have been sent on it.
 
 Some example implementations include
 
-* link:jms.html[JMS] for queues only (as of 1.3.0)
+* <<jms-component,JMS>> for queues only (as of 1.3.0)
 * link:list.html[List]
-* link:mock.html[Mock]
-* link:seda.html[Seda]
-* link:vm.html[VM]
+* <<mock-component,Mock>>
+* <<seda-component,Seda>>
+* <<vm-component,VM>>
 
diff --git a/docs/user-manual/en/camel-configuration-utilities.adoc b/docs/user-manual/en/camel-configuration-utilities.adoc
index 41979d1..6f2a33f 100644
--- a/docs/user-manual/en/camel-configuration-utilities.adoc
+++ b/docs/user-manual/en/camel-configuration-utilities.adoc
@@ -15,21 +15,21 @@ Supported Components
 The following Camel components directly support the use of this
 configuration utility:
 
-* link:http4.html[HTTP4]
-* link:jetty.html[Jetty]
-* link:ahc.html[AHC]
-* link:netty.html[Netty]
-* link:cometd.html[Cometd]
+* <<http4-component,HTTP4>>
+* <<jetty-component,Jetty>>
+* <<ahc-component,AHC>>
+* <<netty-component,Netty>>
+* <<cometd-component,Cometd>>
 * link:ftp2.html[FTP2]
-* link:irc.html[IRC]
-* link:mail.html[Mail]
+* <<irc-component,IRC>>
+* <<mail-component,Mail>>
 * MINA 2
 
 The following Camel components indirectly support the use of this
 configuration utility:
 
-* link:cxf.html[CXF]
-* link:http.html[HTTP]
+* <<cxf-component,CXF>>
+* <<http-component,HTTP>>
 
 [[CamelConfigurationUtilities-Configuration]]
 Configuration
diff --git a/docs/user-manual/en/enterprise-integration-patterns.adoc b/docs/user-manual/en/enterprise-integration-patterns.adoc
index fd29da1..0c1eb9b 100644
--- a/docs/user-manual/en/enterprise-integration-patterns.adoc
+++ b/docs/user-manual/en/enterprise-integration-patterns.adoc
@@ -188,7 +188,7 @@ number of endpoints?
 of endpoints at the same time?
 
 |image:http://cwiki.apache.org/confluence/download/attachments/49204/clear.png[image]
-|link:loop.html[Loop] |How can I repeat processing a message in a loop?
+|<<loop-eip,Loop>> |How can I repeat processing a message in a loop?
 |=======================================================================
 
 [[EnterpriseIntegrationPatterns-MessageTransformation]]
@@ -216,12 +216,12 @@ content?
 semantically equivalent, but arrive in a different format?
 
 |image:http://cwiki.apache.org/confluence/download/attachments/49204/clear.png[image]
-|link:sort.html[Sort] |How can I sort the body of a message?
+|<<sort-eip,Sort>> |How can I sort the body of a message?
 
 |  |Script |How do I execute a script which may not change the message?
 
 |image:http://cwiki.apache.org/confluence/download/attachments/49204/clear.png[image]
-|link:validate.html[Validate] |How can I validate a message?
+|<<validate-eip,Validate>> |How can I validate a message?
 |=======================================================================
 
 [[EnterpriseIntegrationPatterns-MessagingEndpoints]]
@@ -284,7 +284,7 @@ System Management
 [width="100%",cols="10%,10%,80%",]
 |=======================================================================
 |image:http://www.eaipatterns.com/img/ControlBusIcon.gif[image]
-|link:controlbus.html[ControlBus] |How can we effectively administer a
+|<<controlbus-component,ControlBus>> |How can we effectively administer a
 messaging system that is distributed across multiple platforms and a
 wide geographic area?
 
diff --git a/docs/user-manual/en/exchange-pattern.adoc b/docs/user-manual/en/exchange-pattern.adoc
index 2df7529..daa3557 100644
--- a/docs/user-manual/en/exchange-pattern.adoc
+++ b/docs/user-manual/en/exchange-pattern.adoc
@@ -18,7 +18,7 @@ the Message link:exchange.html[Exchange] indicating if a message
 exchange is a one way link:event-message.html[Event Message] (InOnly) or
 a link:request-reply.html[Request Reply] message exchange (InOut).
 
-For example to override the default pattern on a link:jms.html[JMS]
+For example to override the default pattern on a <<jms-component,JMS>>
 endpoint you could use this URI
 
 [source,java]
diff --git a/docs/user-manual/en/expression.adoc b/docs/user-manual/en/expression.adoc
index 9b7f5ac..a383844 100644
--- a/docs/user-manual/en/expression.adoc
+++ b/docs/user-manual/en/expression.adoc
@@ -73,31 +73,31 @@ Expression Languages
 
 The following languages are supported out of the box
 
-* link:bean-language.html[Bean Language] for using Java for expressions
-* link:constant.html[Constant]
-* the unified link:el.html[EL] from JSP and JSF
-* link:header.html[Header]
-* link:jsonpath.html[JSonPath]
-* link:jxpath.html[JXPath]
-* link:mvel.html[Mvel]
-* link:ognl.html[OGNL]
-* link:ref-language.html[Ref Language]
+* <<bean-language,Bean Language>> for using Java for expressions
+* <<constant-language,Constant>>
+* the unified <<el-language,EL>> from JSP and JSF
+* <<header-language,Header>>
+* <<jsonpath-language,JSonPath>>
+* <<jxpath-language,JXPath>>
+* <<mvel-component,Mvel>>
+* <<ognl-language,OGNL>>
+* <<ref-language,Ref Language>>
 * link:exchangeproperty.html[ExchangeProperty]
 / link:property.html[Property]
 * link:scripting-languages.html[Scripting Languages] such as
 ** link:beanshell.html[BeanShell]
 ** link:javascript.html[JavaScript]
-** link:groovy.html[Groovy]
-** link:python.html[Python]
-** link:php.html[PHP]
-** link:ruby.html[Ruby]
-* link:simple.html[Simple]
-** link:file-language.html[File Language]
-* link:spel.html[Spring Expression Language]
-* link:sql.html[SQL]
+** <<groovy-language,Groovy>>
+** <<python-language,Python>>
+** <<php-language,PHP>>
+** <<ruby-language,Ruby>>
+* <<simple-language,Simple>>
+** <<file-language,File Language>>
+* <<spel-language,Spring Expression Language>>
+* <<sql-component,SQL>>
 * link:tokenizer.html[Tokenizer]
-* link:xpath.html[XPath]
-* link:xquery.html[XQuery]
+* <<xpath-language,XPath>>
+* <<xquery-component,XQuery>>
 * link:vtd-xml.html[VTD-XML]
 
 Most of these languages is also supported used as
@@ -118,14 +118,14 @@ wish to use.
 
 |link:scripting-languages.html[Scripting Languages] such as
 link:beanshell.html[BeanShell], link:javascript.html[JavaScript],
-link:groovy.html[Groovy], link:php.html[PHP], link:python.html[Python]
-and link:ruby.html[Ruby] |http://camel.apache.org/maven/current/camel-script/apidocs/org/apache/camel/builder/script/ScriptBuilder.html[org.apache.camel.builder.script.ScriptBuilder]
+<<groovy-language,Groovy>>, <<groovy-language,PHP>>, <<groovy-language,Python>>
+and <<ruby-language,Ruby>> |http://camel.apache.org/maven/current/camel-script/apidocs/org/apache/camel/builder/script/ScriptBuilder.html[org.apache.camel.builder.script.ScriptBuilder]
 
-|link:sql.html[SQL] |http://camel.apache.org/maven/current/camel-josql/apidocs/org/apache/camel/builder/sql/SqlBuilder.html[org.apache.camel.builder.josql.SqlBuilder]
+|<<sql-component,SQL>> |http://camel.apache.org/maven/current/camel-josql/apidocs/org/apache/camel/builder/sql/SqlBuilder.html[org.apache.camel.builder.josql.SqlBuilder]
 
-|link:xpath.html[XPath] |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/builder/xml/XPathBuilder.html[org.apache.camel.builder.xml.XPathBuilder]
+|<<xpath-language,XPath>> |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/builder/xml/XPathBuilder.html[org.apache.camel.builder.xml.XPathBuilder]
 
-|link:xquery.html[XQuery] |http://camel.apache.org/maven/current/camel-saxon/apidocs/org/apache/camel/builder/saxon/XQueryBuilder.html[org.apache.camel.builder.saxon.XQueryBuilder]
+|<<xquery-component,XQuery>> |http://camel.apache.org/maven/current/camel-saxon/apidocs/org/apache/camel/builder/saxon/XQueryBuilder.html[org.apache.camel.builder.saxon.XQueryBuilder]
 |=======================================================================
 
 [[Expression-SeeAlso]]
diff --git a/docs/user-manual/en/how-do-i-configure-endpoints.adoc b/docs/user-manual/en/how-do-i-configure-endpoints.adoc
index 48fec4b..bc57475 100644
--- a/docs/user-manual/en/how-do-i-configure-endpoints.adoc
+++ b/docs/user-manual/en/how-do-i-configure-endpoints.adoc
@@ -122,7 +122,7 @@ Using Endpoint URIs
 ^^^^^^^^^^^^^^^^^^^
 
 Another approach is to use the URI syntax. The URI syntax supports the
-query notation. So for example with the link:mail.html[Mail] component
+query notation. So for example with the <<mail-component,Mail>> component
 you can configure the password property via the URI
 
 [source]
diff --git a/docs/user-manual/en/injector.adoc b/docs/user-manual/en/injector.adoc
index a19a0d7..28b8432 100644
--- a/docs/user-manual/en/injector.adoc
+++ b/docs/user-manual/en/injector.adoc
@@ -18,7 +18,7 @@ link:endpoint.html[Endpoint] in your Spring XML file; or let Camel find
 the defaults then use the Injector to create and inject any of its
 dependencies.
 
-As an example; consider the link:jms.html[JMS] component. Rather than
+As an example; consider the <<jms-component,JMS>> component. Rather than
 explicitly configuring the JMS component in Spring XML you can just
 provide a ConnectionFactory in your Spring XML which the Injector will
 use to properly configure the JmsComponent when it is instantiated.
diff --git a/docs/user-manual/en/intercept.adoc b/docs/user-manual/en/intercept.adoc
index e980acf..832b2da 100644
--- a/docs/user-manual/en/intercept.adoc
+++ b/docs/user-manual/en/intercept.adoc
@@ -117,7 +117,7 @@ particular route.
 
 So lets start with the logging example. We want to log all the
 *incoming* requests so we use `interceptFrom` to route to the
-link:log.html[Log] component. As `proceed` is default then the
+<<log-component,Log>> component. As `proceed` is default then the
 link:exchange.html[Exchange] will continue its route, and thus it will
 continue to `mock:first`.
 
@@ -193,7 +193,7 @@ Intercept endpoint is of course also available using Spring DSL.
 
 We start with the first example from above in Spring DSL:
 
-And the 2nd. Notice how we can leverage the link:simple.html[Simple]
+And the 2nd. Notice how we can leverage the <<simple-language,Simple>>
 language for the link:predicate.html[Predicate]:
 
 And the 3rd with the `skip`, notice skip is set with the
diff --git a/docs/user-manual/en/json.adoc b/docs/user-manual/en/json.adoc
index 9f3fcb7..09aecec 100644
--- a/docs/user-manual/en/json.adoc
+++ b/docs/user-manual/en/json.adoc
@@ -22,7 +22,7 @@ XStream library.
 *Direct, bi-directional JSON <=> XML conversions*
 
 As of Camel 2.10, Camel supports direct, bi-directional JSON <=> XML
-conversions via the link:xmljson.html[camel-xmljson] data format, which
+conversions via the <<xmljson-dataformat,camel-xmljson>> data format, which
 is documented separately.
 
 [[JSON-UsingJSONdataformatwiththeXStreamlibrary]]
diff --git a/docs/user-manual/en/scala-dsl-eip.adoc b/docs/user-manual/en/scala-dsl-eip.adoc
index 2f28636..136c983 100644
--- a/docs/user-manual/en/scala-dsl-eip.adoc
+++ b/docs/user-manual/en/scala-dsl-eip.adoc
@@ -403,7 +403,7 @@ val myProcessor = (exchange: Exchange) => {
 ----------------------------------------------------------------------------------------------------------------
 
 Off course, you can also use any other Camel component (e.g.
-link:velocity.html[Velocity]) to enrich the content and add it to a
+<<velocity-component,Velocity>>) to enrich the content and add it to a
 pipeline
 
 
diff --git a/docs/user-manual/en/scala-dsl-supported-languages.adoc b/docs/user-manual/en/scala-dsl-supported-languages.adoc
index 76d402a..68cc3f5 100644
--- a/docs/user-manual/en/scala-dsl-supported-languages.adoc
+++ b/docs/user-manual/en/scala-dsl-supported-languages.adoc
@@ -11,7 +11,7 @@ You can use any of the supported Camel link:languages.html[Languages] in
 the link:scala-dsl.html[Scala DSL]; see below for a couple of examples:
 
 [[ScalaDSL-Supportedlanguages-Using]]
-Using link:xpath.html[XPath]
+Using <<xpath-language,XPath>>
 ----------------------------
 
 With the XPath trait, you have an additional method available on an
@@ -31,7 +31,7 @@ Splitter example, where the `xpath` method is used in a
 ----------------------------------------------------------
 
 [[ScalaDSL-Supportedlanguages-Using.1]]
-Using link:jxpath.html[JXPath]
+Using <<jxpath-language,JXPath>>
 ------------------------------
 
 With the `org.apache.camel.scala.dsl.languages.JXPath` trait, you can an
diff --git a/docs/user-manual/en/scripting-languages.adoc b/docs/user-manual/en/scripting-languages.adoc
index 37c6371..1fc6683 100644
--- a/docs/user-manual/en/scripting-languages.adoc
+++ b/docs/user-manual/en/scripting-languages.adoc
@@ -65,7 +65,7 @@ following attributes all set at `ENGINE_SCOPE`:
 IN message instead.
 
 |properties |`org.apache.camel.builder.script.PropertiesFunction` |*Camel 2.9:* Function with a `resolve` method to make it easier to use
-Camels link:properties.html[Properties] component from scripts. See
+Camels <<properties-component,Properties>> component from scripts. See
 further below for example.
 |=======================================================================
 
@@ -88,7 +88,7 @@ Using properties function
 
 *Available as of Camel 2.9*
 
-If you need to use the link:properties.html[Properties] component from a
+If you need to use the <<properties-component,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".
diff --git a/docs/user-manual/en/spring-testing.adoc b/docs/user-manual/en/spring-testing.adoc
index 2c2f4a8..655b6fc 100644
--- a/docs/user-manual/en/spring-testing.adoc
+++ b/docs/user-manual/en/spring-testing.adoc
@@ -7,8 +7,8 @@ integration work. The Spring Framework offers a number of features that
 makes it easy to test while using Spring for Inversion of Control which
 works with JUnit 3.x, JUnit 4.x, and http://testng.org[TestNG].
 
-We can use Spring for IoC and the Camel link:mock.html[Mock] and
-link:test.html[Test] endpoints to create sophisticated integration/unit
+We can use Spring for IoC and the Camel <<mock-component,Mock>> and
+<<test-component,Test>> endpoints to create sophisticated integration/unit
 tests that are easy to run and debug inside your IDE.  There are three
 supported approaches for testing with Spring in Camel.
 
@@ -336,7 +336,7 @@ Adding more Mock expectations
 
 If you wish to programmatically add any new assertions to your test you
 can easily do so with the following. Notice how we use @EndpointInject
-to inject a Camel endpoint into our code then the link:mock.html[Mock]
+to inject a Camel endpoint into our code then the <<mock-component,Mock>>
 API to add an expectation on a specific message.
 
 [source,java]
@@ -363,7 +363,7 @@ public class MyCamelTest extends AbstractJUnit38SpringContextTests {
 Further processing the received messages
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-Sometimes once a link:mock.html[Mock] endpoint has received some
+Sometimes once a <<mock-component,Mock>> endpoint has received some
 messages you want to then process them further to add further assertions
 that your test case worked as you expect.
 
@@ -403,7 +403,7 @@ It might be that the
 link:enterprise-integration-patterns.html[Enterprise Integration
 Patterns] you have defined in either link:spring.html[Spring] XML or
 using the Java link:dsl.html[DSL] do all of the sending and receiving
-and you might just work with the link:mock.html[Mock] endpoints as
+and you might just work with the <<mock-component,Mock>> endpoints as
 described above. However sometimes in a test case its useful to
 explicitly send or receive messages directly.
 
@@ -444,6 +444,6 @@ example test case using Mock and Spring] along with its
 https://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml[Spring
 XML]
 * link:bean-integration.html[Bean Integration]
-* link:mock.html[Mock] endpoint
-* link:test.html[Test] endpoint
+* <<mock-component,Mock>> endpoint
+* <<test-component,Test>> endpoint
 
diff --git a/docs/user-manual/en/testing.adoc b/docs/user-manual/en/testing.adoc
index 70ba8ae..ec49047 100644
--- a/docs/user-manual/en/testing.adoc
+++ b/docs/user-manual/en/testing.adoc
@@ -238,20 +238,20 @@ Camel provides a number of endpoints which can make testing easier.
 [width="100%",cols="1,3",options="header",]
 |=======================================================================
 |Name |Description
-|link:dataset.html[DataSet] |For load & soak testing this endpoint
+|<<dataset-component,DataSet>> |For load & soak testing this endpoint
 provides a way to create huge numbers of messages for sending to
 link:components.html[Components] and asserting that they are consumed
 correctly
 
-|link:mock.html[Mock] |For testing routes and mediation rules using
+|<<mock-component,Mock>> |For testing routes and mediation rules using
 mocks and allowing assertions to be added to an endpoint
 
-|link:test.html[Test] |Creates a link:mock.html[Mock] endpoint which
+|<<test-component,Test>> |Creates a <<test-component,Mock>> endpoint which
 expects to receive all the message bodies that could be polled from the
 given underlying endpoint
 |=======================================================================
 
-The main endpoint is the link:mock.html[Mock] endpoint which allows
+The main endpoint is the <<mock-component,Mock>> endpoint which allows
 expectations to be added to different endpoints; you can then run your
 tests and assert that your expectations are met at the end.
 
@@ -267,16 +267,16 @@ endpoints can be useful:
 [width="100%",cols="1,3",options="header",]
 |=======================================================================
 |Name |Description
-|link:direct.html[Direct] |Direct invocation of the consumer from the
+|<<direct-component,Direct>> |Direct invocation of the consumer from the
 producer so that single threaded (non-SEDA) in VM invocation is
 performed which can be useful to mock out physical transports
 
-|link:seda.html[SEDA] |Delivers messages asynchronously to consumers via
+|<<seda-component,SEDA>> |Delivers messages asynchronously to consumers via
 a
 http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[`java.util.concurrent.BlockingQueue`]
 which is good for testing asynchronous transports
 
-|link:stub.html[Stub] |Works like link:seda.html[SEDA] but does not
+|<<stub-component,Stub>> |Works like <<stub-component,SEDA>> but does not
 validate the endpoint URI, which makes stubbing much easier.
 |=======================================================================
 
@@ -285,7 +285,7 @@ Testing existing routes
 ^^^^^^^^^^^^^^^^^^^^^^^
 
 Camel provides some features to aid during testing of existing routes
-where you cannot or will not use link:mock.html[Mock] etc. For example
+where you cannot or will not use <<mock-component,Mock>> etc. For example
 you may have a production ready route which you want to test with some
 3rd party API which sends messages into this route.
 

-- 
To stop receiving notification emails like this one, please contact
acosentino@apache.org.