This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new f4fd35fc3fbf cleanup faq (#21698)
f4fd35fc3fbf is described below
commit f4fd35fc3fbfc59a0b1db2f1f8c5d3d6077f4af1
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Mar 4 20:30:17 2026 +0100
cleanup faq (#21698)
* CAMEL-16861: Cleanup docs
---
.../camel-jetty/src/main/docs/jetty-component.adoc | 33 ++-
.../camel-spring/src/main/docs/spring-summary.adoc | 3 -
.../src/main/docs/undertow-component.adoc | 36 ++-
docs/user-manual-nav.adoc.template | 1 -
docs/user-manual/modules/ROOT/pages/component.adoc | 2 +-
.../modules/ROOT/pages/consumertemplate.adoc | 21 ++
docs/user-manual/modules/ROOT/pages/endpoint.adoc | 278 ++++++++++++++++++-
.../modules/ROOT/pages/error-handler.adoc | 181 ++++++++++++
docs/user-manual/modules/ROOT/pages/index.adoc | 1 -
.../modules/ROOT/pages/producertemplate.adoc | 76 +++++
docs/user-manual/modules/ROOT/pages/routes.adoc | 45 +++
.../modules/ROOT/pages/stream-caching.adoc | 42 +++
docs/user-manual/modules/ROOT/pages/uris.adoc | 2 +-
docs/user-manual/modules/faq/nav.adoc | 19 --
...an-i-create-a-custom-component-or-endpoint.adoc | 5 -
.../faq/pages/how-can-i-get-the-source-code.adoc | 9 +-
.../faq/pages/how-do-i-configure-endpoints.adoc | 305 ---------------------
...-endpoints-without-the-value-being-encoded.adoc | 11 -
...size-for-producercache-or-producertemplate.adoc | 31 ---
...ximum-endpoint-cache-size-for-camelcontext.adoc | 37 ---
.../modules/faq/pages/how-do-i-debug-my-route.adoc | 14 -
.../modules/faq/pages/how-do-i-disable-jmx.adoc | 38 ---
.../faq/pages/how-do-i-enable-debug-logging.adoc | 32 ---
...reams-when-debug-logging-messages-in-camel.adoc | 54 ----
...en-consuming-for-example-from-a-ftp-server.adoc | 25 --
...how-do-i-import-rests-from-other-xml-files.adoc | 85 ------
...ow-do-i-import-routes-from-other-xml-files.adoc | 44 ---
.../pages/how-do-i-let-jetty-match-wildcards.adoc | 30 --
...ow-do-i-make-my-jms-endpoint-transactional.adoc | 25 --
.../modules/faq/pages/how-do-i-name-my-routes.adoc | 32 ---
.../faq/pages/how-do-i-restart-camelcontext.adoc | 11 -
...wn-exception-during-processing-an-exchange.adoc | 53 ----
.../how-do-i-retry-failed-messages-forever.adoc | 18 --
...om-a-certain-point-back-or-an-entire-route.adoc | 91 ------
docs/user-manual/modules/faq/pages/index.adoc | 19 --
.../pages/why-cant-i-use-sign-in-my-password.adoc | 4 -
...-file-consumer-use-the-camel-error-handler.adoc | 2 -
37 files changed, 712 insertions(+), 1003 deletions(-)
diff --git a/components/camel-jetty/src/main/docs/jetty-component.adoc
b/components/camel-jetty/src/main/docs/jetty-component.adoc
index 79dd74ac2742..f9f9f926ea41 100644
--- a/components/camel-jetty/src/main/docs/jetty-component.adoc
+++ b/components/camel-jetty/src/main/docs/jetty-component.adoc
@@ -92,10 +92,39 @@ the numerical IP address of this interface should be used
as the host.
If you need to expose a Jetty endpoint on all network interfaces, the
`0.0.0.0` address should be used.
-To listen across an entire URI prefix, see
-xref:manual:faq:how-do-i-let-jetty-match-wildcards.adoc[How do I let Jetty
match wildcards].
+To listen across an entire URI prefix, see below.
====
+=== How do I let Jetty match wildcards?
+
+By default, Jetty will only match on exact uri's. But you can instruct Jetty
to match prefixes. For example:
+
+[source,java]
+----
+from("jetty://0.0.0.0:8123/foo").to("mock:foo");
+----
+
+In the route above Jetty 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`.
+
+So if you want to enable wildcard matching you need to set
`matchOnUriPrefix=true` as follows:
+
+[source,java]
+----
+from("jetty://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
+----
+
+So now Jetty matches any endpoints with starts with `foo`.
+
+To match *any* endpoint you can remove the prefix so it will match anything
from the root:
+
+[source,java]
+----
+from("jetty://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
+----
+
=== Servlets
If you actually want to expose routes by HTTP and already have a
diff --git
a/components/camel-spring-parent/camel-spring/src/main/docs/spring-summary.adoc
b/components/camel-spring-parent/camel-spring/src/main/docs/spring-summary.adoc
index aa7c86f90664..9b4a9d251b0f 100644
---
a/components/camel-spring-parent/camel-spring/src/main/docs/spring-summary.adoc
+++
b/components/camel-spring-parent/camel-spring/src/main/docs/spring-summary.adoc
@@ -398,9 +398,6 @@ the above example), then you can refer to the component
using
SpringCamelContext lazily fetching components from the spring context
for the scheme name you use for Endpoint URIs.
-For more details, see
xref:manual:faq:how-do-i-configure-endpoints.adoc[Configuring
-Endpoints and Components].
-
== CamelContextAware
If you want the `CamelContext` to be injected
diff --git a/components/camel-undertow/src/main/docs/undertow-component.adoc
b/components/camel-undertow/src/main/docs/undertow-component.adoc
index f627611dd5f9..b76a2127c353 100644
--- a/components/camel-undertow/src/main/docs/undertow-component.adoc
+++ b/components/camel-undertow/src/main/docs/undertow-component.adoc
@@ -85,13 +85,43 @@ the numerical IP address of this interface should be used
as the host.
If you need to expose an Undertow endpoint on all network interfaces, the
`0.0.0.0` address should be used.
-To listen across an entire URI prefix, see
-xref:manual:faq:how-do-i-let-jetty-match-wildcards.adoc[How do I let Jetty
match wildcards?].
-
If you actually want to expose routes by HTTP and already have a
Servlet, you should instead refer to the
xref:servlet-component.adoc[Servlet Transport].
+To listen across an entire URI prefix see next section.
+
+=== How do I let Undertow match wildcards?
+
+By default, Undertow will only match on exact uri's. But you can instruct
Undertow to match prefixes. For example:
+
+[source,java]
+----
+from("undertow:http://0.0.0.0:8123/foo").to("mock:foo");
+----
+
+In the route above Undertow 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`.
+
+So if you want to enable wildcard matching you need to set
`matchOnUriPrefix=true` as follows:
+
+[source,java]
+----
+from("undertow:http://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
+----
+
+So now Undertow matches any endpoints with starts with `foo`.
+
+To match *any* endpoint you can remove the prefix so it will match anything
from the root:
+
+[source,java]
+----
+from("undertow:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
+----
+
+
=== Security provider
To plug in a security provider for endpoint authentication, implement SPI
interface
diff --git a/docs/user-manual-nav.adoc.template
b/docs/user-manual-nav.adoc.template
index 3a39b7449624..1a370739c62a 100644
--- a/docs/user-manual-nav.adoc.template
+++ b/docs/user-manual-nav.adoc.template
@@ -103,7 +103,6 @@
** xref:faq:how-do-i-restart-camelcontext.adoc[How do I restart CamelContext?]
**
xref:faq:how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc[How
do I retrieve the thrown Exception during processing an Exchange?]
** xref:faq:how-do-i-retry-failed-messages-forever.adoc[How do I retry failed
messages forever?]
- **
xref:faq:how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc[How
do I retry processing a message from a certain point back or an entire route?]
**
xref:faq:how-do-i-reuse-the-contexttestsupport-class-in-my-unit-tests.adoc[How
do I reuse the ContextTestSupport class in my unit tests?]
** xref:faq:how-do-i-run-activemq-and-camel-in-jboss.adoc[How do I run
ActiveMQ and Camel in JBoss?]
**
xref:faq:how-do-i-set-the-max-chars-when-debug-logging-messages-in-camel.adoc[How
do I set the max chars when debug logging messages in Camel?]
diff --git a/docs/user-manual/modules/ROOT/pages/component.adoc
b/docs/user-manual/modules/ROOT/pages/component.adoc
index a29642e31df3..81f2f7dc1f54 100644
--- a/docs/user-manual/modules/ROOT/pages/component.adoc
+++ b/docs/user-manual/modules/ROOT/pages/component.adoc
@@ -124,7 +124,7 @@ Camel identifies the components in the above example as
`pop3`, `jms`, `urn`, an
[NOTE]
====
-Make sure to read xref:faq:how-do-i-configure-endpoints.adoc[How do I
configure endpoints?]
+Make sure to read xref:endpoint.adoc[Endpoint]
to learn more about configuring endpoints. For example, how to refer to beans
in the xref:registry.adoc[Registry] or how
to use raw values for password options, and using
xref:using-propertyplaceholder.adoc[property placeholders] etc.
====
diff --git a/docs/user-manual/modules/ROOT/pages/consumertemplate.adoc
b/docs/user-manual/modules/ROOT/pages/consumertemplate.adoc
index 5b04ac70e7b6..57334d6e925a 100644
--- a/docs/user-manual/modules/ROOT/pages/consumertemplate.adoc
+++ b/docs/user-manual/modules/ROOT/pages/consumertemplate.adoc
@@ -45,6 +45,27 @@ body = template.receiveBody("activemq:MyQueue", 5000);
Here we wait at most 5 seconds for a message to be consumed, if there was no
message, then `null` is returned as response.
+== Configuring default cache size
+
+You can configure globally the default cache size for both `ProducerTemplate`
and `ConsumerTemplate`
+which will be created or dependency inject by `CamelContext`.
+
+This can be done on the `CamelContext` as a global option as shown in the
following Java code:
+
+[source,java]
+----
+getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_CACHE_POOL_SIZE,
"50");
+----
+
+Or in `application.properties`:
+
+[source,properties]
+----
+camel.main.consumerTemplateCacheSize = 50
+----
+
+The default maximum cache size is 1000.
+
== See Also
See xref:producertemplate.adoc[ProducerTemplate]
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/endpoint.adoc
b/docs/user-manual/modules/ROOT/pages/endpoint.adoc
index 704a7bb9bc9f..f73805fb9458 100644
--- a/docs/user-manual/modules/ROOT/pages/endpoint.adoc
+++ b/docs/user-manual/modules/ROOT/pages/endpoint.adoc
@@ -47,7 +47,283 @@ YAML::
----
====
-== Endpoint API
+=== Referring beans from endpoints
+
+When configuring endpoints using the URI syntax you can refer to beans
+in the xref:registry.adoc[Registry] using the `#bean:id` notation.
+
+NOTE: The older syntax with just `#id` has been deprecated due to ambiguity
+as Camel supports a number of additional functions that start with the #
notation.
+
+If the URI parameter value starts with `#bean:` then Camel will lookup in
+the xref:registry.adoc[Registry] for a bean of the given type by id. For
instance:
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+from("file:messages/foo?sorter=#bean:mySpecialFileSorter")
+ .to("jms:queue:foo");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="file:messages/foo?sorter=#bean:mySpecialFileSorter"/>
+ <to uri="jms:queue:foo"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:messages/foo?sorter=#bean:mySpecialFileSorter
+ steps:
+ - to:
+ uri: jms:queue:foo
+----
+====
+
+Will lookup a bean with the id `mySpecialFileSorter` in the Registry.
+
+==== Referring beans by class
+
+Camel also supports to refer to beans by their class type, such as
`#class:com.foo.MySpecialSorter`,
+which then will create a new bean instance of the given class name.
+
+If you need to provide parameters to the constructor, then this is also
possible
+(limited to numbers, boolean, literal, and null values)
+
+[source,text]
+----
+file://inbox?sorter=#class:com.foo.MySpecialSorter(10, 'Hello world', true)
+----
+
+TIP: Inlining constructor arguments is only recommended for beans with a few
options so the code is easy to understand and maintain.
+Also beware that if the bean constructor is refactored then the string text
would need to be updated accordingly.
+
+==== Referring beans by type
+
+When configuring endpoints using URI syntax you can now refer to bean by its
type which
+are used to lookup the bean by the given type from the
xref:ROOT:registry.adoc[Registry].
+
+If there is one bean found in the registry of the given type, then that bean
instance will be used;
+otherwise an exception is thrown.
+
+For example below we expect there is a single bean of the
`org.apache.camel.spi.IdempotentRepository` type
+in the xref:registry.adoc[Registry] that the file endpoint should use.
+
+[source,text]
+----
+file://inbox?idempontentRepository=#type:org.apache.camel.spi.IdempotentRepository
+----
+
+=== Configuring parameter values using raw values, such as passwords
+
+When configuring endpoint options using URI syntax, then the values is
+by default URI encoded. This can be a problem if you want to configure
+passwords and just use the value _as is_ without any encoding. For
+example, you may have a plus sign in the password, which would be decimal
+encoded by default.
+
+You can define parameter value to be *raw* using the following syntax
`RAW(value)`, e.g.
+the value starts with `RAW(` and then ends with the parenthesis `)`.
+
+Here is a little example with the password: `se+re?t&23`:
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+from("file:inbox")
+ .to("ftp:[email protected]?password=RAW(se+re?t&23)&binary=true");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="file:inbox"/>
+ <to
uri="ftp:[email protected]?password=RAW(se+re?t&23)&binary=true"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:inbox
+ steps:
+ - to:
+ uri: ftp:[email protected]?password=RAW(se+re?t&23)&binary=true
+----
+
+YAML expanded::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file
+ parameters:
+ directoryName: inbox
+ steps:
+ - to:
+ uri: ftp
+ parameters:
+ host: [email protected]
+ password: "RAW(se+re?t&23)"
+ binary: true
+----
+====
+
+In the above example, we have declared the password value as raw, and the
+actual password would be as typed, eg `se+re?t&23`.
+
+NOTE: you may find a corner case when you use both `)` and `&` character as
part of your password (ie, `se+re)t&23`). The parser will interpret the `)` as
closing the `RAW` function and having a parameter started by `&`. In such case,
you can instead use the `RAW{}` notation to let you include the `)` character
and have it decoded as part of the password (ie, `RAW{se+re)t&23}`). As a safe
alternative you can also use `password=#property:myPass` and then have `myPass`
a xref:ROOT:property [...]
+
+==== Using ENV variables with raw values
+
+If you need to use environment variables, for example as username or passwords
then this is now possible by inlining
+the xref:components:languages:simple-language.adoc[Simple] language
+using `+++$simple{xxx}+++` syntax in `RAW(...)` as shown below:
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+from("file:inbox")
+
.to("ftp:[email protected]?password=RAW($simple{env:MY_FTP_PASSWORD})&binary=true");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="file:inbox"/>
+ <to
uri="ftp:[email protected]?password=RAW($simple{env:MY_FTP_PASSWORD})&binary=true"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:inbox
+ steps:
+ - to:
+ uri:
"ftp:[email protected]?password=RAW($simple{env:MY_FTP_PASSWORD})&binary=true"
+----
+
+====
+
+=== Endpoint URIs with property placeholders
+
+Camel has extensive support for using xref:using-propertyplaceholder.adoc[].
+
+For example in the ftp example above we can externalize the password to the
`application.properties` file.
+
+[source,properties]
+----
+myFtpPassword=RAW(se+re?t&23)
+----
+
+And the Camel routes can then refer to this placeholder using `{\{key}}` style.
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+from("file:inbox")
+ .to("ftp:[email protected]?password={{myFtpPassword}}&binary=true");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="file:inbox"/>
+ <to
uri="ftp:[email protected]?password={{myFtpPassword}}&binary=true"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:inbox
+ steps:
+ - to:
+ uri:
"ftp:[email protected]?password={{myFtpPassword}}&binary=true"
+----
+====
+
+And have a `application.properties` file with password. Notice we still define
+the `RAW(value)` style to ensure the password is used _as is_:
+
+[source,properties]
+----
+myFtpPassword=RAW(se+re?t&23)
+----
+
+We could still have used the `RAW(value)` in the Camel route instead:
+
+[source,java]
+----
+.to("ftp:[email protected]?password=RAW({{myFtpPassword}})&binary=true")
+----
+
+And then we would need to remove the `RAW` from the properties file:
+
+[source,properties]
+----
+myFtpPassword=se+re?t&23
+----
+
+== Configuring CamelContext default cache size
+
+The xref:ROOT:camelcontext.adoc[CamelContext] will by default cache the last
1000
+used endpoints (based on a LRUCache).
+
+This must be done on the `CamelContext` as a global option as shown in the
following Java code:
+
+[source,java]
+----
+getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE,
"500");
+----
+
+The default maximum cache size is 1000.
+
+You need to configure this before xref:ROOT:camelcontext.adoc[CamelContext] is
started.
+
+
+== Java Endpoint API
You will almost never have the need for creating endpoints manually via Java
API.
diff --git a/docs/user-manual/modules/ROOT/pages/error-handler.adoc
b/docs/user-manual/modules/ROOT/pages/error-handler.adoc
index b601e5e9b539..0f46fd93054e 100644
--- a/docs/user-manual/modules/ROOT/pages/error-handler.adoc
+++ b/docs/user-manual/modules/ROOT/pages/error-handler.adoc
@@ -330,3 +330,184 @@ See
xref:components:eips:transactional-client.adoc[Transactional Client] that ha
samples for how to use and transactional behavior and configuration with
this error handler.
+== How do I retry failed messages forever?
+
+If you want to keep the bad message in the original system (such as a message
broker),
+then you are also blocking the following messages that has arrived on the
queue after the bad
+message.
+
+For example with xref:components::activemq-component.adoc[ActiveMQ], Camel
will retry consuming a message up til 6 times before
+its moved to the default dead letter queue on the broker (this is ActiveMQ
broker specific).
+
+If you configure the xref:defaulterrorhandler.adoc[Default Error Handler] or
xref:components:eips:dead-letter-channel.adoc[Dead Letter Channel]
+to use `maximumRedeliveries = -1` then Camel will retry forever.
+
+IMPORTANT: Beware that there is a difference between letting Camel retry
processing a message, such as Camel fails to route a message to an external
system (producer) vs
+consuming messages from a messaging system that offers redelivery such as
xref:components::activemq-component.adoc[ActiveMQ]. The latter allows
+to roll back the entire message and attempt processing the same message again
from Camel.
+
+If an external system such as
xref:components::activemq-component.adoc[ActiveMQ] is redelivering a message,
+then Camel enriches the message with headers that mark this.
+
+The `CamelRedeliveryCounter` contains the number of times it has been
redelivered.
+The `CamelRedelivered` contains a boolean if its redelivered or if it is the
first time the message is processed.
+
+See also xref:components:eips:transactional-client.adoc[Transactional Client].
+
+
+== How do I retry processing a message from a certain point back or an entire
route
+
+By default, Camel will perform any redelivery (retry) attempts
+from the point of failure. So if you want to retry from a point before
+this, you would need to split up your route.
+
+In the example below we have 2 routes (`direct:start`, `direct:sub`). In
+case of a failure anywhere in the `direct:sub` route, then the entire
+route is retried. This happens because we have instructed the `direct:sub`
+route to not use any error handler (e.g. the no error handler). Then we
+link the routes using the xref:components::direct-component.adoc[Direct]
component by calling
+the sub route from the 1st route.
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+// in case of io exception then try to redeliver up till 2 times
+// (do not use any delay due faster unit testing)
+onException(IOException.class)
+ .maximumRedeliveries(2).redeliveryDelay(0);
+
+from("direct:start")
+ .to("mock:a")
+ // call sub route (using direct)
+ .to("direct:sub")
+ .to("mock:c");
+
+from("direct:sub")
+ // disable error handler, so the entire route can be retried in case of
redelivery
+ .errorHandler(noErrorHandler())
+ .to("mock:b")
+ .bean("myProcessor");
+----
+
+Spring XML::
++
+[source,xml]
+----
+<!-- this is the processor that will fail the first 2 attempts -->
+<bean id="myProcessor"
class="org.apache.camel.processor.RedeliverToSubRouteTest.MyProcessor"/>
+
+<camelContext xmlns="http://camel.apache.org/schema/spring">
+
+ <!-- setup no error handler with an id, we refer to from the 2nd route -->
+ <errorHandler id="noErrorHandler" type="NoErrorHandler"/>
+
+ <!-- configure on exception to redelivery at most 2 times when an
IOException was thrown
+ do not use redelivery delay to run unit test faster -->
+ <onException>
+ <exception>java.io.IOException</exception>
+ <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0"/>
+ </onException>
+
+ <!-- 1st route, no need to setup error handler, as it will use the default
error handler -->
+ <route>
+ <from uri="direct:start"/>
+ <to uri="mock:a"/>
+ <to uri="direct:sub"/>
+ <to uri="mock:c"/>
+ </route>
+
+ <!-- disable error handler on this route, so the entire route can be
redelivered
+ when called from the 1st route -->
+ <route errorHandlerRef="noErrorHandler">
+ <from uri="direct:sub"/>
+ <to uri="mock:b"/>
+ <process ref="myProcessor"/>
+ </route>
+</camelContext>
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="direct:start"/>
+ <onException>
+ <exception>java.io.IOException</exception>
+ <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0"/>
+ </onException>
+ <to uri="mock:a"/>
+ <to uri="direct:sub"/>
+ <to uri="mock:c"/>
+</route>
+
+<route>
+ <errorHandler>
+ <noErrorHandler/>
+ </errorHandler>
+ <from uri="direct:sub"/>
+ <to uri="mock:b"/>
+ <process ref="myProcessor"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: direct:start
+ steps:
+ - onException:
+ exception:
+ - java.io.IOException
+ - redeliveryPolicy:
+ maximumRedeliveries: 2
+ redeliveryDelay: 0
+ - to:
+ uri: mock:a
+ - to:
+ uri: direct:sub
+ - to:
+ uri: mock:c
+
+- route:
+ errorHandler:
+ noErrorHandler: {}
+ from:
+ uri: direct:sub
+ steps:
+ - to:
+ uri: mock:b
+ - process:
+ ref: myProcessor
+----
+
+====
+
+The code above is based on a unit test, and as you can see the
+processor below is configured to fail the first 2 attempts.
+So that means the entire `direct:sub` route is redelivered, meaning that
+the `mock:b` endpoint receives the incoming message again.
+
+[source,java]
+----
+public static class MyProcessor implements Processor {
+
+ private int counter;
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ // use a processor to simulate error in the first 2 calls
+ if (counter++ < 2) {
+ throw new IOException("Forced");
+ }
+ exchange.getIn().setBody("Bye World");
+ }
+}
+----
diff --git a/docs/user-manual/modules/ROOT/pages/index.adoc
b/docs/user-manual/modules/ROOT/pages/index.adoc
index ecee94f6b679..2a2403e425dc 100644
--- a/docs/user-manual/modules/ROOT/pages/index.adoc
+++ b/docs/user-manual/modules/ROOT/pages/index.adoc
@@ -46,7 +46,6 @@ For a deeper and better understanding of Apache Camel, an
xref:faq:what-is-camel
* xref:getting-started.adoc[Getting Started]
* xref:book-getting-started.adoc[Longer Getting Started Guide]
* xref:spring.adoc[Working with Camel and Spring]
-* xref:faq:how-do-i-configure-endpoints.adoc[How do I configure endpoints?]
* xref:camelcontext-autoconfigure.adoc[Auto Configuration]
* xref:bean-integration.adoc[Bean Integration]
* xref:configuring-route-startup-ordering-and-autostartup.adoc[Configuring
route startup ordering and autostartup]
diff --git a/docs/user-manual/modules/ROOT/pages/producertemplate.adoc
b/docs/user-manual/modules/ROOT/pages/producertemplate.adoc
index 9a6f59db008d..783a9d684857 100644
--- a/docs/user-manual/modules/ROOT/pages/producertemplate.adoc
+++ b/docs/user-manual/modules/ROOT/pages/producertemplate.adoc
@@ -109,6 +109,82 @@ Object result = FluentProducerTemplate.on(context)
.request();
----
+== How do I retrieve the thrown Exception during processing an Exchange?
+
+You have sent an Exchange to Camel, but it fails during processing caused
+by a thrown Exception. How do I retrieve this Exception?
+
+If you are using CamelTemplate (or CamelProducer), then it is common to
+use the sendBody/requestBody methods that returns the exchange body
+response *only*. So if there was a thrown exception during processing
+Camel is not rethrowing this Exception. To remedy this you can use the
+plain send/request methods that accepts an Exchange object and returns
+an Exchange object.
+
+From the returned Exchange you can test if it has failed and get the caused
+exception. This is illustrated in the code sample:
+
+[source,java]
+----
+@Test
+public void testOk() {
+ int result = (Integer) template.sendBody("direct:input",
ExchangePattern.InOut, "Hello London");
+ assertEquals(1, result);
+}
+
+@Test
+public void testFailure() {
+ // must create an exchange to get the result as an exchange where we can
get the caused exception
+ Exchange exchange =
getMandatoryEndpoint("direct:input").createExchange(ExchangePattern.InOut);
+ exchange.getIn().setBody("Hello Paris");
+
+ Exchange out = template.send("direct:input", exchange);
+ assertTrue("Should be failed", out.isFailed());
+ assertTrue("Should be IllegalArgumentException", out.getException()
instanceof IllegalArgumentException);
+ assertEquals("Forced exception", out.getException().getMessage());
+}
+
+protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ public void configure() throws Exception {
+ from("direct:input").bean(new ExceptionBean());
+ }
+ };
+}
+
+public static class ExceptionBean {
+ public int doSomething(String request) throws Exception {
+ if (request.equals("Hello London")) {
+ return 1;
+ } else {
+ throw new IllegalArgumentException("Forced exception");
+ }
+ }
+}
+----
+
+== Configuring default cache size
+
+You can configure globally the default cache size for both `ProducerTemplate`
and `ConsumerTemplate`
+which will be created or dependency inject by `CamelContext`.
+
+This can be done on the `CamelContext` as a global option as shown in the
following Java code:
+
+[source,java]
+----
+getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_CACHE_POOL_SIZE,
"50");
+----
+
+Or in `application.properties`:
+
+[source,properties]
+----
+camel.main.producerTemplateCacheSize = 50
+----
+
+The default maximum cache size is 1000.
+
+
== See Also
See xref:consumertemplate.adoc[ConsumerTemplate]
\ No newline at end of file
diff --git a/docs/user-manual/modules/ROOT/pages/routes.adoc
b/docs/user-manual/modules/ROOT/pages/routes.adoc
index 13fdc400842b..db45fb736e46 100644
--- a/docs/user-manual/modules/ROOT/pages/routes.adoc
+++ b/docs/user-manual/modules/ROOT/pages/routes.adoc
@@ -44,6 +44,51 @@ YAML::
----
====
+== Naming routes
+
+You can assign names to your routes in Java DSL using `routeId`:
+
+[tabs]
+====
+
+Java::
++
+In Java DSL you use `routeId` to declare the name/id of the route.
++
+[source,java]
+----
+from("ftp:myserver/folder").routeId("myRoute")
+ .to("activemq:queue:cheese");
+----
+
+XML::
++
+In XML DSL you use `id` in the `<route>` element to declare the name/id of the
route.
++
+[source,xml]
+----
+<route id="myRoute">
+ <from uri="ftp:myserver/folder"/>
+ <to uri="activemq:queue:cheese"/>
+</route>
+----
+
+YAML::
++
+In YAML DSL you use `id` in the `- route` node to declare the name/id of the
route.
++
+[source,yaml]
+----
+- route:
+ id: myRoute
+ from:
+ uri: ftp:myserver/folder
+ steps:
+ - to:
+ uri: activemq:queue:cheese
+----
+====
+
== Route Description and Notes
diff --git a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
index c3f3fc5d525c..cacd2bf15244 100644
--- a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
+++ b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
@@ -338,3 +338,45 @@ from("direct:start")
.process(new StreamCachingProcessor())
.to("log:cached");
----
+
+== How do I enable streams when debug logging messages in Camel
+
+When you run Camel with `DEBUG` level as logging, it will log the
+messages and its content from time to time.
+As some messages can contain streams, which are prone to be not readable
+multiple times, and therefore Camel will by default *not* log these
+types.
+
+These are typical instances which are not logged by default:
+
+* `java.xml.transform.StreamSource`
+* `java.io.InputStream`
+* `java.io.OutputStream`
+* `java.io.Reader`
+* `java.io.Writer`
+
+You will see this in the log as:
+
+[source,log]
+----
+DEBUG ProducerCache - >>>> Endpoint[direct:start]
Exchange[Message: [Body is instance of java.xml.transform.StreamSource]]
+----
+
+Here we have a message which is XML stream based.
+You can customize whether Camel should log the payload anyway.
+
+You can enable this as a global option on `CamelContext` from Java:
+
+[source,java]
+----
+context.getGlobalOptions().put(Exchange.LOG_DEBUG_BODY_STREAMS, "true");
+----
+
+In `application.properties` this can also be done as shown:
+
+[source,properties]
+----
+camel.main.globalOptions[CamelLogDebugBodyStreams] = true
+----
+
+Notice default is `false`.
diff --git a/docs/user-manual/modules/ROOT/pages/uris.adoc
b/docs/user-manual/modules/ROOT/pages/uris.adoc
index 58df63d9349d..d5618e05e9ed 100644
--- a/docs/user-manual/modules/ROOT/pages/uris.adoc
+++ b/docs/user-manual/modules/ROOT/pages/uris.adoc
@@ -20,4 +20,4 @@ The query parameters have two parameters:
== More Information
-You can read the guide xref:faq:how-do-i-configure-endpoints.adoc[How do I
configure endpoints] to learn more about configuring _endpoints_. Among other
things, this guide explains how to refer to beans in the
xref:registry.adoc[registry], how to use raw values for password options, how
to use xref:using-propertyplaceholder.adoc[property placeholders], or how to
use the type safe xref:Endpoint-dsl.adoc[Endpoint DSL] and
xref:dataformat-dsl.adoc[DataFormat DSL].
+See also xref:endpoint.adoc[]
diff --git a/docs/user-manual/modules/faq/nav.adoc
b/docs/user-manual/modules/faq/nav.adoc
index bfcb5ed22913..b6f881f08449 100644
--- a/docs/user-manual/modules/faq/nav.adoc
+++ b/docs/user-manual/modules/faq/nav.adoc
@@ -14,24 +14,7 @@
** xref:what-platforms-are-supported.adoc[What platforms are supported?]
** xref:why-the-name-camel.adoc[Why the name Camel?]
**
xref:how-do-i-specify-which-method-to-use-when-using-beans-in-routes.adoc[How
do I specify which method to use when using beans in routes?]
-** xref:how-can-i-create-a-custom-component-or-endpoint.adoc[How can I create
a custom component or endpoint?]
** xref:how-does-camel-look-up-beans-and-endpoints.adoc[How does Camel look up
beans and endpoints?]
-** xref:how-do-i-configure-endpoints.adoc[How do I configure endpoints?]
-**
xref:how-do-i-configure-password-options-on-camel-endpoints-without-the-value-being-encoded.adoc[How
do I configure password options on Camel endpoints without the value being
encoded?]
-**
xref:how-do-i-configure-the-default-maximum-cache-size-for-producercache-or-producertemplate.adoc[How
do I configure the default maximum cache size for ProducerCache or
ProducerTemplate?]
-**
xref:how-do-i-configure-the-maximum-endpoint-cache-size-for-camelcontext.adoc[How
do I configure the maximum endpoint cache size for CamelContext?]
-** xref:how-do-i-debug-my-route.adoc[How do I debug my route?]
-** xref:how-do-i-disable-jmx.adoc[How do I disable JMX?]
-** xref:how-do-i-enable-streams-when-debug-logging-messages-in-camel.adoc[How
do I enable streams when debug logging messages in Camel?]
-**
xref:how-do-i-handle-failures-when-consuming-for-example-from-a-ftp-server.adoc[How
do I handle failures when consuming for example from a FTP server?]
-** xref:how-do-i-import-rests-from-other-xml-files.adoc[How do I import rests
from other XML files?]
-** xref:how-do-i-import-routes-from-other-xml-files.adoc[How do I import
routes from other XML files?]
-** xref:how-do-i-let-jetty-match-wildcards.adoc[How do I let Jetty match
wildcards?]
-** xref:how-do-i-name-my-routes.adoc[How do I name my routes?]
-** xref:how-do-i-restart-camelcontext.adoc[How do I restart CamelContext?]
-**
xref:how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc[How
do I retrieve the thrown Exception during processing an Exchange?]
-** xref:how-do-i-retry-failed-messages-forever.adoc[How do I retry failed
messages forever?]
-**
xref:how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc[How
do I retry processing a message from a certain point back or an entire route?]
** xref:how-do-i-reuse-the-contexttestsupport-class-in-my-unit-tests.adoc[How
do I reuse the ContextTestSupport class in my unit tests?]
**
xref:how-do-i-set-the-max-chars-when-debug-logging-messages-in-camel.adoc[How
do I set the max chars when debug logging messages in Camel?]
** xref:how-do-i-use-uris-with-parameters-in-xml.adoc[How do I use URIs with
parameters in XML?]
@@ -54,9 +37,7 @@
** xref:why-is-my-processor-not-showing-up-in-jconsole.adoc[Why is my
processor not showing up in JConsole?]
** xref:why-is-the-exception-null-when-i-use-onexception.adoc[Why is the
exception null when I use onException?]
** xref:why-use-multiple-camelcontext.adoc[Why use multiple CamelContext?]
-** xref:how-do-i-enable-debug-logging.adoc[How do I enable debug logging?]
** xref:how-do-i-use-log4j.adoc[How do I use log4j?]
-** xref:how-do-i-make-my-jms-endpoint-transactional.adoc[How Do I Make My JMS
Endpoint Transactional?]
** xref:how-do-i-set-the-mep-when-interacting-with-jbi.adoc[How do I set the
MEP when interacting with JBI?]
** xref:how-do-the-direct-event-seda-and-vm-endpoints-compare.adoc[How do the
direct, event, seda and vm endpoints compare?]
** xref:how-do-the-timer-and-quartz-endpoints-compare.adoc[How do the Timer
and Quartz endpoints compare?]
diff --git
a/docs/user-manual/modules/faq/pages/how-can-i-create-a-custom-component-or-endpoint.adoc
b/docs/user-manual/modules/faq/pages/how-can-i-create-a-custom-component-or-endpoint.adoc
deleted file mode 100644
index 842db5c355d3..000000000000
---
a/docs/user-manual/modules/faq/pages/how-can-i-create-a-custom-component-or-endpoint.adoc
+++ /dev/null
@@ -1,5 +0,0 @@
-= How can I create a custom component or endpoint?
-
-Please read xref:ROOT:writing-components.adoc[Writing Components] for a
-background in how to implement a new component or endpoint.
-
diff --git
a/docs/user-manual/modules/faq/pages/how-can-i-get-the-source-code.adoc
b/docs/user-manual/modules/faq/pages/how-can-i-get-the-source-code.adoc
index 9a90b095b688..64ec91bebead 100644
--- a/docs/user-manual/modules/faq/pages/how-can-i-get-the-source-code.adoc
+++ b/docs/user-manual/modules/faq/pages/how-can-i-get-the-source-code.adoc
@@ -1,11 +1,10 @@
= How can I get the source code?
-The source code is at https://github.com/apache/camel/
-so you can also checkout the source code from GitHub, if you are
-familiar with using GitHub. By using GitHub you can submit pull requests
-to the project using the standard GitHub way.
+The source code is on GitHub at: https://github.com/apache/camel
-https://github.com/apache/camel/
+From GitHub you can checkout the code, and contribute back
+by sending Pull Requests. Working with the code is similar to
+other projects hosted on GitHub.
== Building the code
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-configure-endpoints.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-configure-endpoints.adoc
deleted file mode 100644
index 79ec4d547a09..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-configure-endpoints.adoc
+++ /dev/null
@@ -1,305 +0,0 @@
-= How do I configure endpoints?
-
-There are a few different approaches to configuring components and
-endpoints.
-
-[[HowdoIconfigureendpoints-UsingJavaCode]]
-== Using Java Code
-
-You can explicitly configure a Component using Java
-code as shown in this example
-
-Or you can explicitly get hold of an Endpoint and
-configure it using Java code as shown in the
xref:components::mock-component.adoc[Mock endpoint examples].
-
-[source,java]
-----
-SomeEndpoint endpoint = camelContext.getEndpoint("someURI",
SomeEndpoint.class);
-endpoint.setSomething("aValue");
-----
-
-[[HowdoIconfigureendpoints-UsingSpringXML]]
-== Using Spring XML
-
-You can configure your Component or Endpoint instances in your Spring XML as
`<bean>` as follows:
-
-[source,xml]
-----
-<bean id="activemq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
- <property name="connectionFactory">
- <bean class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL"
value="vm://localhost?broker.persistent=false&broker.useJmx=false"/>
- </bean>
- </property>
-</bean>
-----
-
-Which allows you to configure a component using some name (activemq in
-the above example), then you can refer to the component using
-`activemq:[queue:|topic:]destinationName`. This works by the
-`SpringCamelContext` lazily fetching components from the spring context
-for the scheme name you use for Endpoint
-URIs
-
-[[HowdoIconfigureendpoints-UsingEndpointURIs]]
-== Using Endpoint URIs
-
-Another approach is to use the URI syntax. The URI syntax supports the
-query notation. So for example with the
xref:components::mail-component.adoc[Mail] component
-you can configure the password property via the URI
-
-[source,text]
-----
-pop3://host:port?password=foo
-----
-
-[[HowdoIconfigureendpoints-ReferringbeansfromEndpointURIs]]
-=== Referring beans from Endpoint URIs
-
-When configuring endpoints using the URI syntax you can refer to beans
-in the Registry using the `#bean:id` notation.
-
-NOTE: The older syntax with just `#id` has been deprecated due to ambiguity
-as Camel supports a number of additional functions that start with the #
notation.
-
-If the URI parameter value starts with `#bean:` then Camel will lookup in
-the Registry for a bean of the given type by id. For instance:
-
-[source]
-----
-file://inbox?sorter=#bean:mySpecialFileSorter
-----
-
-Will lookup a bean with the id `mySpecialFileSorter` in the
-Registry.
-
-Camel also supports to refer to beans by their class type.
-
-[[HowdoIconfigureendpoints-ReferringbeansbyclassfromEndpointURIs]]
-=== Referring beans by class from Endpoint URIs
-
-When configuring endpoints using URI syntax you can now refer to bean by its
class name
-using the `#class:fullyQualifiedName` notation.
-
-If the parameter value starts with a `#class:` sign then Camel will load the
-class with the given name, and create an instance of the bean using its
_no-arg_ constructor:
-
-[source,text]
-----
-file://inbox?sorter=#class:com.foo.MySpecialSorter
-----
-
-If you need to provide parameters to the constructor, then this is also
possible
-(limited to numbers, boolean, literal, and null values)
-
-[source,text]
-----
-file://inbox?sorter=#class:com.foo.MySpecialSorter(10, 'Hello world', true)
-----
-
-[[HowdoIconfigureendpoints-ReferringbeansbytypefromEndpointURIs]]
-=== Referring beans by type from Endpoint URIs
-
-When configuring endpoints using URI syntax you can now refer to bean by its
type which
-are used to lookup the bean by the given type from the
xref:ROOT:registry.adoc[Registry].
-If there is one bean found in the registry of the given type, then that bean
instance will be used;
-otherwise an exception is thrown.
-
-[source]
-----
-file://inbox?idempontentRepository=#type:org.apache.camel.spi.IdempotentRepository
-----
-
-[[HowdoIconfigureendpoints-Configuringparametervaluesusingrawvalues,egsuchaspasswords]]
-=== Configuring parameter values using raw values, eg such as passwords
-
-*Since Camel 2.11*
-
-When configuring endpoint options using URI syntax, then the values is
-by default URI encoded. This can be a problem if you want to configure
-passwords and just use the value _as is_ without any encoding. For
-example you may have a plus sign in the password, which would be decimal
-encoded by default.
-
-So from Camel 2.11 onwards we made this easier as you can denote a
-parameter value to be *raw* using the following syntax `RAW(value)`, e.g.
-the value starts with `RAW(` and then ends with the parenthesis `)`.
-Here is a little example:
-
-[source,java]
-----
-.to("ftp:[email protected]?password=RAW(se+re?t&23)&binary=true")
-----
-
-In the above example, we have declare the password value as raw, and the
-actual password would be as typed, eg `se+re?t&23`.
-
-NOTE: you may find a corner case when you use both `)` and `&` character as
part of your password (ie, `se+re)t&23`). The parser will interpret the `)` as
closing the `RAW` function and having a parameter started by `&`. In such case,
you can instead use the `RAW{}` notation to let you include the `)` character
and have it decoded as part of the password (ie, `RAW{se+re)t&23}`). As a safe
alternative you can also use `password=#property:myPass` and then have `myPass`
a xref:ROOT:property [...]
-
-==== Using ENV variables with raw values
-
-*Since Camel 4.7*
-
-If you need to use environment variables, for example as username or passwords
then this is now possible by inlining
-the xref:components:languages:simple-language.adoc[Simple] language
-using `+++$simple{xxx}+++` syntax in `RAW(...)` as shown below:
-
-[source,java]
-----
-.to("ftp:[email protected]?password=RAW($simple{env:MY_FTP_PASSWORD})&binary=true")
-----
-
-[[HowdoIconfigureendpoints-Usingpropertyplaceholders]]
-=== Using property placeholders
-
-Camel has extensive support for using property placeholders, which you
-can read more about here. For
-example in the ftp example above we can externalize the password to a
-`.properties` file.
-
-For example configuring the property placeholder when using a
-XML DSL, where we declare the location of the `.properties`
-file. Though we can also define this in Java code. See the
-documentation for more details.
-
-[source,xml]
-----
-<camelContext>
- <propertyPlaceholder id="properties" location="myftp.properties"/>
- ...
-</camelContext>
-----
-
-And the Camel route now refers to the placeholder using the `{\{key}}`
-notation:
-
-[source,java]
-----
-.to("ftp:[email protected]?password={{myFtpPassword}}&binary=true"
-----
-
-And have a `myftp.properties` file with password. Notice we still define
-the `RAW(value)` style to ensure the password is used _as is_:
-
-[source,text]
-----
-myFtpPassword=RAW(se+re?t&23)
-----
-
-We could still have used the `RAW(value)` in the Camel route instead:
-
-[source,java]
-----
-.to("ftp:[email protected]?password=RAW({{myFtpPassword}})&binary=true")
-----
-
-And then we would need to remove the `RAW` from the properties file:
-
-[source]
-----
-myFtpPassword=se+re?t&23
-----
-
-To understand more about property placeholders, read the
-documentation.
-
-In Camel 3.4 you can use an alternative than RAW to refer to a property
placeholder by its
-key, as discussed in the following section.
-
-=== Referring to a property placeholder
-
-When using `{\{key}}` in configuring endpoint URIs then Camel will replace the
`{\{key}}` while parsing the endpoint URI.
-This has its pros but also a few cons, such as when using sensitive
information such as passwords. As we have seen
-in the previous section you can use RAW() syntax. Instead of using RAW() you
can use `#property:key` notation,
-as shown in the example below:
-
-[source,java]
-----
-.to("ftp:[email protected]?password=#property:myFtpPassword&binary=true")
-----
-
-... and in XML:
-
-[source,xml]
-----
-<to
uri="ftp:[email protected]?password=#property:myFtpPassword&binary=true"/>
-----
-
-[[HowdoIconfigureendpoints-Configuringurisusingendpointwithbeanpropertystyle]]
-== Configuring URIs using endpoint with bean property style
-
-Sometimes configuring endpoint URIs may have many options, and therefore
-the URI can become long. In Java DSL you can break the URIs into new
-lines as its just Java code, e.g. just concat the `String`. When using XML
-DSL then the URI is an attribute, e.g. `<from uri="bla bla"/>`. From Camel
-2.15 onwards you can configure the endpoint separately, and from the
-routes refer to the endpoints using their shorthand ids.
-
-[source,xml]
-----
-<camelContext>
-
- <endpoint id="foo" uri="ftp://foo@myserver">
- <property key="password" value="secret"/>
- <property key="recursive" value="true"/>
- <property key="ftpClient.dataTimeout" value="30000"/>
- <property key="ftpClient.serverLanguageCode" value="fr"/>
- </endpoint>
-
- <route>
- <from uri="ref:foo"/>
- ...
- </route>
-</camelContext>
-----
-
-In the example above, the endpoint with id `foo`, is defined using
-`<endpoint>` which under the covers assembles this as an URI, with all the
-options, as if you have defined all the options directly in the URI. You
-can still configure some options in the URI, and then use `<property>`
-style for additional options, or to override options from the URI, such
-as:
-
-[source]
-----
-<endpoint id="foo" uri="ftp://foo@myserver?recursive=true">
- <property key="password" value="secret"/>
- <property key="ftpClient.dataTimeout" value="30000"/>
- <property key="ftpClient.serverLanguageCode" value="fr"/>
-</endpoint>
-----
-
-[[HowdoIconfigureendpoints-Configuringlongurisusingnewlines]]
-== Configuring long URIs using new lines
-
-Sometimes configuring endpoint URIs may have many options, and therefore
-the URI can become long. In Java DSL you can break the URIs into new
-lines as its just Java code, e.g. just concat the `String`. When using XML
-DSL then the URI is an attribute, e.g. `<from uri="bla bla"/>`. From Camel
-2.15 onwards you can break the URI attribute using new line, such as
-shown below:
-
-[source,xml]
-----
-<route>
- <from uri="ftp://foo@myserver?password=secret&
- recursive=true&
- ftpClient.dataTimeout=30000&
- ftpClientConfig.serverLanguageCode=fr"/>
- <to uri="bean:doSomething"/>
-</route>
-----
-
-Notice that it still requires escaping `&` as `&amp;` in XML. Also you
-can have multiple options in one line, eg this is the same:
-
-[source,xml]
-----
-<route>
- <from uri="ftp://foo@myserver?password=secret&
- recursive=true&ftpClient.dataTimeout=30000&
- ftpClientConfig.serverLanguageCode=fr"/>
- <to uri="bean:doSomething"/>
-</route>
-----
-
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-configure-password-options-on-camel-endpoints-without-the-value-being-encoded.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-configure-password-options-on-camel-endpoints-without-the-value-being-encoded.adoc
deleted file mode 100644
index 46e12acbedec..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-configure-password-options-on-camel-endpoints-without-the-value-being-encoded.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-= How do I configure password options on Camel endpoints without the value
being encoded?
-
-When you configure Camel endpoints using xref:ROOT:uris.adoc[URIs] then the
-parameter values gets url encoded by default. +
-This can be a problem when you want to configure passwords _as is_.
-
-To do that you can tell Camel to use the raw value, by enclosing the
-value with RAW(value). See more details at
-xref:how-do-i-configure-endpoints.adoc[How do I configure endpoints?]
-which has an example also.
-
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-configure-the-default-maximum-cache-size-for-producercache-or-producertemplate.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-configure-the-default-maximum-cache-size-for-producercache-or-producertemplate.adoc
deleted file mode 100644
index c15d4a8028af..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-configure-the-default-maximum-cache-size-for-producercache-or-producertemplate.adoc
+++ /dev/null
@@ -1,31 +0,0 @@
-= How do I configure the default maximum cache size for ProducerCache or
ProducerTemplate?
-
-*Since Camel 2.3*
-
-This applies to ConsumerCache and ConsumerTemplate as well.
-
-You can configure the default maximum cache size by setting the
-`Exchange.MAXIMUM_CACHE_POOL_SIZE` property on `CamelContext`.
-
-[source,java]
-----
-getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_CACHE_POOL_SIZE,
"50");
-----
-
-And in Spring XML its done as:
-
-[source,java]
-----
-<camelContext>
- <properties>
- <property key="CamelMaximumCachePoolSize" value="50"/>
- </properties>
-...
-</camelContext>
-----
-
-The default maximum cache size is 1000.
-
-At runtime you can see the `ProducerCache` in JMX as they are listed in
-the `services` category.
-
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-configure-the-maximum-endpoint-cache-size-for-camelcontext.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-configure-the-maximum-endpoint-cache-size-for-camelcontext.adoc
deleted file mode 100644
index 41cc9fbb3ed9..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-configure-the-maximum-endpoint-cache-size-for-camelcontext.adoc
+++ /dev/null
@@ -1,37 +0,0 @@
-= How do I configure the maximum endpoint cache size for CamelContext?
-
-xref:ROOT:camelcontext.adoc[CamelContext] will by default cache the last 1000
-used endpoints (based on a LRUCache).
-
-[[HowdoIconfigurethemaximumendpointcachesizeforCamelContext-Configuringcachesize]]
-== Configuring cache size
-
-*Since Camel 2.8*
-
-You can configure the default maximum cache size by setting the
-`Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE` property on
-xref:ROOT:camelcontext.adoc[CamelContext].
-
-[source,java]
-----
-getCamelContext().getGlobalOptions().put(Exchange.MAXIMUM_ENDPOINT_CACHE_SIZE,
"500");
-----
-
-You need to configure this before xref:ROOT:camelcontext.adoc[CamelContext]
-is started.
-
-And in Spring XML its done as:
-
-[source,java]
-----
-<camelContext>
- <properties>
- <property key="CamelMaximumEndpointCacheSize" value="500"/>
- </properties>
-...
-</camelContext>
-----
-
-At runtime you can see the `EndpointRegistry` in JMX as they are listed
-in the `services` category.
-
diff --git a/docs/user-manual/modules/faq/pages/how-do-i-debug-my-route.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-debug-my-route.adoc
deleted file mode 100644
index 5e97aa2209a2..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-debug-my-route.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= How do I debug my route?
-
-If you've created a route and its not doing what you think it is you
-could try using one of these features from version 1.4 onwards:
-
-* xref:ROOT:tracer.adoc[Tracer] to trace in commons-logging / log4j each step
-that Camel takes
-* xref:ROOT:debugger.adoc[Debugger] to let you set breakpoints at points in
-the route and examine historic message exchanges
-* xref:ROOT:debugger.adoc[Debug] from your unit test if you use the Camel
-`camel-test` component
-
-Some link:/community/user-stories/[third party tools] offer Apache Camel route
-debugging.
diff --git a/docs/user-manual/modules/faq/pages/how-do-i-disable-jmx.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-disable-jmx.adoc
deleted file mode 100644
index f10eacb2eff3..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-disable-jmx.adoc
+++ /dev/null
@@ -1,38 +0,0 @@
-= How do I disable JMX?
-
-== How do I disable JMX since Camel 3.x
-
-JMX is disabled by default, and only enabled if `camel-management`
-is on the classpath. So an easy way to disable JMX is to _not_ include this
JAR.
-
-You can also turn off JMX as shown below.
-
-== How do I disable JMX in Camel 2.x
-
-You can disable JMX instrumentation agent by setting Java VM system
-property as follow. The property value is treated as boolean.
-
-[source,java]
-----
--Dorg.apache.camel.jmx.disabled=true
-----
-
-Or, by adding a jmxAgent element inside the camelContext element in
-Spring configuration:
-
-[source,xml]
-----
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <jmxAgent id="agent" disabled="true"/>
- ...
-</camelContext>
-----
-
-Or in Camel 2.1 its a bit easier (not having to use JVM system property)
-if using pure Java as you can disable it as follows:
-
-[source,java]
-----
-CamelContext camel = new DefaultCamelContext();
-camel.disableJMX();
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-enable-debug-logging.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-enable-debug-logging.adoc
deleted file mode 100644
index 400135747e79..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-enable-debug-logging.adoc
+++ /dev/null
@@ -1,32 +0,0 @@
-= How do I enable debug logging?
-
-Camel uses convention over configuration so sometimes it's useful to turn
-on debug logging to see how Camel is operating and to try and diagnose
-issues.
-
-Camel uses http://www.slf4j.org/[sfl4j] which allows you to configure
-logging via, among others:
-
-* http://logging.apache.org/log4j/[Log4j]
-* http://logback.qos.ch/[Logback]
-*
https://docs.oracle.com/javase/8/docs/api/java/util/logging/package-summary.html[JDK
Util Logging logging]
-
-To enable debug logging we recommend you
-xref:how-do-i-use-log4j.adoc[use log4j for logging] then make sure your
-log4j.properties file enables DEBUG level logging for the
-`org.apache.camel` package.
-
-For example here is a `log4j.properties` file with debug Camel logging:
-enabled
-
-[source,java]
-----
-log4j.rootLogger=INFO, out
-
-log4j.logger.org.apache.camel=DEBUG
-
-log4j.appender.out=org.apache.log4j.ConsoleAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.ConversionPattern=[%30.30t] %-30.30c{1} %-5p %m%n
-#log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} -
%m%n
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-enable-streams-when-debug-logging-messages-in-camel.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-enable-streams-when-debug-logging-messages-in-camel.adoc
deleted file mode 100644
index dea7748061e3..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-enable-streams-when-debug-logging-messages-in-camel.adoc
+++ /dev/null
@@ -1,54 +0,0 @@
-= How do I enable streams when debug logging messages in Camel
-
-*Since Camel 2.1*
-
-When you run Camel with `DEBUG` level as logging, it will log the
-messages and its content from time to time.
-As some messages can contain streams, which are prone to be not readable
-multiple times, and therefore Camel will by default *not* log these
-types.
-
-These instances are not logged by default:
-
-* `java.xml.transform.StreamSource`
-* `java.io.InputStream`
-* `java.io.OutputStream`
-* `java.io.Reader`
-* `java.io.Writer`
-
-You will see this in the log as:
-
-----
-DEBUG ProducerCache - >>>> Endpoint[direct:start]
Exchange[Message: [Body is instance of java.xml.transform.StreamSource]]
-----
-
-Here we have a message which is XML stream based.
-You can customize whether Camel should log the payload anyway.
-
-[[HowdoIenablestreamswhendebugloggingmessagesinCamel-CustomizingfromJavaDSL]]
-== Customizing from Java DSL
-
-You add to the Camel properties the flag to log streams.
-
-[source,java]
-----
- context.getGlobalOptions().put(Exchange.LOG_DEBUG_BODY_STREAMS,
"true");
-----
-
-Notice default is `false`.
-
-[[HowdoIenablestreamswhendebugloggingmessagesinCamel-CustomizingfromSpringDSL]]
-== Customizing from Spring DSL
-
-You add to the Camel properties the flag to log streams.
-
-[source,java]
-----
- <camelContext>
- <properties>
- <property key="CamelLogDebugBodyStreams" value="true"/>
- </properties>
- </camelContext>
-----
-
-Notice default is `false`.
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-handle-failures-when-consuming-for-example-from-a-ftp-server.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-handle-failures-when-consuming-for-example-from-a-ftp-server.adoc
deleted file mode 100644
index c617d8d723f7..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-handle-failures-when-consuming-for-example-from-a-ftp-server.adoc
+++ /dev/null
@@ -1,25 +0,0 @@
-= How do I handle failures when consuming for example from a FTP server?
-
-When you do a route such as:
-
-[source,java]
-----
-from("ftp://[email protected]?password=secret").to("bean:logic?method=doSomething");
-----
-
-And there is a failure with connecting to the remote FTP server. The
-existing xref:ROOT:error-handler.adoc[error handler] is
-based on when a message is *being* routed.
-In this case the error occurs *before* a message has been initiated and
-routed. So how can I control the error handling?
-
-The xref:components::ftp-component.adoc[FTP] component have a few options
-(`maximumReconnectAttempts, reconnectDelay` to control number of retries
-and delay in between.
-
-But you can also plugin your own implementation and determine what to do
-using the `pollStrategy` option which has more documentation
-xref:components:eips:polling-consumer.adoc[Polling Consumer].
-Notice that the option `pollStrategy` applies for all consumers which is
-a `ScheduledPollConsumer` consumer. The page lists those.
-
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-import-rests-from-other-xml-files.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-import-rests-from-other-xml-files.adoc
deleted file mode 100644
index 5c7ebe719f33..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-import-rests-from-other-xml-files.adoc
+++ /dev/null
@@ -1,85 +0,0 @@
-= How do I import rests from other XML files?
-
-*Since Camel 2.14*
-
-When defining rests in Camel using Spring XML you may want to define some
rests in other XML files. For
-example you may have many rest services and it may help to maintain the
-application if some of the rests are in separate XML files. You may also
-want to store common and reusable rests in other XML files, which you
-can simply import when needed.
-
-This is possible to define rests outside `<camelContext/>` which you do
-in a new `<restContext/>` tag.
-
-[NOTE]
-====
-When you use `<restContext>` then they are separated, and cannot
-reuse existing `<onException>`, `<intercept>`, `<dataFormats>` and similar
-cross cutting functionality defined in the `<camelContext>`. In other
-words the `<restContext>` is currently isolated. This may change in Camel
-3.x.
-====
-
-For example we could have a file named `myCoolRests.xml` which contains
-a rest (can have more) as shown:
-
-[source,xml]
-----
- <restContext id="myCoolRest" xmlns="http://camel.apache.org/schema/spring">
- <rest path="/say/hello">
- <get>
- <to uri="direct:hello"/>
- </get>
- </rest>
- </restContext>
-----
-
-Then in your XML file which contains the CamelContext you can use Spring
-to import the `myCoolRests.xml` file.
-And then inside `<camelContext/>` you can refer to the
-`<restContext/>` using the `<restContextRef>` by its id as shown below:
-
-[source,xml]
-----
- <camelContext xmlns="http://camel.apache.org/schema/spring">
-
- <restContextRef ref="myCoolRest"/>
-
- <rest path="/say/bye">
- <get consumes="application/json">
- <to uri="direct:bye"/>
- </get>
- <post>
- <to uri="mock:update"/>
- </post>
- </rest>
-
- <route>
- <from uri="direct:hello"/>
- <transform>
- <constant>Hello World</constant>
- </transform>
- </route>
- <route>
- <from uri="direct:bye"/>
- <transform>
- <constant>Bye World</constant>
- </transform>
- </route>
- </camelContext>
-----
-
-Also notice that you can mix and match, having rests inside CamelContext
-and also externalized in RestContext.
-
-You can have as many `<restContextRef/>` as you like.
-
-[TIP]
-====
-**Reusable rests**
-
-The rests defined in `<restContext/>` can be reused by multiple
-`<camelContext/>`. However its only the definition which is reused. At
-runtime each CamelContext will create its own instance of the rest based
-on the definition.
-====
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-import-routes-from-other-xml-files.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-import-routes-from-other-xml-files.adoc
deleted file mode 100644
index b17b627a46f5..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-import-routes-from-other-xml-files.adoc
+++ /dev/null
@@ -1,44 +0,0 @@
-= How Do I Import Routes From Other XML Files?
-
-*Since Camel 2.3*
-
-When defining routes in Camel using Spring XML
-you may want to define some routes in other XML files.
-For example, you may have many routes, and it may help to maintain the
-application if some routes are in separate XML files. You may
-also want to store common and reusable routes in other XML files, which
-you can simply import when needed.
-
-In *Camel 2.3* it is now possible to define routes outside
-`<camelContext/>` which you do in a new `<routeContext/>` tag.
-
-[NOTE]
-====
-When you use `<routeContext>` then they are separated, and
-cannot reuse existing `<onException>`,
-`<intercept>`, `<dataFormats>` and similar cross-cutting
-functionality defined in the `<camelContext>`. In other words
-the `<routeContext>` is currently isolated. This may change in Camel
-3.x.
-====
-
-For example, we could have a file named `myCoolRoutes.xml` which
-contains a couple of routes as shown in
https://github.com/apache/camel/tree/main/components/camel-spring-parent/camel-spring-xml/src/test/resources/org/apache/camel/spring/config/myCoolRoutes.xml[this
example].
-
-
-Then in your XML file which contains the CamelContext you can use Spring to
-import the `myCoolRoute.xml` file. And then inside `<camelContext/>`
-you can refer to the `<routeContext/>` by its `id` as shown below in
https://github.com/apache/camel/tree/main/components/camel-spring-parent/camel-spring-xml/src/test/resources/org/apache/camel/spring/config/RouteRefIncludeXmlFileTest.xml[this
example].
-
-
-Also notice that you can mix and match, having routes inside `CamelContext`
-and also externalized in `RouteContext`.
-
-You can have as many `<routeContextRef/>` as you like.
-
-== Reusable routes
-
-The routes defined in `<routeContext/>` can be reused by multiple
-`<camelContext/>`. However, it is only the definition which is reused. At
-runtime each `CamelContext` will create its own instance of the route
-based on the definition.
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-let-jetty-match-wildcards.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-let-jetty-match-wildcards.adoc
deleted file mode 100644
index eee80eca6ce6..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-let-jetty-match-wildcards.adoc
+++ /dev/null
@@ -1,30 +0,0 @@
-= How do I let Jetty match wildcards?
-
-By default xref:components::jetty-component.adoc[Jetty] will only match on
exact uri's. But
-you can instruct Jetty to match prefixes. For example:
-
-[source,java]
-----
-from("jetty://0.0.0.0:8123/foo").to("mock:foo");
-----
-
-In the route above xref:components::jetty-component.adoc[Jetty] 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`.
-
-So if you want to enable wildcard matching you do as follows:
-
-[source,java]
-----
-from("jetty://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
-----
-
-So now Jetty matches any endpoints with starts with `foo`.
-
-To match *any* endpoint you can do:
-
-[source,java]
-----
-from("jetty://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-make-my-jms-endpoint-transactional.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-make-my-jms-endpoint-transactional.adoc
deleted file mode 100644
index 5d05cb44aa92..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-make-my-jms-endpoint-transactional.adoc
+++ /dev/null
@@ -1,25 +0,0 @@
-= How Do I Make My JMS Endpoint Transactional?
-
-I have a JMS route like this:
-
-[source,java]
-----
-from("activemq:Some.Queue")
- .bean(MyProcessor.class);
-----
-
-[[HowDoIMakeMyJMSEndpointTransactional-Question]]
-== Question:
-
-How Do I Make It Transactional?
-
-[[HowDoIMakeMyJMSEndpointTransactional-Answer]]
-== Answer:
-
-There are examples in the
xref:components:eips:transactional-client.adoc[Transactional Client]
-and it is described in the _Enabling Transacted Consumption_
-section of xref:components::jms-component.adoc[JMS]. To make a session
transactional
-set `transacted=true` flag on the JMS endpoint and configure
-a `transactionManager` on the xref:ROOT:component.adoc[Component] or
-xref:ROOT:endpoint.adoc[Endpoint].
-
diff --git a/docs/user-manual/modules/faq/pages/how-do-i-name-my-routes.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-name-my-routes.adoc
deleted file mode 100644
index 855d18aa0792..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-name-my-routes.adoc
+++ /dev/null
@@ -1,32 +0,0 @@
-= How do I name my routes?
-
-You can assign names to your routes in Java DSL using `routeId`:
-
-[source,java]
-----
-from("direct:start").routeId("myRoute")
- .to(mock:bar);
-----
-
-And in Spring XML using the `id` attribute:
-
-[source,xml]
-----
-<route id="myRoute">
- <from uri="direct:start"/>
- <to uri="mock:bar"/>
-</route>
-----
-
-Same example for YAML using the `id` attribute:
-
-[source,yaml]
-----
-- route:
- id: myRoute
- from:
- uri: direct:start
- steps:
- - to:
- uri: mock:bar
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-restart-camelcontext.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-restart-camelcontext.adoc
deleted file mode 100644
index bb425bcbab65..000000000000
--- a/docs/user-manual/modules/faq/pages/how-do-i-restart-camelcontext.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-= How do I restart CamelContext?
-
-A xref:ROOT:camelcontext.adoc[CamelContext] provides operations to control
-its lifecycle, see more at xref:ROOT:camelcontext.adoc[CamelContext].
-
-[NOTE]
-====
-Obviously you can also restart a Camel application if it has been
-deployed in a server. For example a WAR application can be restarted
-using the usual means for managing web applications.
-====
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc
deleted file mode 100644
index a24c3b0699c1..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc
+++ /dev/null
@@ -1,53 +0,0 @@
-= How do I retrieve the thrown Exception during processing an Exchange?
-
-You have send an Exchange to Camel but it fails during processing caused
-by a thrown Exception. How do I retrieve this Exception?
-
-If you are using CamelTemplate (or CamelProducer), then it is common to
-use the sendBody/requestBody methods that returns the exchange body
-response *only*. So if there was a thrown exception during processing
-Camel is not rethrowing this Exception. To remedy this you can use the
-plain send/request methods that accepts an Exchange object and returns
-an Exchange object.
-
-From the returned Exchange you can test if it has failed and get the caused
-exception. This is illustrated in the code sample:
-
-[source,java]
-----
-@Test
-public void testOk() {
- int result = (Integer) template.sendBody("direct:input",
ExchangePattern.InOut, "Hello London");
- assertEquals(1, result);
-}
-
-@Test
-public void testFailure() {
- // must create an exchange to get the result as an exchange where we can
get the caused exception
- Exchange exchange =
getMandatoryEndpoint("direct:input").createExchange(ExchangePattern.InOut);
- exchange.getIn().setBody("Hello Paris");
-
- Exchange out = template.send("direct:input", exchange);
- assertTrue("Should be failed", out.isFailed());
- assertTrue("Should be IllegalArgumentException", out.getException()
instanceof IllegalArgumentException);
- assertEquals("Forced exception", out.getException().getMessage());
-}
-
-protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
- public void configure() throws Exception {
- from("direct:input").bean(new ExceptionBean());
- }
- };
-}
-
-public static class ExceptionBean {
- public int doSomething(String request) throws Exception {
- if (request.equals("Hello London")) {
- return 1;
- } else {
- throw new IllegalArgumentException("Forced exception");
- }
- }
-}
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-retry-failed-messages-forever.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-retry-failed-messages-forever.adoc
deleted file mode 100644
index 8f90a362da14..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-retry-failed-messages-forever.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-= How do I retry failed messages forever?
-
-If you want to keep the bad message in the original queue, then you are
-also blocking the messages that has arrived on the queue after the bad
-message.
-
-By default Camel will retry consuming a message up til 6 times before
-its moved to the default dead letter queue.
-
-If you configure the xref:components:eips:dead-letter-channel.adoc[Dead Letter
Channel]
-to use `maximumRedeliveries = -1` then Camel will retry forever.
-
-When you consume a message you can check the in message header
-`org.apache.camel.redeliveryCount` that contains the number of times it
-has been redlivered.
-
-Or `org.apache.camel.Redelivered` that contains a boolean if its
-redelivered or if it is the first time the message is processed.
diff --git
a/docs/user-manual/modules/faq/pages/how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc
b/docs/user-manual/modules/faq/pages/how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc
deleted file mode 100644
index d0fe086f4d44..000000000000
---
a/docs/user-manual/modules/faq/pages/how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc
+++ /dev/null
@@ -1,91 +0,0 @@
-= How do I retry processing a message from a certain point back or an entire
route
-
-By default Apache Camel will perform any redelivery (retry) attempts
-from the point of failure. So if you want to retry from a point before
-this, you would need to split up your route.
-
-In the example below we have 2 routes (`direct:start`, `direct:sub`). In
-case of a failure anywhere in the `direct:sub` route, then the entire
-route is retried. This happens because we have instructed the `direct:sub`
-route to not use any error handler (eg the no error handler). Then we
-link the routes using the xref:components::direct-component.adoc[Direct]
component by calling
-the sub route from the 1st route.
-
-[source,java]
-----
-// in case of io exception then try to redeliver up till 2 times
-// (do not use any delay due faster unit testing)
-onException(IOException.class)
- .maximumRedeliveries(2).redeliveryDelay(0);
-
-from("direct:start")
- .to("mock:a")
- // call sub route (using direct)
- .to("direct:sub")
- .to("mock:c");
-
-from("direct:sub")
- // disable error handler, so the entire route can be retried in case of
redelivery
- .errorHandler(noErrorHandler())
- .to("mock:b")
- .process(new MyProcessor());
-----
-
-The code above is based on an unit test, and as you can see the
-processor below is configured to fail the first 2 attempts.
-So that means the entire `direct:sub` route is redelivered, meaning that
-the `mock:b` endpoint receives the incoming message again.
-
-[source,java]
-----
-public static class MyProcessor implements Processor {
-
- private int counter;
-
- @Override
- public void process(Exchange exchange) throws Exception {
- // use a processor to simulate error in the first 2 calls
- if (counter++ < 2) {
- throw new IOException("Forced");
- }
- exchange.getIn().setBody("Bye World");
- }
-}
-----
-
-The same example is shown below using the XML DSL:
-
-[source,xml]
-----
-<!-- this is the processor that will fail the first 2 attempts -->
-<bean id="myProcessor"
class="org.apache.camel.processor.RedeliverToSubRouteTest.MyProcessor"/>
-
-<camelContext xmlns="http://camel.apache.org/schema/spring">
-
- <!-- setup no error handler with an id, we refer to from the 2nd route -->
- <errorHandler id="noErrorHandler" type="NoErrorHandler"/>
-
- <!-- configure on exception to redelivery at most 2 times when an
IOException was thrown
- do not use redelivery delay to run unit test faster -->
- <onException>
- <exception>java.io.IOException</exception>
- <redeliveryPolicy maximumRedeliveries="2" redeliveryDelay="0"/>
- </onException>
-
- <!-- 1st route, no need to setup error handler, as it will use the default
error handler -->
- <route>
- <from uri="direct:start"/>
- <to uri="mock:a"/>
- <to uri="direct:sub"/>
- <to uri="mock:c"/>
- </route>
-
- <!-- disable error handler on this route, so the entire route can be
redelivered
- when called from the 1st route -->
- <route errorHandlerRef="noErrorHandler">
- <from uri="direct:sub"/>
- <to uri="mock:b"/>
- <process ref="myProcessor"/>
- </route>
-</camelContext>
-----
diff --git a/docs/user-manual/modules/faq/pages/index.adoc
b/docs/user-manual/modules/faq/pages/index.adoc
index 60ee1559dcdc..a5e33f49feb7 100644
--- a/docs/user-manual/modules/faq/pages/index.adoc
+++ b/docs/user-manual/modules/faq/pages/index.adoc
@@ -35,24 +35,7 @@ General questions about Camel
Questions on using Apache Camel
*
xref:how-do-i-specify-which-method-to-use-when-using-beans-in-routes.adoc[How
do I specify which method to use when using beans in routes?]
-* xref:how-can-i-create-a-custom-component-or-endpoint.adoc[How can I create a
custom component or endpoint?]
* xref:how-does-camel-look-up-beans-and-endpoints.adoc[How does Camel look up
beans and endpoints?]
-* xref:how-do-i-configure-endpoints.adoc[How do I configure endpoints?]
-*
xref:how-do-i-configure-password-options-on-camel-endpoints-without-the-value-being-encoded.adoc[How
do I configure password options on Camel endpoints without the value being
encoded?]
-*
xref:how-do-i-configure-the-default-maximum-cache-size-for-producercache-or-producertemplate.adoc[How
do I configure the default maximum cache size for ProducerCache or
ProducerTemplate?]
-*
xref:how-do-i-configure-the-maximum-endpoint-cache-size-for-camelcontext.adoc[How
do I configure the maximum endpoint cache size for CamelContext?]
-* xref:how-do-i-debug-my-route.adoc[How do I debug my route?]
-* xref:how-do-i-disable-jmx.adoc[How do I disable JMX?]
-* xref:how-do-i-enable-streams-when-debug-logging-messages-in-camel.adoc[How
do I enable streams when debug logging messages in Camel?]
-*
xref:how-do-i-handle-failures-when-consuming-for-example-from-a-ftp-server.adoc[How
do I handle failures when consuming for example from a FTP server?]
-* xref:how-do-i-import-rests-from-other-xml-files.adoc[How do I import rests
from other XML files?]
-* xref:how-do-i-import-routes-from-other-xml-files.adoc[How do I import routes
from other XML files?]
-* xref:how-do-i-let-jetty-match-wildcards.adoc[How do I let Jetty match
wildcards?]
-* xref:how-do-i-name-my-routes.adoc[How do I name my routes?]
-* xref:how-do-i-restart-camelcontext.adoc[How do I restart CamelContext?]
-*
xref:how-do-i-retrieve-the-thrown-exception-during-processing-an-exchange.adoc[How
do I retrieve the thrown Exception during processing an Exchange?]
-* xref:how-do-i-retry-failed-messages-forever.adoc[How do I retry failed
messages forever?]
-*
xref:how-do-i-retry-processing-a-message-from-a-certain-point-back-or-an-entire-route.adoc[How
do I retry processing a message from a certain point back or an entire route?]
* xref:how-do-i-reuse-the-contexttestsupport-class-in-my-unit-tests.adoc[How
do I reuse the ContextTestSupport class in my unit tests?]
*
xref:how-do-i-set-the-max-chars-when-debug-logging-messages-in-camel.adoc[How
do I set the max chars when debug logging messages in Camel?]
* xref:how-do-i-use-uris-with-parameters-in-xml.adoc[How do I use URIs with
parameters in XML?]
@@ -83,7 +66,6 @@ Questions on using Apache Camel
Questions on logging output from Camel to a console, using the
xref:components::log-component.adoc[Log] endpoint or JDK 1.4 logging or Log4j
etc
-* xref:how-do-i-enable-debug-logging.adoc[How do I enable debug logging?]
* xref:how-do-i-use-log4j.adoc[How do I use log4j?]
[[FAQ-CamelEndpointQuestions]]
@@ -92,7 +74,6 @@ xref:components::log-component.adoc[Log] endpoint or JDK 1.4
logging or Log4j et
Questions on using the various Camel xref:components::index.adoc[Components]
and xref:ROOT:endpoint.adoc[Endpoint] implementations
-* xref:how-do-i-make-my-jms-endpoint-transactional.adoc[How Do I Make My JMS
Endpoint Transactional?]
* xref:how-do-i-set-the-mep-when-interacting-with-jbi.adoc[How do I set the
MEP when interacting with JBI?]
* xref:how-do-the-direct-event-seda-and-vm-endpoints-compare.adoc[How do the
direct, event, seda and vm endpoints compare?]
* xref:how-do-the-timer-and-quartz-endpoints-compare.adoc[How do the Timer and
Quartz endpoints compare?]
diff --git
a/docs/user-manual/modules/faq/pages/why-cant-i-use-sign-in-my-password.adoc
b/docs/user-manual/modules/faq/pages/why-cant-i-use-sign-in-my-password.adoc
index 039b937ffa2b..77194f3bfd86 100644
--- a/docs/user-manual/modules/faq/pages/why-cant-i-use-sign-in-my-password.adoc
+++ b/docs/user-manual/modules/faq/pages/why-cant-i-use-sign-in-my-password.adoc
@@ -6,8 +6,4 @@ When you configure Camel endpoints using
xref:ROOT:uris.adoc[URIs] then the
parameter values gets url encoded by default.
This can be a problem when you want to configure passwords _as is_.
-To do that you can tell Camel to use the raw value, by enclosing the
-value with RAW(value). See more details at
-xref:how-do-i-configure-endpoints.adoc[How do I configure endpoints?]
-which has an example also.
diff --git
a/docs/user-manual/modules/faq/pages/why-does-my-file-consumer-not-pick-up-the-file-and-how-do-i-let-the-file-consumer-use-the-camel-error-handler.adoc
b/docs/user-manual/modules/faq/pages/why-does-my-file-consumer-not-pick-up-the-file-and-how-do-i-let-the-file-consumer-use-the-camel-error-handler.adoc
index 454dfc5b924d..c7f59334521c 100644
---
a/docs/user-manual/modules/faq/pages/why-does-my-file-consumer-not-pick-up-the-file-and-how-do-i-let-the-file-consumer-use-the-camel-error-handler.adoc
+++
b/docs/user-manual/modules/faq/pages/why-does-my-file-consumer-not-pick-up-the-file-and-how-do-i-let-the-file-consumer-use-the-camel-error-handler.adoc
@@ -5,8 +5,6 @@ not picking up files. For example it may not run at all, or it
cannot
acquire a read lock on the file.
xref:index.adoc#FAQ-LoggingQuestions[Check the logs] for any exceptions or
other
informative messages. You can
-xref:how-do-i-enable-debug-logging.adoc[turn on DEBUG logging] at
-`org.apache.camel.component.file` to see more detail.
[[WhydoesmyfileconsumernotpickupthefileandhowdoIletthefileconsumerusetheCamelerrorhandler-HowtouseCamelsroutingerrorhandlerswiththefileconsumer]]
== How to use Camel's routing error handlers with the file consumer