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 950936d26478 CAMEL-16861: Cleanup docs (#21807)
950936d26478 is described below
commit 950936d26478abf27d0b274412b4bc1c97721e6d
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Mar 8 18:26:37 2026 +0100
CAMEL-16861: Cleanup docs (#21807)
---
.../camel-http/src/main/docs/http-component.adoc | 62 ++++++++
.../src/main/docs/xslt-saxon-component.adoc | 3 +-
.../camel-xslt/src/main/docs/xslt-component.adoc | 3 +-
.../src/main/java/org/apache/camel/Exchange.java | 9 --
.../src/main/docs/modules/eips/pages/log-eip.adoc | 2 +-
.../src/main/docs/modules/eips/pages/to-eip.adoc | 170 +++++++++++++++++++++
.../modules/ROOT/pages/stream-caching.adoc | 16 ++
docs/user-manual/modules/faq/nav.adoc | 11 +-
...http-protocol-headers-in-the-camel-message.adoc | 41 -----
.../faq/pages/how-to-use-a-dynamic-uri-in-to.adoc | 52 -------
docs/user-manual/modules/faq/pages/index.adoc | 9 --
.../using-getin-or-getout-methods-on-exchange.adoc | 130 ----------------
.../faq/pages/why-is-my-message-body-empty.adoc | 18 ---
.../dsl/jbang/core/commands/mcp/DiagnoseTools.java | 3 +-
14 files changed, 255 insertions(+), 274 deletions(-)
diff --git a/components/camel-http/src/main/docs/http-component.adoc
b/components/camel-http/src/main/docs/http-component.adoc
index f8a628ca668b..9a45aad4f75e 100644
--- a/components/camel-http/src/main/docs/http-component.adoc
+++ b/components/camel-http/src/main/docs/http-component.adoc
@@ -582,5 +582,67 @@ property.
</bean>
----------------------------------------------------------------------------
+== Removing http protocol headers in the Camel Message
+
+In camel there are a number of components that use the http protocol
+headers to do their business.
+
+The components include camel-http, camel-jetty, camel-cxf, etc.
+
+If you are using these component, you may pay attention to the HTTP protocol
headers:
+
+[source,text]
+----
+ Exchange.CONTENT_ENCODING
+ Exchange.CONTENT_TYPE
+ Exchange.HTTP_BASE_URI
+ Exchange.HTTP_CHARACTER_ENCODING
+ Exchange.HTTP_METHOD
+ Exchange.HTTP_PATH
+ Exchange.HTTP_QUERY
+ Exchange.HTTP_RESPONSE_CODE
+----
+
+If you don't want these headers to bother your other endpoints, you can
+remove these headers using xref:eips:removeHeaders-eip.adoc[Remove Headers]
EIP as follows:
+
+[tabs]
+====
+
+Java::
++
+[source,java]
+----
+from("jetty://http://myhost:9000/myservice/")
+ .removeHeaders("CamelHttp*")
+ .to("otherEndpoint");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="jetty://http://myhost:9000/myservice/"/>
+ <removeHeaders pattern="CamelHttp*" />
+ <to uri="otherEndpoint"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: jetty://http://myhost:9000/myservice/
+ steps:
+ - removeHeaders:
+ pattern: "CamelHttp*"
+ - to:
+ uri: otherEndpoint
+----
+
+====
include::spring-boot:partial$starter.adoc[]
diff --git
a/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
index 98601b1a3320..a550affe41e7 100644
--- a/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
+++ b/components/camel-xslt-saxon/src/main/docs/xslt-saxon-component.adoc
@@ -201,8 +201,7 @@ With Spring XML:
To provide a dynamic stylesheet at runtime, you can either:
-- Define a dynamic URI. See
xref:manual:faq:how-to-use-a-dynamic-uri-in-to.adoc[How to use a dynamic URI in
-`to()`] for more information.
+- Define a dynamic URI. See xref:eips:toD-eip.adoc[toD] EIP.
- Use header with the stylesheet.
When using a header for dynamic stylesheet, then you can either refer to the
stylesheet as a `file` or `classpath`
diff --git a/components/camel-xslt/src/main/docs/xslt-component.adoc
b/components/camel-xslt/src/main/docs/xslt-component.adoc
index 1c953c00997b..85cfc8f6f17b 100644
--- a/components/camel-xslt/src/main/docs/xslt-component.adoc
+++ b/components/camel-xslt/src/main/docs/xslt-component.adoc
@@ -160,8 +160,7 @@ You can explicitly specify `file:` or `classpath:` loading.
The two loading type
To provide a dynamic stylesheet at runtime, you can either:
-- Define a dynamic URI. See
xref:manual:faq:how-to-use-a-dynamic-uri-in-to.adoc[How to use a dynamic URI in
-to()] for more information.
+- Define a dynamic URI. See xref:eips:toD-eip.adoc[toD] EIP.
- Use header with the stylesheet.
When using a header for dynamic stylesheet, then you can either refer to the
stylesheet as a `file` or `classpath`
diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
index fc54ffd4cdad..690521064693 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java
@@ -60,9 +60,6 @@ import org.apache.camel.spi.annotations.ConstantProvider;
* {@link Message} are not automatically copied to the out by Camel, and
you'll have to set the headers and attachments
* you need yourself. If your {@link Processor} is not producing a different
{@link Message} but only needs to slightly
* modify the in, you can simply update the in {@link Message} returned by
{@link #getIn()}.
- * <p/>
- * See this <a
href="http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html">FAQ
entry</a> for more
- * details.
*/
@ConstantProvider("org.apache.camel.ExchangeConstantProvider")
public interface Exchange extends VariableAware {
@@ -588,9 +585,6 @@ public interface Exchange extends VariableAware {
* <p/>
* <br/>
* If you want to test whether an OUT message has been set or not, use the
{@link #hasOut()} method.
- * <p/>
- * See also the class Javadoc for this {@link Exchange} for more details
and this
- * <a
href="http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html">FAQ
entry</a>.
*
* @return the response
* @see #getIn()
@@ -608,9 +602,6 @@ public interface Exchange extends VariableAware {
* <p/>
* <br/>
* If you want to test whether an OUT message has been set or not, use the
{@link #hasOut()} method.
- * <p/>
- * See also the class Javadoc for this {@link Exchange} for more details
and this
- * <a
href="http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html">FAQ
entry</a>.
*
* @param type the given type
* @return the message as the given type or <tt>null</tt> if not
possible to covert to given type
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
index 2cfb9e696539..3af2f959b90d 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/log-eip.adoc
@@ -127,7 +127,7 @@ to construct the `String` containing the message to be
logged.
=== Logging message body with streaming
-If the message body is stream based, then logging the message body may cause
the message body to be empty afterward. See this
xref:manual:faq:why-is-my-message-body-empty.adoc[FAQ]. For streamed messages,
you can use Stream caching to allow logging the message body and be able to
read the message body afterward again.
+If the message body is stream based, then logging the message body may cause
the message body to be empty afterward. For streamed messages, you can use
xref:manual::stream-caching.adoc[Stream caching] to allow logging the message
body and be able to read the message body afterward again.
[tabs]
====
diff --git
a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
index 7b0e544c1d00..bb3ba9be0cc0 100644
--- a/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
+++ b/core/camel-core-engine/src/main/docs/modules/eips/pages/to-eip.adoc
@@ -84,3 +84,173 @@ YAML::
uri: jms:queue:foo
----
====
+
+== How to use a dynamic URI in to
+
+A dynamic URI is an endpoint URI that varies depending on inflight
+routing information, such as Exchange properties, message headers, the
+body, the Camel Context, etc.
+
+For example, if you're using a Freemarker producer and the template
+location is provided inside the current message, you might expect the
+following code to work, *but it will not*.
+
+[WARNING]
+====
+*This is not valid code*
+
+This snippet is not valid code. Read on.
+====
+
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("file:messages/foo")
+ .to("freemarker://templateHome/${body.templateName}.ftl")
+ .to("jms:queue:foo");
+----
+
+XML::
++
+[source,xml]
+----
+<route>
+ <from uri="file:messages/foo"/>
+ <to uri="freemarker://templateHome/${body.templateName}.ftl"/>
+ <to uri="jms:queue:foo"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:messages/foo
+ steps:
+ - to:
+ uri: "freemarker://templateHome/${body.templateName}.ftl"
+ - to:
+ uri: jms:queue:foo
+----
+====
+
+In this case, you must use an EIP (Enterprise Integration Pattern) that
+is capable of computing a dynamic URI using
+an xref:manual::expression.adoc[Expression], such as
+the xref:components:eips:toD-eip.adoc[toD] or
xref:components:eips:recipientList-eip.adoc[Recipient List] EIP pattern.
+
+[TIP]
+====
+*This is valid code*
+
+This snippet is valid code.
+====
+
+To fix the above problem we can use either toD or recipientList.
+Using toD is easier as shown below:
+
+[tabs]
+====
+Java::
++
+Use `toD` for dynamic URIs
++
+[source,java]
+----
+from("file:messages/foo")
+ .toD("freemarker://templateHome/${body.templateName}.ftl")
+ .to("jms:queue:foo");
+----
+
+XML::
++
+Use `<toD>` for dynamic URIs
++
+[source,xml]
+----
+<route>
+ <from uri="file:messages/foo"/>
+ <toD uri="freemarker://templateHome/${body.templateName}.ftl"/>
+ <to uri="jms:queue:foo"/>
+</route>
+----
+
+YAML::
++
+Use `- toD:` for dynamic URIs
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:messages/foo
+ steps:
+ - toD:
+ uri: "freemarker://templateHome/${body.templateName}.ftl"
+ - to:
+ uri: jms:queue:foo
+----
+====
+
+When using recipient list:
+
+[source,java]
+----
+.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))
+----
+
+[tabs]
+====
+Java::
++
+Use `recipientList` for more flexible and dynamic URIs
++
+[source,java]
+----
+from("file:messages/foo")
+
.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))
+ .to("jms:queue:foo");
+----
+
+XML::
++
+Use `<recipientList>` for more flexible and dynamic URIs
++
+[source,xml]
+----
+<route>
+ <from uri="file:messages/foo"/>
+ <recipientList>
+ <simple>freemarker://templateHome/${body.templateName}.ftl</simple>
+ </recipientList>
+ <to uri="jms:queue:foo"/>
+</route>
+----
+
+YAML::
++
+Use `- recipientList:` for more flexible and dynamic URIs
++
+[source,yaml]
+----
+- route:
+ from:
+ uri: file:messages/foo
+ steps:
+ - recipientList:
+ expression:
+ simple:
+ expression:
"freemarker://templateHome/${body.templateName}.ftl"
+ - to:
+ uri: jms:queue:foo
+----
+====
+
+
+
+
diff --git a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
index cacd2bf15244..c3e331d2a88a 100644
--- a/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
+++ b/docs/user-manual/modules/ROOT/pages/stream-caching.adoc
@@ -6,6 +6,22 @@ Streams are cached in memory. However, for large stream
messages, you can set `s
and then large message (over 128 KB) will be cached in a temporary file
instead.
Camel itself will handle deleting the temporary file once the cached stream is
no longer necessary.
+== Why is my message empty?
+
+In Camel the message body can be of any types. Some types are safely
+readable multiple times, and therefore do not _suffer_ from becoming
+_empty_.
+
+So when you message body suddenly is empty, then that is often related
+to using a message type that is no re-readable; in other words, the
+message body can only be read once. On subsequent reads the body is now empty.
+This happens with types that are streaming based, such as
`java.util.InputStream`, etc.
+
+A number of Camel components supports and use streaming types out of the
+box. For example the HTTP related components, CXF, etc.
+
+Camel comes with Stream Caching that caches the stream, so it can be
re-readable.
+
[IMPORTANT]
====
*StreamCache - Affecting the message payload*
diff --git a/docs/user-manual/modules/faq/nav.adoc
b/docs/user-manual/modules/faq/nav.adoc
index ce01dab121e3..84ff14197567 100644
--- a/docs/user-manual/modules/faq/nav.adoc
+++ b/docs/user-manual/modules/faq/nav.adoc
@@ -1,13 +1,8 @@
* xref:index.adoc[FAQ]
-** xref:can-i-get-commercial-support.adoc[Can I get commercial support?]
+** xref:what-is-camel.adoc[What is Camel?]
** link:/community/support/[How can I get help?]
+** xref:can-i-get-commercial-support.adoc[Can I get commercial support?]
** xref:how-can-i-get-the-source-code.adoc[How can I get the source code?]
+** xref:how-do-i-edit-the-website.adoc[How do I edit the documentation?]
** xref:how-do-i-become-a-committer.adoc[How do I become a committer?]
-** xref:how-do-i-edit-the-website.adoc[How do I edit the website?]
-** xref:what-is-camel.adoc[What is Camel?]
-** xref:ROOT:languages.adoc[What languages are supported?]
** xref:why-the-name-camel.adoc[Why the name Camel?]
-** xref:how-to-remove-the-http-protocol-headers-in-the-camel-message.adoc[How
to remove the http protocol headers in the camel message?]
-** xref:how-to-use-a-dynamic-uri-in-to.adoc[How to use a dynamic URI in to()?]
-** xref:using-getin-or-getout-methods-on-exchange.adoc[Using getIn or getOut
methods on Exchange]
-** xref:why-is-my-message-body-empty.adoc[Why is my message body empty?]
diff --git
a/docs/user-manual/modules/faq/pages/how-to-remove-the-http-protocol-headers-in-the-camel-message.adoc
b/docs/user-manual/modules/faq/pages/how-to-remove-the-http-protocol-headers-in-the-camel-message.adoc
deleted file mode 100644
index a4e48645f7e5..000000000000
---
a/docs/user-manual/modules/faq/pages/how-to-remove-the-http-protocol-headers-in-the-camel-message.adoc
+++ /dev/null
@@ -1,41 +0,0 @@
-= How to remove the http protocol headers in the camel message?
-
-In camel there are a number of components that use the http protocol
-headers to do their business.
-The components include camel-http, camel-jetty,
-camel-cxf, etc.
-If you are using these component, you may pay attention to the HTTP
-protocol headers:
-
-[source,java]
-----
- Exchange.CONTENT_ENCODING
- Exchange.CONTENT_TYPE
- Exchange.HTTP_BASE_URI
- Exchange.HTTP_CHARACTER_ENCODING
- Exchange.HTTP_METHOD
- Exchange.HTTP_PATH
- Exchange.HTTP_QUERY
- Exchange.HTTP_RESPONSE_CODE
-----
-
-If you don't want these headers to bother your other endpoints, you can
-remove these headers as follows:
-
-[source,java]
-----
- from("jetty://http://myhost:9000/myservice/")
- .removeHeaders("CamelHttp*")
- .to("otherEndpoint");
-----
-
-[source,xml]
-----
- <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
- <route>
- <from uri="jetty://http://myhost:9000/myservice/"/>
- <removeHeaders pattern="CamelHttp*" />
- <to uri="otherEndpoint"/>
- </route>
- </camelContext>
-----
diff --git
a/docs/user-manual/modules/faq/pages/how-to-use-a-dynamic-uri-in-to.adoc
b/docs/user-manual/modules/faq/pages/how-to-use-a-dynamic-uri-in-to.adoc
deleted file mode 100644
index a2b91b31d62d..000000000000
--- a/docs/user-manual/modules/faq/pages/how-to-use-a-dynamic-uri-in-to.adoc
+++ /dev/null
@@ -1,52 +0,0 @@
-= How to use a dynamic URI in `to()`
-
-A dynamic URI is an endpoint URI that varies depending on inflight
-routing information, such as Exchange properties, message headers, the
-body, the Camel Context, etc.
-
-For example, if you're using a Freemarker producer and the template
-location is provided inside the current message, you might expect the
-following code to work, *but it will not*.
-
-[WARNING]
-====
-*This is not valid code*
-
-This snippet is not valid code. Read on.
-====
-
-[source,java]
-----
-.to("freemarker://templateHome/${body.templateName}.ftl")
-----
-
-In this case, you must use an EIP (Enterprise Integration Pattern) that
-is capable of computing a dynamic URI using
-an xref:ROOT:expression.adoc[Expression], such as
-the xref:components:eips:toD-eip.adoc[ToD] or
xref:components:eips:recipientList-eip.adoc[Recipient List] EIP pattern.
-
-[TIP]
-====
-*This is valid code*
-
-This snippet is valid code.
-====
-
-To fix the above problem we can use either toD or recipientList.
-Using toD is easier as shown below:
-
-[source,java]
-----
-.toD("freemarker://templateHome/${body.templateName}.ftl")
-----
-
-When using recipient list:
-[source,java]
-----
-.recipientList(simple("freemarker://templateHome/${body.templateName}.ftl"))
-----
-
-
-
-
-
diff --git a/docs/user-manual/modules/faq/pages/index.adoc
b/docs/user-manual/modules/faq/pages/index.adoc
index a90c274e152c..6436c33302ed 100644
--- a/docs/user-manual/modules/faq/pages/index.adoc
+++ b/docs/user-manual/modules/faq/pages/index.adoc
@@ -22,13 +22,4 @@ General questions about Camel
* xref:ROOT:languages.adoc[What languages are supported?]
* xref:why-the-name-camel.adoc[Why the name Camel?]
-[[FAQ-UsingCamelQuestions]]
-== Using Camel Questions
-
-Questions on using Apache Camel
-
-* xref:how-to-remove-the-http-protocol-headers-in-the-camel-message.adoc[How
to remove the http protocol headers in the camel message?]
-* xref:how-to-use-a-dynamic-uri-in-to.adoc[How to use a dynamic URI in to()?]
-* xref:using-getin-or-getout-methods-on-exchange.adoc[Using getIn or getOut
methods on Exchange]
-* xref:why-is-my-message-body-empty.adoc[Why is my message body empty?]
diff --git
a/docs/user-manual/modules/faq/pages/using-getin-or-getout-methods-on-exchange.adoc
b/docs/user-manual/modules/faq/pages/using-getin-or-getout-methods-on-exchange.adoc
deleted file mode 100644
index f34a45b10984..000000000000
---
a/docs/user-manual/modules/faq/pages/using-getin-or-getout-methods-on-exchange.adoc
+++ /dev/null
@@ -1,130 +0,0 @@
-= Message Exchange Patterns and the Exchange object
-
-The Camel API is influenced by APIs such as
-http://en.wikipedia.org/wiki/Java_Business_Integration[JBI specification],
-http://cxf.apache.org/[CXF] which defines a concept
-called Message Exchange Patterns (MEP for short).
-
-The MEP defines the messaging style used such as one-way
-(xref:components:eips:event-message.adoc[InOnly]) or request-reply
-(xref:components:eips:requestReply-eip.adoc[InOut]),
-which means you have IN and optionally OUT messages. This closely maps
-to other APIs such as WS, WSDL, REST, JBI and the likes.
-
-The xref:ROOT:exchange.adoc[Exchange] API provides two methods to get a
-message, either `getIn` or `getOut`.
-Obviously the `getIn` gets the IN message, and the `getOut` gets the OUT
-message.
-
-[[UsinggetInorgetOutmethodsonExchange-Flowofanexchangethrougharoute]]
-== Flow of an exchange through a route
-
-image::using-getin-or-getout-methods-on-exchange/message-flow-in-route.png[image]
-
-* The out message from each step is used as the in message for the next
-step
-* if there is no out message then the in message is used instead
-* For the InOut MEP the out from the last step in the route is returned
-to the producer. In case of InOnly the last out is thrown away
-
-[TIP]
-====
-**Beware of `getOut` to check if there is an out message**
-
-`exchange.getOut` creates an out message if there is none. So if you want
-to check if there is an out message then you should use `exchange.hasOut`
-instead.
-====
-
-[[UsinggetInorgetOutmethodsonExchange-UsinggetInorgetOutmethodsonExchange]]
-== Using getIn or getOut methods on Exchange
-
-Now suppose you want to use a Camel xref:ROOT:processor.adoc[Processor] to
-adjust a message. This can be done as follows:
-
-[source,java]
-----
-public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- // change the message to say Hello
- exchange.getOut().setBody("Hello " + body);
-}
-----
-
-This seems intuitive and is what you would expect is the _right_
-approach to change a message from a xref:ROOT:processor.adoc[Processor].
-However there is an big issue -- the `getOut` method will create a new
-xref:components:eips:message.adoc[Message], which means any other information
-from the IN message will not be propagated; which means you will lose
-that data.
-
-To remedy this we'll have to copy the data which is done as follows:
-
-[source,java]
-----
-public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- // change the message to say Hello
- exchange.getOut().setBody("Hello " + body);
- // copy headers from IN to OUT to propagate them
- exchange.getOut().setHeaders(exchange.getIn().getHeaders());
-}
-----
-
-Well that is not all, a xref:components:eips:message.adoc[Message] can also
contain
-attachments so to be sure you need to propagate those as well:
-
-[source,java]
-----
-public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- // change the message to say Hello
- exchange.getOut().setBody("Hello " + body);
- // copy headers from IN to OUT to propagate them
- exchange.getOut().setHeaders(exchange.getIn().getHeaders());
- // copy attachements from IN to OUT to propagate them
- exchange.getOut().setAttachments(exchange.getIn().getAttachments());
-}
-----
-
-Now we ensure that all additional data is propagated on the new OUT
-message. But its a shame we need 2 code lines to ensure data is
-propagated.
-What you can do instead is to change the IN message instead, as shown
-below:
-
-[source,java]
-----
-public void process(Exchange exchange) throws Exception {
- String body = exchange.getIn().getBody(String.class);
- // change the existing message to say Hello
- exchange.getIn().setBody("Hello " + body);
-}
-----
-
-[TIP]
-====
-**Consider using getIn**
-
-As shown above you most often need to alter the existing IN message,
-than creating a totally new OUT message.
-And therefore it's often easier just to adjust the IN message directly.
-====
-
-Changing the IN message directly is possible in Camel as it doesn't
-mind. Camel will detect that the xref:ROOT:exchange.adoc[Exchange] has no OUT
-message and therefore use the IN message instead.
-
-[[UsinggetInorgetOutmethodsonExchange-AboutMessageExchangePatternandgetOut]]
-== About Message Exchange Pattern and getOut
-
-If the xref:ROOT:exchange.adoc[Exchange] is using `InOnly` as the MEP, then
-you may think that the xref:ROOT:exchange.adoc[Exchange] has no OUT
-message. But you can still invoke the `getOut` method on
-xref:ROOT:exchange.adoc[Exchange]; Camel will not barf.
-
-So the example code above is possible for any kind of MEP. The MEP is
-_just_ a flag on the xref:ROOT:exchange.adoc[Exchange] which the Consumer and
-Producer adhere to.
-You can change the MEP on the xref:ROOT:exchange.adoc[Exchange] using the
-`setPattern` method. And likewise there is DSL to change it as well.
diff --git
a/docs/user-manual/modules/faq/pages/why-is-my-message-body-empty.adoc
b/docs/user-manual/modules/faq/pages/why-is-my-message-body-empty.adoc
deleted file mode 100644
index 8795a1813885..000000000000
--- a/docs/user-manual/modules/faq/pages/why-is-my-message-body-empty.adoc
+++ /dev/null
@@ -1,18 +0,0 @@
-= Why is my message empty?
-
-In Camel the message body can be of any types. Some types are safely
-readable multiple times, and therefore do not 'suffer' from becoming
-'empty'.
-So when you message body suddenly is empty, then that is often related
-to using a message type that is no re-readable; in other words, the
-message
-body can only be read once. On subsequent reads the body is now empty.
-This happens with types that are streaming based, such as
-`java.util.InputStream`, etc.
-
-A number of Camel components supports and use streaming types out of the
-box. For example the HTTP related components, CXF, etc.
-
-Camel offers a functionality xref:ROOT:stream-caching.adoc[Stream caching];
-that caches the stream, so it can be re-readable. By enabling this
-cache, the message body would no longer be empty.
diff --git
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
index 261370e549e8..879063c6e283 100644
---
a/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
+++
b/dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/DiagnoseTools.java
@@ -275,8 +275,7 @@ public class DiagnoseTools {
"Check available components with 'camel-catalog' or
the Camel documentation",
"Ensure the component JAR is on the classpath"),
Arrays.asList(
- CAMEL_MANUAL_DOC + "component.html",
- CAMEL_MANUAL_DOC +
"faq/why-is-my-message-body-empty.html")));
+ CAMEL_MANUAL_DOC + "component.html")));
exceptions.put("ResolveEndpointFailedException", new ExceptionInfo(
"Failed to resolve or create an endpoint from the given URI.
The URI syntax may be invalid or required options may be missing.",