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

davsclaus pushed a commit to branch feature/CAMEL-23789-wave2-multi-dsl-docs
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 7102b46a5929ff69e82ccc68ab5866b8486bc443
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Jun 18 12:00:28 2026 +0200

    CAMEL-23789: Add multi-DSL tabs to small and large component docs (Wave 2)
    
    Co-Authored-By: Claude <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../src/main/docs/openai-component.adoc            | 507 ++++++++++++++++++++
 .../src/main/docs/arangodb-component.adoc          |   1 -
 .../main/docs/aws2-kinesis-firehose-component.adoc |   2 +-
 .../main/docs/azure-storage-queue-component.adoc   |   1 +
 .../src/main/docs/barcode-dataformat.adoc          |   2 +-
 .../camel-bean/src/main/docs/bean-component.adoc   |   1 +
 .../src/main/docs/crypto-component.adoc            |   4 +-
 .../camel-csv/src/main/docs/csv-dataformat.adoc    |  41 +-
 .../src/main/docs/cxf-component.adoc               |  24 +-
 .../camel-ftp/src/main/docs/sftp-component.adoc    |   2 +
 .../src/main/docs/google-firestore-component.adoc  |  81 +++-
 .../src/main/docs/google-functions-component.adoc  |   2 +
 .../main/docs/google-speech-to-text-component.adoc |   2 +
 .../src/main/docs/google-storage-component.adoc    |   2 +
 .../main/docs/google-text-to-speech-component.adoc |   2 +
 .../src/main/docs/google-vision-component.adoc     |   2 +
 .../camel-grok/src/main/docs/grok-dataformat.adoc  |  31 +-
 .../main/docs/hazelcast-atomicvalue-component.adoc | 178 ++++---
 .../main/docs/hazelcast-multimap-component.adoc    | 116 +++--
 .../main/docs/hazelcast-pncounter-component.adoc   | 175 ++++---
 .../docs/hazelcast-replicatedmap-component.adoc    |  88 +++-
 .../main/docs/hazelcast-ringbuffer-component.adoc  |  23 +-
 .../src/main/docs/hazelcast-seda-component.adoc    |  60 ++-
 .../src/main/docs/kubernetes-summary.adoc          |  10 +-
 .../camel-minio/src/main/docs/minio-component.adoc |   1 +
 .../src/main/docs/netty-http-component.adoc        |   1 +
 .../src/main/docs/reactive-streams-component.adoc  |  56 +++
 .../src/main/docs/salesforce-component.adoc        |   2 +
 .../camel-seda/src/main/docs/seda-component.adoc   |   2 +
 .../src/main/docs/spring-ai-chat-component.adoc    | 521 +++++++++++++++++++++
 .../src/main/docs/spring-rabbitmq-component.adoc   |  23 +
 .../src/main/docs/spring-ws-component.adoc         | 130 +++++
 .../camel-sql/src/main/docs/sql-component.adoc     |   1 +
 33 files changed, 1857 insertions(+), 237 deletions(-)

diff --git 
a/components/camel-ai/camel-openai/src/main/docs/openai-component.adoc 
b/components/camel-ai/camel-openai/src/main/docs/openai-component.adoc
index 313dcf2a1de2..a099ef904dfc 100644
--- a/components/camel-ai/camel-openai/src/main/docs/openai-component.adoc
+++ b/components/camel-ai/camel-openai/src/main/docs/openai-component.adoc
@@ -554,6 +554,11 @@ For full schema validation, integrate with the 
`camel-json-validator` component
 === Conversation Memory (Per Exchange)
 
 .Usage example:
+
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:conversation")
@@ -565,6 +570,52 @@ from("direct:conversation")
     .log("Second response: ${body}"); // Will remember "Alice"
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:conversation"/>
+  <setBody>
+    <constant>My name is Alice</constant>
+  </setBody>
+  <to uri="openai:chat-completion?conversationMemory=true"/>
+  <log message="First response: ${body}"/>
+  <setBody>
+    <constant>What is my name?</constant>
+  </setBody>
+  <to uri="openai:chat-completion?conversationMemory=true"/>
+  <log message="Second response: ${body}"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:conversation
+      steps:
+        - setBody:
+            constant: "My name is Alice"
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              conversationMemory: true
+        - log:
+            message: "First response: ${body}"
+        - setBody:
+            constant: "What is my name?"
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              conversationMemory: true
+        - log:
+            message: "Second response: ${body}"
+----
+====
+
 == Input Handling
 
 The component accepts the following types of input in the message body:
@@ -722,6 +773,10 @@ YAML::
 
 For two-way authentication, configure both trust store and key store:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -734,10 +789,45 @@ from("direct:chat")
         + "&sslKeyPassword=keypass");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;baseUrl=https://my-llm-server:8443/v1&amp;sslTruststoreLocation=/path/to/truststore.jks&amp;sslTruststorePassword=changeit&amp;sslKeystoreLocation=/path/to/keystore.jks&amp;sslKeystorePassword=changeit&amp;sslKeyPassword=keypass"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              baseUrl: https://my-llm-server:8443/v1
+              sslTruststoreLocation: /path/to/truststore.jks
+              sslTruststorePassword: changeit
+              sslKeystoreLocation: /path/to/keystore.jks
+              sslKeystorePassword: changeit
+              sslKeyPassword: keypass
+----
+====
+
 === Disabling Hostname Verification
 
 In development or test environments, hostname verification can be disabled by 
setting `sslEndpointAlgorithm` to an empty string or `none`:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -748,6 +838,35 @@ from("direct:chat")
         + "&sslEndpointAlgorithm=none");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;baseUrl=https://localhost:8443/v1&amp;sslTruststoreLocation=/path/to/truststore.jks&amp;sslTruststorePassword=changeit&amp;sslEndpointAlgorithm=none"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              baseUrl: https://localhost:8443/v1
+              sslTruststoreLocation: /path/to/truststore.jks
+              sslTruststorePassword: changeit
+              sslEndpointAlgorithm: none
+----
+====
+
 WARNING: Disabling hostname verification is insecure and should only be used 
in non-production environments.
 
 === SSL Parameters
@@ -779,6 +898,10 @@ This is independent from the inline `<think>...</think>` 
tag stripping controlle
 * `CamelOpenAIReasoningContent` — from the API-level `reasoning_content` field
 * `CamelOpenAIThinkingContent` — from inline `<think>` tags in the `content` 
field (requires `stripThinking=true`)
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -788,6 +911,41 @@ from("direct:chat")
     .log("Thinking: ${header.CamelOpenAIThinkingContent}");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to uri="openai:chat-completion?model=qwen3&amp;stripThinking=true"/>
+  <log message="Answer: ${body}"/>
+  <log message="Reasoning: ${header.CamelOpenAIReasoningContent}"/>
+  <log message="Thinking: ${header.CamelOpenAIThinkingContent}"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: qwen3
+              stripThinking: true
+        - log:
+            message: "Answer: ${body}"
+        - log:
+            message: "Reasoning: ${header.CamelOpenAIReasoningContent}"
+        - log:
+            message: "Thinking: ${header.CamelOpenAIThinkingContent}"
+----
+====
+
 NOTE: Reasoning content extraction is supported in non-streaming mode only 
(both simple and agentic/MCP tool loop paths). Streaming responses do not 
extract reasoning content.
 
 === Mapping Additional Response Fields to Headers
@@ -796,6 +954,10 @@ The `additionalResponseHeader` option allows mapping any 
extra field from the AP
 
 The key is the field name in the API response, and the value is the Camel 
header name to set:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -805,6 +967,36 @@ from("direct:chat")
     .log("Custom reasoning: ${header.CamelMyReasoning}");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=qwen3&amp;additionalResponseHeader.reasoning_content=CamelMyReasoning&amp;additionalResponseHeader.custom_field=CamelMyCustomField"/>
+  <log message="Custom reasoning: ${header.CamelMyReasoning}"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: qwen3
+              additionalResponseHeader.reasoning_content: CamelMyReasoning
+              additionalResponseHeader.custom_field: CamelMyCustomField
+        - log:
+            message: "Custom reasoning: ${header.CamelMyReasoning}"
+----
+====
+
 String-valued fields are set directly. Non-string fields (numbers, booleans, 
objects) are converted using `toString()`.
 
 NOTE: This maps fields from the response message's additional properties 
(fields not part of the standard schema). Standard response fields like 
`content`, `role`, and `tool_calls` are not accessible through this option.
@@ -871,12 +1063,42 @@ Provider* table below).
 https://lmstudio.ai[LM Studio] serves the model currently loaded in the app. 
Set `model` to the
 identifier shown in its UI.
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
     
.to("openai:chat-completion?baseUrl=http://localhost:1234/v1&model=local-model";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?baseUrl=http://localhost:1234/v1&amp;model=local-model"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              baseUrl: http://localhost:1234/v1
+              model: local-model
+----
+====
+
 === vLLM (self-hosted)
 
 https://docs.vllm.ai[vLLM] is a high-throughput LLM serving engine. Install it 
with `pip install vllm`
@@ -887,6 +1109,10 @@ and start the model used in the example below:
 vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000
 ----
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -894,6 +1120,32 @@ from("direct:chat")
         + "&model=meta-llama/Llama-3.1-8B-Instruct");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?baseUrl=http://localhost:8000/v1&amp;model=meta-llama/Llama-3.1-8B-Instruct"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              baseUrl: http://localhost:8000/v1
+              model: meta-llama/Llama-3.1-8B-Instruct
+----
+====
+
 If vLLM was started with `--api-key`, pass the same value via the `apiKey` 
option.
 
 On Apple Silicon, the `vllm-mlx` variant uses Apple's MLX framework and runs 
the same way:
@@ -908,6 +1160,10 @@ vllm-mlx serve mlx-community/Qwen2.5-7B-Instruct-4bit 
--port 8000
 https://openrouter.ai[OpenRouter] is an OpenAI-compatible gateway that routes 
requests across many
 model providers. Set `baseUrl` to its endpoint and select a model with a 
cross-provider identifier:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -916,6 +1172,33 @@ from("direct:chat")
         + "&model=anthropic/claude-sonnet-4-20250514");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?baseUrl=https://openrouter.ai/api/v1&amp;apiKey={{openrouter.api.key}}&amp;model=anthropic/claude-sonnet-4-20250514"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              baseUrl: https://openrouter.ai/api/v1
+              apiKey: "{{openrouter.api.key}}"
+              model: anthropic/claude-sonnet-4-20250514
+----
+====
+
 ==== Provider Routing
 
 OpenRouter accepts a `provider` object in the request body to control routing 
order and fallbacks.
@@ -1216,6 +1499,11 @@ The audio transcription operation works with any 
OpenAI-compatible server that i
 * https://github.com/ml-explore/mlx-audio[MLX Audio] — `python3 -m 
mlx_audio.server --host 127.0.0.1 --port 8003`
 
 .Example using MLX Audio for local transcription:
+
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:transcribe")
@@ -1223,6 +1511,32 @@ from("direct:transcribe")
         + "&baseUrl=http://localhost:8003/v1";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:transcribe"/>
+  <to 
uri="openai:audio-transcription?audioModel=mlx-community/whisper-large-v3-turbo&amp;baseUrl=http://localhost:8003/v1"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:transcribe
+      steps:
+        - to:
+            uri: openai:audio-transcription
+            parameters:
+              audioModel: mlx-community/whisper-large-v3-turbo
+              baseUrl: http://localhost:8003/v1
+----
+====
+
 [NOTE]
 ====
 Some local servers require the model parameter to be a path (e.g., 
`./models/granite-speech-4.1-2b-8bit`). Refer to your server's documentation 
for the expected model identifier format.
@@ -1238,6 +1552,10 @@ MCP servers are configured inline on the endpoint URI 
using the `mcpServer.` pre
 
 ==== Streamable HTTP Transport
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1246,8 +1564,39 @@ from("direct:chat")
         + "&mcpServer.api.url=http://localhost:9090/mcp";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;mcpServer.api.transportType=streamableHttp&amp;mcpServer.api.url=http://localhost:9090/mcp"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              mcpServer.api.transportType: streamableHttp
+              mcpServer.api.url: http://localhost:9090/mcp
+----
+====
+
 ==== SSE Transport (Deprecated)
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1256,8 +1605,39 @@ from("direct:chat")
         + "&mcpServer.weather.url=http://localhost:8080";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;mcpServer.weather.transportType=sse&amp;mcpServer.weather.url=http://localhost:8080"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              mcpServer.weather.transportType: sse
+              mcpServer.weather.url: http://localhost:8080
+----
+====
+
 ==== Stdio Transport
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1267,6 +1647,34 @@ from("direct:chat")
         + 
"&mcpServer.fs.args=-y,@modelcontextprotocol/server-filesystem,/tmp");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;mcpServer.fs.transportType=stdio&amp;mcpServer.fs.command=npx&amp;mcpServer.fs.args=-y,@modelcontextprotocol/server-filesystem,/tmp"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              mcpServer.fs.transportType: stdio
+              mcpServer.fs.command: npx
+              mcpServer.fs.args: 
"-y,@modelcontextprotocol/server-filesystem,/tmp"
+----
+====
+
 ==== Multiple MCP Servers
 
 Multiple servers can be configured on the same endpoint. Tools from all 
servers are merged and made available to the model:
@@ -1320,6 +1728,10 @@ The `maxToolIterations` option (default: 50) prevents 
infinite loops. If exceede
 
 Set `autoToolExecution=false` to disable the agentic loop and receive raw tool 
calls in the message body instead:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1330,6 +1742,37 @@ from("direct:chat")
     .log("Tool calls: ${body}"); // body is the raw tool calls list
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;autoToolExecution=false&amp;mcpServer.api.transportType=streamableHttp&amp;mcpServer.api.url=http://localhost:9090/mcp"/>
+  <log message="Tool calls: ${body}"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              autoToolExecution: false
+              mcpServer.api.transportType: streamableHttp
+              mcpServer.api.url: http://localhost:9090/mcp
+        - log:
+            message: "Tool calls: ${body}"
+----
+====
+
 === Manual Tool Loop with `tool-execution` Operation
 
 When `autoToolExecution=false`, you can implement your own tool loop using the 
`openai:tool-execution` operation and Camel's `loopDoWhile` EIP. This gives you 
full control to add logging, filtering, retry logic, or custom routing between 
tool calls — without writing any Java code.
@@ -1513,6 +1956,10 @@ NOTE: When `systemMessage` is set and 
`conversationMemory` is enabled, the conve
 
 When using the Streamable HTTP transport, the component advertises MCP 
protocol versions during initialization. By default, the SDK's built-in 
versions are used. If your MCP server does not support the latest protocol 
version, you can restrict the advertised versions:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1522,6 +1969,34 @@ from("direct:chat")
         + "&mcpProtocolVersions=2024-11-05,2025-03-26,2025-06-18");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;mcpServer.api.transportType=streamableHttp&amp;mcpServer.api.url=http://localhost:9090/mcp&amp;mcpProtocolVersions=2024-11-05,2025-03-26,2025-06-18"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              mcpServer.api.transportType: streamableHttp
+              mcpServer.api.url: http://localhost:9090/mcp
+              mcpProtocolVersions: "2024-11-05,2025-03-26,2025-06-18"
+----
+====
+
 === MCP Connection Recovery
 
 When `mcpReconnect=true` (the default), the component automatically recovers 
from MCP server connection failures. If a tool call fails with a transport 
error, the component:
@@ -1535,6 +2010,10 @@ This handles scenarios where an MCP server restarts, a 
network connection drops,
 
 Set `mcpReconnect=false` to disable automatic recovery:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -1544,6 +2023,34 @@ from("direct:chat")
         + "&mcpServer.api.url=http://localhost:9090/mcp";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="openai:chat-completion?model=gpt-4&amp;mcpReconnect=false&amp;mcpServer.api.transportType=streamableHttp&amp;mcpServer.api.url=http://localhost:9090/mcp"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: openai:chat-completion
+            parameters:
+              model: gpt-4
+              mcpReconnect: false
+              mcpServer.api.transportType: streamableHttp
+              mcpServer.api.url: http://localhost:9090/mcp
+----
+====
+
 === Error Handling in the Agentic Loop
 
 [cols="1,3"]
diff --git a/components/camel-arangodb/src/main/docs/arangodb-component.adoc 
b/components/camel-arangodb/src/main/docs/arangodb-component.adoc
index 43abeee79063..d549b0ee27bf 100644
--- a/components/camel-arangodb/src/main/docs/arangodb-component.adoc
+++ b/components/camel-arangodb/src/main/docs/arangodb-component.adoc
@@ -32,7 +32,6 @@ for this component:
 
 == URI format
 
-[source,java]
 ----
 arangodb:database[?options]
 ----
diff --git 
a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
 
b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
index 9e7802fdeb28..4a53db61ca97 100644
--- 
a/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
+++ 
b/components/camel-aws/camel-aws2-kinesis/src/main/docs/aws2-kinesis-firehose-component.adoc
@@ -25,7 +25,7 @@ at https://aws.amazon.com/kinesis/firehose/[AWS Kinesis 
Firehose]
 
 == URI Format
 
-[source,java]
+[source,text]
 ----
 aws2-kinesis-firehose://delivery-stream-name[?options]
 ----
diff --git 
a/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
 
b/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
index 310d4d12a954..c0077e850ff6 100644
--- 
a/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
+++ 
b/components/camel-azure/camel-azure-storage-queue/src/main/docs/azure-storage-queue-component.adoc
@@ -116,6 +116,7 @@ If your Camel Application is running behind a firewall or 
if you need to
 have more control over the `QueueServiceClient` instance configuration, you can
 create your own instance:
 
+._Java-only: programmatic Azure SDK client configuration_
 [source,java]
 ----
 StorageSharedKeyCredential credential = new 
StorageSharedKeyCredential("yourAccountName", "yourAccessKey");
diff --git a/components/camel-barcode/src/main/docs/barcode-dataformat.adoc 
b/components/camel-barcode/src/main/docs/barcode-dataformat.adoc
index 6305dbed2bf1..6e0cebc7fb45 100644
--- a/components/camel-barcode/src/main/docs/barcode-dataformat.adoc
+++ b/components/camel-barcode/src/main/docs/barcode-dataformat.adoc
@@ -26,7 +26,7 @@ If you use maven, you could just add the following to your 
pom.xml,
 substituting the version number for the latest & greatest release (see
 the download page for the latest versions).
 
-[source,java]
+[source,xml]
 ----
 <dependency>
   <groupId>org.apache.camel</groupId>
diff --git a/components/camel-bean/src/main/docs/bean-component.adoc 
b/components/camel-bean/src/main/docs/bean-component.adoc
index ad7bdc23ad46..63c30001b2b0 100644
--- a/components/camel-bean/src/main/docs/bean-component.adoc
+++ b/components/camel-bean/src/main/docs/bean-component.adoc
@@ -39,6 +39,7 @@ Endpoint to the bean endpoint as output, such as the *direct* 
endpoint as input.
 
 Suppose you have the following POJO class to be used by Camel
 
+._Java-only: POJO bean class used by the route_
 [source,java]
 ----
 package com.foo;
diff --git a/components/camel-crypto/src/main/docs/crypto-component.adoc 
b/components/camel-crypto/src/main/docs/crypto-component.adoc
index 5cecd3be53df..6f2f579a7512 100644
--- a/components/camel-crypto/src/main/docs/crypto-component.adoc
+++ b/components/camel-crypto/src/main/docs/crypto-component.adoc
@@ -194,11 +194,12 @@ YAML::
 
 The following code shows how to load the keystore created using the above 
`keytool` command and bind it into the registry with the name `myKeystore` for 
use in the above route. The example makes use of the `@Configuration` and 
`@BindToRegistry` annotations introduced in Camel 3 to instantiate the KeyStore 
and register it with the name `myKeyStore`.
 
+._Java-only: KeyStore bean configuration with `@BindToRegistry`_
 [source,java]
 ----
 @Configuration
 public class KeystoreConfig {
-    
+
     @BindToRegistry
     public KeyStore myKeystore() throws Exception {
         KeyStore store = KeyStore.getInstance("JKS");
@@ -342,6 +343,7 @@ Add the Bouncy Castle provider dependencies to your project:
 
 Register the Bouncy Castle provider at application startup:
 
+._Java-only: static provider registration_
 [source,java]
 ----
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
diff --git a/components/camel-csv/src/main/docs/csv-dataformat.adoc 
b/components/camel-csv/src/main/docs/csv-dataformat.adoc
index 3ee3b6950e74..86e8c07fd358 100644
--- a/components/camel-csv/src/main/docs/csv-dataformat.adoc
+++ b/components/camel-csv/src/main/docs/csv-dataformat.adoc
@@ -202,16 +202,49 @@ public void doHandleCsvData(List<List<String>> csvData)
 
 ... your route then looks as follows
 
+[tabs]
+====
+Java::
++
+[source,java]
+----
+from("file:///some/path/to/pickup/csvfiles?delete=true&delay=10000")
+    .unmarshal().csv()
+    .to("bean:myCsvHandler?method=doHandleCsvData");
+----
+
+XML::
++
 [source,xml]
 ----
 <route>
-        <!-- poll every 10 seconds -->
-        <from 
uri="file:///some/path/to/pickup/csvfiles?delete=true&amp;delay=10000" />
-        <unmarshal><csv /></unmarshal>
-        <to uri="bean:myCsvHandler?method=doHandleCsvData" />
+  <!-- poll every 10 seconds -->
+  <from 
uri="file:///some/path/to/pickup/csvfiles?delete=true&amp;delay=10000"/>
+  <unmarshal><csv/></unmarshal>
+  <to uri="bean:myCsvHandler?method=doHandleCsvData"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: file:///some/path/to/pickup/csvfiles
+      parameters:
+        delete: true
+        delay: 10000
+      steps:
+        - unmarshal:
+            csv: {}
+        - to:
+            uri: bean:myCsvHandler
+            parameters:
+              method: doHandleCsvData
+----
+====
+
 === Marshaling with a pipe as delimiter
 Considering the following body:
 
diff --git 
a/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc 
b/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc
index 00b044e2a750..2856107081e9 100644
--- a/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc
+++ b/components/camel-cxf/camel-cxf-soap/src/main/docs/cxf-component.adoc
@@ -225,10 +225,7 @@ is removed in `RAW` mode), you have to configure
 `LoggingOutInterceptor` to be run during the `WRITE` phase. The
 following is an example.
 
-[tabs]
-====
-Java (Quarkus)::
-+
+._Java-only: configuring `LoggingOutInterceptor` in the WRITE phase for RAW 
mode_
 [source,java]
 ----
 import java.util.List;
@@ -256,8 +253,8 @@ CxfEndpoint soapMtomEnabledServerPayloadModeEndpoint() {
 }
 ----
 
-XML (Spring)::
-+
+The same configuration in Spring XML:
+
 [source,xml]
 ----
 <bean id="loggingOutInterceptor" 
class="org.apache.cxf.interceptor.LoggingOutInterceptor">
@@ -275,7 +272,6 @@ XML (Spring)::
     </cxf:properties>
 </cxf:cxfEndpoint>
 ----
-====
 
 === Description of CxfHeaderFilterStrategy options
 
@@ -411,6 +407,7 @@ Error:sendSms: SoapFault exception: [Client] looks like we 
got no XML document i
 To resolve this issue, you need to tell `StaxOutInterceptor` to
 write the XML start document for you, as in the 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/WriteXmlDeclarationInterceptor.java[WriteXmlDeclarationInterceptor]
 below:
 
+._Java-only: CXF interceptor to force XML declaration in response_
 [source,java]
 ----
 public class WriteXmlDeclarationInterceptor extends 
AbstractPhaseInterceptor<SoapMessage> {
@@ -428,6 +425,7 @@ public class WriteXmlDeclarationInterceptor extends 
AbstractPhaseInterceptor<Soa
 
 As an alternative, you can add a message header for it as demonstrated in 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerTest.java#L62[CxfConsumerTest]:
 
+._Java-only: forcing XML declaration via response context header_
 [source,java]
 ----
  // set up the response context which force start document
@@ -580,7 +578,7 @@ operation parameters.
 
 Having simple java web service interface:
 
-
+._Java-only: JAX-WS web service interface definition_
 [source,java]
 ----
 package org.apache.camel.component.cxf.soap.server;
@@ -633,6 +631,7 @@ list.
 If you want to get the object array from the message body, you can get
 the body using `message.getBody(Object[].class)`, as shown in 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfProducerRouterTest.java#L117[CxfProducerRouterTest.testInvokingSimpleServerWithParams]:
 
+._Java-only: preparing and sending a POJO mode request with `ProducerTemplate`_
 [source,java]
 ----
 Exchange senderExchange = new DefaultExchange(context, ExchangePattern.InOut);
@@ -666,6 +665,7 @@ for SOAP message headers and the SOAP body.
 
 See 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfConsumerPayloadTest.java#L68[CxfConsumerPayloadTest]:
 
+._Java-only: consuming and processing CXF PAYLOAD with `CxfPayload` API_
 [source,java]
 ----
 protected RouteBuilder createRouteBuilder() {
@@ -777,6 +777,7 @@ The only difference between the two processors is setting 
the direction of the i
 
 You can find the `InsertResponseOutHeaderProcessor` example in 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-spring-soap/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java#L731[CxfMessageHeadersRelayTest]:
 
+._Java-only: Processor that inserts an out-of-band SOAP header into the 
response_
 [source,java]
 ----
 public static class InsertResponseOutHeaderProcessor implements Processor {
@@ -812,6 +813,7 @@ headers).
 
 For example, see 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfPayLoadSoapHeaderTest.java#L53[CxfPayLoadSoapHeaderTest]:
 
+._Java-only: accessing SOAP headers from `CxfPayload` in PAYLOAD mode_
 [source,java]
 ----
 from(getRouterEndpointURI()).process(new Processor() {
@@ -869,6 +871,7 @@ may need to throw the SOAP Fault from the camel context. +
 `POJO`, `PAYLOAD` and `RAW` data format. +
  You can define the soap fault as shown in 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-soap/src/test/java/org/apache/camel/component/cxf/jaxws/CxfCustomizedExceptionTest.java#L65[CxfCustomizedExceptionTest]:
 
+._Java-only: creating a `SoapFault` with detail text_
 [source,java]
 ----
 SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT);
@@ -880,6 +883,7 @@ detail.appendChild(tn);
 
 Then throw it as you like:
 
+._Java-only: setting a SOAP fault on the route using `setFaultBody`_
 [source,java]
 ----
 from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
@@ -912,6 +916,7 @@ If you are using a Camel CXF endpoint producer to
 invoke the outside web service, you can set the request context and get
 response context with the following code:
 
+._Java-only: setting request context and reading response context via 
`ProducerTemplate`_
 [source,java]
 ----
 CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(), new 
Processor() {
@@ -947,6 +952,7 @@ Since attachments are marshalled and unmarshalled into 
POJOs, the attachments sh
 retrieved from the Apache Camel message body (as a parameter list), and it 
isn't
 possible to retrieve attachments by Camel Message API
 
+._Java-only: retrieving an attachment by ID from the exchange_
 [source,java]
 ----
 DataHandler handler = 
Exchange.getIn(AttachmentMessage.class).getAttachment("id");
@@ -1020,6 +1026,7 @@ XML (Spring)::
 
 You can produce a Camel message with attachment to send to a CXF endpoint in 
Payload mode.
 
+._Java-only: sending and receiving MTOM attachments via `ProducerTemplate`_
 [source,java]
 ----
 Exchange exchange = 
context.createProducerTemplate().send("direct:testEndpoint", new Processor() {
@@ -1075,6 +1082,7 @@ assertEquals(300, image.getHeight());
 You can also consume a Camel message received from a CXF endpoint in Payload 
mode.
 The 
https://github.com/apache/camel/blob/main/components/camel-cxf/camel-cxf-spring-soap/src/test/java/org/apache/camel/component/cxf/mtom/CxfMtomConsumerPayloadModeTest.java#L97[CxfMtomConsumerPayloadModeTest]
 illustrates how this works:
 
+._Java-only: Processor that verifies and responds to MTOM requests_
 [source,java]
 ----
 public static class MyProcessor implements Processor {
diff --git a/components/camel-ftp/src/main/docs/sftp-component.adoc 
b/components/camel-ftp/src/main/docs/sftp-component.adoc
index 32dd424fad36..fbaa9566ba62 100644
--- a/components/camel-ftp/src/main/docs/sftp-component.adoc
+++ b/components/camel-ftp/src/main/docs/sftp-component.adoc
@@ -46,6 +46,7 @@ WARNING: By default, the SFTP component has 
`strictHostKeyChecking=no`, which di
 
 You can configure host key verification settings globally on the SFTP 
component, which will apply to all SFTP endpoints unless overridden at the 
endpoint level:
 
+._Java-only: programmatic `SftpComponent` configuration via `CamelContext`_
 [source,java]
 ----
 // Configure component for all SFTP endpoints
@@ -295,6 +296,7 @@ If you need to control the CA signature algorithms that 
JSch will accept, use th
 
 As of Camel 3.17.0, key types and algorithms that use SHA1 have been 
deprecated. These can be restored, if necessary, by setting JSch configuration 
directly. E.g.:
 
+._Java-only: restoring deprecated JSch key types and algorithms_
 [source,java]
 ----
 JSch.setConfig("server_host_key",  JSch.getConfig("server_host_key") + 
",ssh-rsa");
diff --git 
a/components/camel-google/camel-google-firestore/src/main/docs/google-firestore-component.adoc
 
b/components/camel-google/camel-google-firestore/src/main/docs/google-firestore-component.adoc
index 39c4f7c542b0..f4299bc056a9 100644
--- 
a/components/camel-google/camel-google-firestore/src/main/docs/google-firestore-component.adoc
+++ 
b/components/camel-google/camel-google-firestore/src/main/docs/google-firestore-component.adoc
@@ -43,6 +43,8 @@ For more information, please refer to 
https://cloud.google.com/firestore/docs/qu
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-firestore://myCollection?serviceAccountKey=/home/user/Downloads/my-key.json&projectId=my-project";
@@ -950,6 +952,8 @@ For write operations (`setDocument`, `createDocument`, 
`updateDocument`), the co
 
 You can send a JSON string directly as the message body. The component will 
automatically parse it:
 
+._Java-only: JSON string input with text blocks_
+
 [source,java]
 ----
 // Simple JSON
@@ -981,25 +985,98 @@ from("direct:start")
 
 ==== Reading JSON from Files
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
-// Read JSON files and store in Firestore
 from("file:data/users?noop=true&include=.*\\.json")
     .setHeader("CamelGoogleFirestoreDocumentId", simple("${file:name.noext}"))
     .to("google-firestore://users?operation=setDocument")
     .log("Imported: ${file:name}");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="file:data/users?noop=true&amp;include=.*\.json"/>
+  <setHeader name="CamelGoogleFirestoreDocumentId">
+    <simple>${file:name.noext}</simple>
+  </setHeader>
+  <to uri="google-firestore://users?operation=setDocument"/>
+  <log message="Imported: ${file:name}"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: file:data/users
+      parameters:
+        noop: true
+        include: ".*\\.json"
+      steps:
+        - setHeader:
+            name: CamelGoogleFirestoreDocumentId
+            simple: "${file:name.noext}"
+        - to:
+            uri: google-firestore://users
+            parameters:
+              operation: setDocument
+        - log:
+            message: "Imported: ${file:name}"
+----
+====
+
 ==== REST API Integration
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
-// Receive JSON from REST endpoint and store in Firestore
 from("rest:post:/api/users")
     .to("google-firestore://users?operation=createDocument")
     .setBody(simple("{\"id\": 
\"${header.CamelGoogleFirestoreResponseDocumentId}\"}"));
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="rest:post:/api/users"/>
+  <to uri="google-firestore://users?operation=createDocument"/>
+  <setBody>
+    <simple>{"id": "${header.CamelGoogleFirestoreResponseDocumentId}"}</simple>
+  </setBody>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: rest:post:/api/users
+      steps:
+        - to:
+            uri: google-firestore://users
+            parameters:
+              operation: createDocument
+        - setBody:
+            simple: '{"id": 
"${header.CamelGoogleFirestoreResponseDocumentId}"}'
+----
+====
+
 === Supported Firestore Data Types
 
 The following Java types are automatically converted to Firestore data types:
diff --git 
a/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
 
b/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
index c9c5cb5f9dc7..351729c08636 100644
--- 
a/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
+++ 
b/components/camel-google/camel-google-functions/src/main/docs/google-functions-component.adoc
@@ -42,6 +42,8 @@ For more information, please refer to 
https://github.com/googleapis/google-cloud
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-functions://myCamelFunction?serviceAccountKey=/home/user/Downloads/my-key.json";
diff --git 
a/components/camel-google/camel-google-speech-to-text/src/main/docs/google-speech-to-text-component.adoc
 
b/components/camel-google/camel-google-speech-to-text/src/main/docs/google-speech-to-text-component.adoc
index a42ce8b8ac2c..14fbe59d5307 100644
--- 
a/components/camel-google/camel-google-speech-to-text/src/main/docs/google-speech-to-text-component.adoc
+++ 
b/components/camel-google/camel-google-speech-to-text/src/main/docs/google-speech-to-text-component.adoc
@@ -41,6 +41,8 @@ For more information, please refer to 
https://github.com/googleapis/google-cloud
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-speech-to-text://recognize?serviceAccountKey=/home/user/Downloads/my-key.json";
diff --git 
a/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
 
b/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
index dd0e96351cd4..96c4463960de 100644
--- 
a/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
+++ 
b/components/camel-google/camel-google-storage/src/main/docs/google-storage-component.adoc
@@ -41,6 +41,8 @@ For more information, please refer to 
https://cloud.google.com/storage/docs/refe
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-storage://myCamelBucket?serviceAccountKey=/home/user/Downloads/my-key.json";
diff --git 
a/components/camel-google/camel-google-text-to-speech/src/main/docs/google-text-to-speech-component.adoc
 
b/components/camel-google/camel-google-text-to-speech/src/main/docs/google-text-to-speech-component.adoc
index cec136eb76d5..2ee5c0d92b94 100644
--- 
a/components/camel-google/camel-google-text-to-speech/src/main/docs/google-text-to-speech-component.adoc
+++ 
b/components/camel-google/camel-google-text-to-speech/src/main/docs/google-text-to-speech-component.adoc
@@ -41,6 +41,8 @@ For more information, please refer to 
https://github.com/googleapis/google-cloud
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-text-to-speech://synthesize?serviceAccountKey=/home/user/Downloads/my-key.json";
diff --git 
a/components/camel-google/camel-google-vision/src/main/docs/google-vision-component.adoc
 
b/components/camel-google/camel-google-vision/src/main/docs/google-vision-component.adoc
index 8b4a167fb762..dc9334eda68f 100644
--- 
a/components/camel-google/camel-google-vision/src/main/docs/google-vision-component.adoc
+++ 
b/components/camel-google/camel-google-vision/src/main/docs/google-vision-component.adoc
@@ -41,6 +41,8 @@ For more information, please refer to 
https://github.com/googleapis/google-cloud
 When you have the **service account key**, you can provide authentication 
credentials to your application code.
 Google security credentials can be set through the component endpoint:
 
+._Java-only: constructing the endpoint URI programmatically_
+
 [source,java]
 ----
 String endpoint = 
"google-vision://labelDetection?serviceAccountKey=/home/user/Downloads/my-key.json";
diff --git a/components/camel-grok/src/main/docs/grok-dataformat.adoc 
b/components/camel-grok/src/main/docs/grok-dataformat.adoc
index 1c6abedf63b8..113da6f8df52 100644
--- a/components/camel-grok/src/main/docs/grok-dataformat.adoc
+++ b/components/camel-grok/src/main/docs/grok-dataformat.adoc
@@ -132,13 +132,9 @@ All 
https://github.com/thekrakken/java-grok/tree/master/src/main/resources/patte
 Camel Grok DataFormat supports plugable patterns, which are auto loaded from 
Camel Registry.
 You can register patterns with Java DSL and Spring DSL:
 
-[tabs]
-====
-
-Java DSL::
-+
+._Java-only: registering a custom Grok pattern in a `RouteBuilder`_
 [source,java]
---------------------------------------------------------------------------------
+----
 public class MyRouteBuilder extends RouteBuilder {
 
     @Override
@@ -150,30 +146,19 @@ public class MyRouteBuilder extends RouteBuilder {
             .to("log:out");
     }
 }
---------------------------------------------------------------------------------
+----
+
+In Spring XML, you register the custom pattern as a bean:
 
-Spring XML::
-+
 [source,xml]
---------------------------------------------------------------------------------
+----
 <beans>
     <bean id="myCustomPatternBean" 
class="org.apache.camel.component.grok.GrokPattern">
         <constructor-arg value="FOOBAR"/>
         <constructor-arg value="foo|bar"/>
     </bean>
-<beans>
-<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring";>
-    <route>
-        <from uri="direct:in"/>
-        <unmarshal>
-            <grok pattern="%{FOOBAR:fooBar}"/>
-        </unmarshal>
-        <to uri="log:out"/>
-    </route>
-</camelContext>
---------------------------------------------------------------------------------
-
-====
+</beans>
+----
 
 == Grok Data format Options
 
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-atomicvalue-component.adoc 
b/components/camel-hazelcast/src/main/docs/hazelcast-atomicvalue-component.adoc
index d5d45c1faa03..e94c5c2a444d 100644
--- 
a/components/camel-hazelcast/src/main/docs/hazelcast-atomicvalue-component.adoc
+++ 
b/components/camel-hazelcast/src/main/docs/hazelcast-atomicvalue-component.adoc
@@ -51,29 +51,42 @@ The operations for this producer are:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
------------------------------------------------------------------------------------------
+----
 from("direct:set")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.SET_VALUE))
-.toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
------------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.SET_VALUE))
+    .toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:set" />
+    <from uri="direct:set"/>
     <setHeader name="hazelcast.operation.type">
         <constant>setvalue</constant>
     </setHeader>
-    <to uri="hazelcast-atomicvalue:foo" />
+    <to uri="hazelcast-atomicvalue:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:set
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: setvalue
+        - to:
+            uri: hazelcast-atomicvalue:foo
+----
 ====
 
 Provide the value to set inside the message body (here the value is 10):
@@ -83,29 +96,42 @@ Provide the value to set inside the message body (here the 
value is 10):
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------
+----
 from("direct:get")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
-.toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
-------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
+    .toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:get" />
+    <from uri="direct:get"/>
     <setHeader name="hazelcast.operation.type">
         <constant>get</constant>
     </setHeader>
-    <to uri="hazelcast-atomicvalue:foo" />
+    <to uri="hazelcast-atomicvalue:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:get
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: get
+        - to:
+            uri: hazelcast-atomicvalue:foo
+----
 ====
 
 You can get the number with
@@ -115,30 +141,42 @@ You can get the number with
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
-
 [source,java]
-------------------------------------------------------------------------------------------
+----
 from("direct:increment")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.INCREMENT))
-.toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
-------------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.INCREMENT))
+    .toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:increment" />
+    <from uri="direct:increment"/>
     <setHeader name="hazelcast.operation.type">
         <constant>increment</constant>
     </setHeader>
-    <to uri="hazelcast-atomicvalue:foo" />
+    <to uri="hazelcast-atomicvalue:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:increment
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: increment
+        - to:
+            uri: hazelcast-atomicvalue:foo
+----
 ====
 
 The actual value (after increment) will be provided inside the message
@@ -148,30 +186,42 @@ body.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
-
 [source,java]
-------------------------------------------------------------------------------------------
+----
 from("direct:decrement")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DECREMENT))
-.toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
-------------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DECREMENT))
+    .toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:decrement" />
+    <from uri="direct:decrement"/>
     <setHeader name="hazelcast.operation.type">
         <constant>decrement</constant>
     </setHeader>
-    <to uri="hazelcast-atomicvalue:foo" />
+    <to uri="hazelcast-atomicvalue:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:decrement
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: decrement
+        - to:
+            uri: hazelcast-atomicvalue:foo
+----
 ====
 
 The actual value (after decrement) will be provided inside the message
@@ -181,30 +231,42 @@ body.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
-
 [source,java]
-----------------------------------------------------------------------------------------
+----
 from("direct:destroy")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.DESTROY))
-.toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
-----------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DESTROY))
+    .toF("hazelcast-%sfoo", HazelcastConstants.ATOMICNUMBER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:destroy" />
+    <from uri="direct:destroy"/>
     <setHeader name="hazelcast.operation.type">
         <constant>destroy</constant>
     </setHeader>
-    <to uri="hazelcast-atomicvalue:foo" />
+    <to uri="hazelcast-atomicvalue:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:destroy
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: destroy
+        - to:
+            uri: hazelcast-atomicvalue:foo
+----
 ====
 
 include::spring-boot:partial$starter.adoc[]
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-multimap-component.adoc 
b/components/camel-hazelcast/src/main/docs/hazelcast-multimap-component.adoc
index 52a1daf52498..362b12392c02 100644
--- a/components/camel-hazelcast/src/main/docs/hazelcast-multimap-component.adoc
+++ b/components/camel-hazelcast/src/main/docs/hazelcast-multimap-component.adoc
@@ -46,61 +46,86 @@ The  multimap producer provides eight operations:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:put")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.PUT))
-.to(String.format("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX));
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.PUT))
+    .to(String.format("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX));
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:put" />
+    <from uri="direct:put"/>
     <log message="put.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>put</constant>
     </setHeader>
-    <to uri="hazelcast-multimap:foo" />
+    <to uri="hazelcast-multimap:foo"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:put
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: put
+        - to:
+            uri: hazelcast-multimap:foo
+----
 ====
 
 === Example for *removevalue*:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
-
 [source,java]
 ----
 from("direct:removevalue")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.REMOVE_VALUE))
-.toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX);
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.REMOVE_VALUE))
+    .toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX);
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:removevalue" />
+    <from uri="direct:removevalue"/>
     <log message="removevalue..."/>
     <setHeader name="hazelcast.operation.type">
         <constant>removevalue</constant>
     </setHeader>
-    <to uri="hazelcast-multimap:foo" />
+    <to uri="hazelcast-multimap:foo"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:removevalue
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: removevalue
+        - to:
+            uri: hazelcast-multimap:foo
+----
 ====
 
 To remove a value you have to provide the value you want to remove
@@ -112,66 +137,95 @@ inside the message body to remove the `my-foo` value.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:get")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
-.toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX)
-.to("seda:out");
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
+    .toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX)
+    .to("seda:out");
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:get" />
+    <from uri="direct:get"/>
     <log message="get.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>get</constant>
     </setHeader>
-    <to uri="hazelcast-multimap:foo" />
-    <to uri="seda:out" />
+    <to uri="hazelcast-multimap:foo"/>
+    <to uri="seda:out"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:get
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: get
+        - to:
+            uri: hazelcast-multimap:foo
+        - to:
+            uri: seda:out
+----
 ====
 
 === Example for *delete*:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:delete")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.DELETE))
-.toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX);
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DELETE))
+    .toF("hazelcast-%sbar", HazelcastConstants.MULTIMAP_PREFIX);
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:delete" />
+    <from uri="direct:delete"/>
     <log message="delete.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>delete</constant>
     </setHeader>
-    <to uri="hazelcast-multimap:foo" />
+    <to uri="hazelcast-multimap:foo"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:delete
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: delete
+        - to:
+            uri: hazelcast-multimap:foo
+----
 ====
 
 You can call them in your test class with:
 
+._Java-only: uses ProducerTemplate API and Java constants_
 [source,java]
 ----
 template.sendBodyAndHeader("direct:[put|get|removevalue|delete]", "my-foo", 
HazelcastConstants.OBJECT_ID, "4711");
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-pncounter-component.adoc 
b/components/camel-hazelcast/src/main/docs/hazelcast-pncounter-component.adoc
index 47e9401f0d93..42a569966072 100644
--- 
a/components/camel-hazelcast/src/main/docs/hazelcast-pncounter-component.adoc
+++ 
b/components/camel-hazelcast/src/main/docs/hazelcast-pncounter-component.adoc
@@ -44,29 +44,42 @@ NOTE: PNCounter is a CRDT (Conflict-free Replicated Data 
Type) that provides eve
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------------
+----
 from("direct:increment")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.INCREMENT))
-.toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
-------------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.INCREMENT))
+    .toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:increment" />
+    <from uri="direct:increment"/>
     <setHeader name="hazelcast.operation.type">
         <constant>increment</constant>
     </setHeader>
-    <to uri="hazelcast-pncounter:foo" />
+    <to uri="hazelcast-pncounter:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:increment
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: increment
+        - to:
+            uri: hazelcast-pncounter:foo
+----
 ====
 
 The actual value (after increment) will be provided inside the message body.
@@ -75,29 +88,42 @@ The actual value (after increment) will be provided inside 
the message body.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------------
+----
 from("direct:decrement")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DECREMENT))
-.toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
-------------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DECREMENT))
+    .toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:decrement" />
+    <from uri="direct:decrement"/>
     <setHeader name="hazelcast.operation.type">
         <constant>decrement</constant>
     </setHeader>
-    <to uri="hazelcast-pncounter:foo" />
+    <to uri="hazelcast-pncounter:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:decrement
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: decrement
+        - to:
+            uri: hazelcast-pncounter:foo
+----
 ====
 
 The actual value (after decrement) will be provided inside the message body.
@@ -106,29 +132,42 @@ The actual value (after decrement) will be provided 
inside the message body.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------
+----
 from("direct:get")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
-.toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
-------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
+    .toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:get" />
+    <from uri="direct:get"/>
     <setHeader name="hazelcast.operation.type">
         <constant>get</constant>
     </setHeader>
-    <to uri="hazelcast-pncounter:foo" />
+    <to uri="hazelcast-pncounter:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:get
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: get
+        - to:
+            uri: hazelcast-pncounter:foo
+----
 ====
 
 You can get the counter value with
@@ -138,29 +177,42 @@ You can get the counter value with
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------
+----
 from("direct:getAndAdd")
-.setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.GET_AND_ADD))
-.toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
-------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.GET_AND_ADD))
+    .toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:getAndAdd" />
+    <from uri="direct:getAndAdd"/>
     <setHeader name="hazelcast.operation.type">
         <constant>getAndAdd</constant>
     </setHeader>
-    <to uri="hazelcast-pncounter:foo" />
+    <to uri="hazelcast-pncounter:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:getAndAdd
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: getAndAdd
+        - to:
+            uri: hazelcast-pncounter:foo
+----
 ====
 
 Provide the delta value in the message body (e.g., 5 to add 5 to the counter):
@@ -172,29 +224,42 @@ The previous value (before the add) will be returned in 
the message body.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
-------------------------------------------------------------------------------------
+----
 from("direct:destroy")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.DESTROY))
-.toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
-------------------------------------------------------------------------------------
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DESTROY))
+    .toF("hazelcast-%sfoo", HazelcastConstants.PNCOUNTER_PREFIX);
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------------------------------------------------------------------
+----
 <route>
-    <from uri="direct:destroy" />
+    <from uri="direct:destroy"/>
     <setHeader name="hazelcast.operation.type">
         <constant>destroy</constant>
     </setHeader>
-    <to uri="hazelcast-pncounter:foo" />
+    <to uri="hazelcast-pncounter:foo"/>
 </route>
------------------------------------------------------------------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:destroy
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: destroy
+        - to:
+            uri: hazelcast-pncounter:foo
+----
 ====
 
 Destroys the PN Counter instance:
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-replicatedmap-component.adoc
 
b/components/camel-hazelcast/src/main/docs/hazelcast-replicatedmap-component.adoc
index 70736f3b62e8..d6819157a30d 100644
--- 
a/components/camel-hazelcast/src/main/docs/hazelcast-replicatedmap-component.adoc
+++ 
b/components/camel-hazelcast/src/main/docs/hazelcast-replicatedmap-component.adoc
@@ -41,91 +41,133 @@ The replicatedmap producer provides 6 operations:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:put")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.PUT))
-.to(String.format("hazelcast-%sbar", HazelcastConstants.REPLICATEDMAP_PREFIX));
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.PUT))
+    .to(String.format("hazelcast-%sbar", 
HazelcastConstants.REPLICATEDMAP_PREFIX));
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:put" />
+    <from uri="direct:put"/>
     <log message="put.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>put</constant>
     </setHeader>
-    <to uri="hazelcast-replicatedmap:foo" />
+    <to uri="hazelcast-replicatedmap:foo"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:put
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: put
+        - to:
+            uri: hazelcast-replicatedmap:foo
+----
 ====
 
 === Example for *get*:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:get")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
-.toF("hazelcast-%sbar", HazelcastConstants.REPLICATEDMAP_PREFIX)
-.to("seda:out");
+    .setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.GET))
+    .toF("hazelcast-%sbar", HazelcastConstants.REPLICATEDMAP_PREFIX)
+    .to("seda:out");
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:get" />
+    <from uri="direct:get"/>
     <log message="get.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>get</constant>
     </setHeader>
-    <to uri="hazelcast-replicatedmap:foo" />
-    <to uri="seda:out" />
+    <to uri="hazelcast-replicatedmap:foo"/>
+    <to uri="seda:out"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:get
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: get
+        - to:
+            uri: hazelcast-replicatedmap:foo
+        - to:
+            uri: seda:out
+----
 ====
 
 === Example for *delete*:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
 from("direct:delete")
-.setHeader(HazelcastConstants.OPERATION, constant(HazelcastOperation.DELETE))
-.toF("hazelcast-%sbar", HazelcastConstants.REPLICATEDMAP_PREFIX);
+    .setHeader(HazelcastConstants.OPERATION, 
constant(HazelcastOperation.DELETE))
+    .toF("hazelcast-%sbar", HazelcastConstants.REPLICATEDMAP_PREFIX);
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:delete" />
+    <from uri="direct:delete"/>
     <log message="delete.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>delete</constant>
     </setHeader>
-    <to uri="hazelcast-replicatedmap:foo" />
+    <to uri="hazelcast-replicatedmap:foo"/>
 </route>
 ----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:delete
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: delete
+        - to:
+            uri: hazelcast-replicatedmap:foo
+----
 ====
 
 You can call them in your test class with:
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-ringbuffer-component.adoc 
b/components/camel-hazelcast/src/main/docs/hazelcast-ringbuffer-component.adoc
index 58e191553375..506d8d8e5864 100644
--- 
a/components/camel-hazelcast/src/main/docs/hazelcast-ringbuffer-component.adoc
+++ 
b/components/camel-hazelcast/src/main/docs/hazelcast-ringbuffer-component.adoc
@@ -40,8 +40,7 @@ The ringbuffer producer provides 5 operations:
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
 ----
@@ -50,20 +49,34 @@ from("direct:put")
 .to(String.format("hazelcast-%sbar", HazelcastConstants.RINGBUFFER_PREFIX));
 ----
 
-Spring XML::
+XML::
 +
 [source,xml]
 ----
 <route>
-    <from uri="direct:put" />
+    <from uri="direct:put"/>
     <log message="put.."/>
     <setHeader name="hazelcast.operation.type">
         <constant>add</constant>
     </setHeader>
-    <to uri="hazelcast-ringbuffer:foo" />
+    <to uri="hazelcast-ringbuffer:foo"/>
 </route>
 ----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:put
+      steps:
+        - setHeader:
+            name: hazelcast.operation.type
+            constant: add
+        - to:
+            uri: hazelcast-ringbuffer:foo
+----
 ====
 
 === Example for *readonce from head*:
diff --git 
a/components/camel-hazelcast/src/main/docs/hazelcast-seda-component.adoc 
b/components/camel-hazelcast/src/main/docs/hazelcast-seda-component.adoc
index b184035e53d2..c88f6166f680 100644
--- a/components/camel-hazelcast/src/main/docs/hazelcast-seda-component.adoc
+++ b/components/camel-hazelcast/src/main/docs/hazelcast-seda-component.adoc
@@ -33,25 +33,35 @@ specified queue.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
---------------------------
+----
 from("direct:foo")
-.to("hazelcast-seda:foo");
---------------------------
+    .to("hazelcast-seda:foo");
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
-----------------------------------
+----
 <route>
-   <from uri="direct:start" />
-   <to uri="hazelcast-seda:foo" />
+  <from uri="direct:start"/>
+  <to uri="hazelcast-seda:foo"/>
 </route>
-----------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:foo
+      steps:
+        - to:
+            uri: hazelcast-seda:foo
+----
 ====
 
 == SEDA consumer – from(“hazelcast-seda:foo”)
@@ -61,25 +71,35 @@ the specified queue.
 
 [tabs]
 ====
-
-Java DSL::
+Java::
 +
 [source,java]
---------------------------
+----
 from("hazelcast-seda:foo")
-.to("mock:result");
---------------------------
+    .to("mock:result");
+----
 
-Spring XML::
+XML::
 +
 [source,xml]
------------------------------------
+----
 <route>
-  <from uri="hazelcast-seda:foo" />
-  <to uri="mock:result" />
+  <from uri="hazelcast-seda:foo"/>
+  <to uri="mock:result"/>
 </route>
------------------------------------
+----
 
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: hazelcast-seda:foo
+      steps:
+        - to:
+            uri: mock:result
+----
 ====
 
 include::spring-boot:partial$starter.adoc[]
diff --git a/components/camel-kubernetes/src/main/docs/kubernetes-summary.adoc 
b/components/camel-kubernetes/src/main/docs/kubernetes-summary.adoc
index 58fb5a9ecf2d..bb86027a8175 100644
--- a/components/camel-kubernetes/src/main/docs/kubernetes-summary.adoc
+++ b/components/camel-kubernetes/src/main/docs/kubernetes-summary.adoc
@@ -39,21 +39,23 @@ Here we show some examples of producer using 
camel-kubernetes.
 
 === Create a pod
 
+._Java-only: uses toF() with runtime variables for host and auth token_
 [source,java]
--------------------------------------------------------------
+----
 from("direct:createPod")
     .toF("kubernetes-pods://%s?oauthToken=%s&operation=createPod", host, 
authToken);
--------------------------------------------------------------
+----
 
 By using the `KubernetesConstants.KUBERNETES_POD_SPEC` header, you can specify 
your PodSpec and pass it to this operation.
 
 === Delete a pod
 
+._Java-only: uses toF() with runtime variables for host and auth token_
 [source,java]
--------------------------------------------------------------
+----
 from("direct:createPod")
     .toF("kubernetes-pods://%s?oauthToken=%s&operation=deletePod", host, 
authToken);
--------------------------------------------------------------
+----
 
 By using the `KubernetesConstants.KUBERNETES_POD_NAME` header, you can specify 
your Pod name and pass it to this operation.
 
diff --git a/components/camel-minio/src/main/docs/minio-component.adoc 
b/components/camel-minio/src/main/docs/minio-component.adoc
index 987429c05441..0ef22ea9cf33 100644
--- a/components/camel-minio/src/main/docs/minio-component.adoc
+++ b/components/camel-minio/src/main/docs/minio-component.adoc
@@ -695,6 +695,7 @@ Sometimes build a Minio Request can be complex because of 
multiple options.
 We introduce the possibility to use a POJO as the body.
 In Minio, there are multiple operations you can submit, as an example for List 
brokers request, you can do something like:
 
+._Java-only: uses Minio Java SDK builder API for POJO request body_
 [source,java]
 ----
 from("direct:minio")
diff --git 
a/components/camel-netty-http/src/main/docs/netty-http-component.adoc 
b/components/camel-netty-http/src/main/docs/netty-http-component.adoc
index aebe0102be50..8dc08df9f8d9 100644
--- a/components/camel-netty-http/src/main/docs/netty-http-component.adoc
+++ b/components/camel-netty-http/src/main/docs/netty-http-component.adoc
@@ -519,6 +519,7 @@ This will cause Camel to fail on startup.
 *Two routes are sharing the same port, but the second route is misconfigured
 and will fail on starting*
 
+._Java-only: demonstrates a misconfiguration that causes startup failure_
 [source,java]
 ----
 from("netty-http:http://0.0.0.0:{{port}}/foo";)
diff --git 
a/components/camel-reactive-streams/src/main/docs/reactive-streams-component.adoc
 
b/components/camel-reactive-streams/src/main/docs/reactive-streams-component.adoc
index 6d2df02a0026..a8976ae9f56e 100644
--- 
a/components/camel-reactive-streams/src/main/docs/reactive-streams-component.adoc
+++ 
b/components/camel-reactive-streams/src/main/docs/reactive-streams-component.adoc
@@ -258,12 +258,40 @@ Flowable.just(new File("file1.txt"), new 
File("file2.txt"))
 
 In order this to work, a route like the following should be defined in the 
Camel context:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("reactive-streams:readAndMarshal")
     .marshal() // ... other details
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="reactive-streams:readAndMarshal"/>
+  <marshal>
+    <!-- ... other details -->
+  </marshal>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: reactive-streams:readAndMarshal
+      steps:
+        - marshal: {}
+----
+====
+
 ==== Request a transformation to Camel using the direct API
 
 An alternative approach consists of using the URI endpoints directly in the 
reactive flow:
@@ -286,12 +314,40 @@ route using `reactive-streams:` endpoints (although they 
are used under the hood
 
 In this case, the Camel transformation can be just:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:process")
     .marshal() // ... other details
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:process"/>
+  <marshal>
+    <!-- ... other details -->
+  </marshal>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:process
+      steps:
+        - marshal: {}
+----
+====
+
 
 === Process Camel data into the reactive framework
 
diff --git 
a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
 
b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
index 1fc8fceaf0f0..2cabfa6d5f01 100644
--- 
a/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
+++ 
b/components/camel-salesforce/camel-salesforce-component/src/main/docs/salesforce-component.adoc
@@ -124,6 +124,7 @@ As a general example on using the operations in this 
salesforce component, the f
 the upsertSObject API, with the sObjectIdName parameter specifying 'Name' as 
the external id field.
 The request message body should be an SObject DTO generated using the maven 
plugin.
 
+._Java-only: endpoint URI snippet_
 [source,java]
 ----
 ...to("salesforce:upsertSObject?sObjectIdName=Name")...
@@ -1891,6 +1892,7 @@ type, which can be XML, CSV, ZIP_XML or ZIP_CSV. The put 
message body
 will contain `BatchInfo` on success, or throw a `SalesforceException` on
 error.
 
+._Java-only: endpoint URI snippet_
 [source,java]
 ----
 ...to("salesforce:createBatch")..
diff --git a/components/camel-seda/src/main/docs/seda-component.adoc 
b/components/camel-seda/src/main/docs/seda-component.adoc
index d97747dfb8ae..a1291c2ac8c1 100644
--- a/components/camel-seda/src/main/docs/seda-component.adoc
+++ b/components/camel-seda/src/main/docs/seda-component.adoc
@@ -196,6 +196,7 @@ number of concurrent consumers is always fixed.
 Be aware that adding a thread pool to a SEDA endpoint by doing something
 like:
 
+._Java-only: thread pool added to SEDA endpoint_
 [source,java]
 ----
 from("seda:stageName").thread(5).process(...)
@@ -207,6 +208,7 @@ Instead, you might wish to configure a 
xref:direct-component.adoc[Direct] endpoi
 with a thread pool, which can process messages both synchronously and
 asynchronously. For example:
 
+._Java-only: thread pool on a Direct endpoint_
 [source,java]
 ----
 from("direct:stageName").thread(5).process(...)
diff --git 
a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
 
b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
index 98f99780c8c5..1ca23733b5f2 100644
--- 
a/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
+++ 
b/components/camel-spring-parent/camel-spring-ai/camel-spring-ai-chat/src/main/docs/spring-ai-chat-component.adoc
@@ -234,16 +234,48 @@ String response = template.requestBodyAndHeader(
 
 ==== Via Endpoint Configuration
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
     
.to("spring-ai-chat:test?chatModel=#chatModel&temperature=0.8&maxTokens=500");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:test?chatModel=#chatModel&amp;temperature=0.8&amp;maxTokens=500"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:test
+            parameters:
+              chatModel: "#chatModel"
+              temperature: 0.8
+              maxTokens: 500
+----
+====
+
 === Adding System Messages
 
 System messages provide instructions or context to the LLM. You can configure 
them via endpoint parameters for default behavior:
 
+._Java-only: route definition with ProducerTemplate usage_
 [source,java]
 ----
 from("direct:chat")
@@ -258,6 +290,7 @@ String response = template.requestBody("direct:chat",
 
 The component automatically tracks token usage and response metadata, 
providing them via headers. You can access these headers in your Camel routes:
 
+._Java-only: route with `.log()` header interpolation and ProducerTemplate 
usage_
 [source,java]
 ----
 from("direct:chat")
@@ -297,6 +330,10 @@ The component supports attaching metadata to both user and 
system messages. This
 
 You can attach metadata to user messages via headers or endpoint configuration:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Using URL parameters - nested property syntax
@@ -307,10 +344,42 @@ from("direct:chat")
         + "&userMetadata.priority=high");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:test?chatModel=#chatModel&amp;userMetadata.messageId=msg-123&amp;userMetadata.userId=user-456&amp;userMetadata.priority=high"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:test
+            parameters:
+              chatModel: "#chatModel"
+              userMetadata.messageId: msg-123
+              userMetadata.userId: user-456
+              userMetadata.priority: high
+----
+====
+
 ==== System Message Metadata
 
 Similarly, you can attach metadata to system messages:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Using URL parameters - nested property syntax
@@ -321,6 +390,34 @@ from("direct:chat")
         + "&systemMetadata.promptVersion=2024-01");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:test?chatModel=#chatModel&amp;systemMetadata.version=1.0&amp;systemMetadata.model=gpt-4&amp;systemMetadata.promptVersion=2024-01"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:test
+            parameters:
+              chatModel: "#chatModel"
+              systemMetadata.version: "1.0"
+              systemMetadata.model: gpt-4
+              systemMetadata.promptVersion: "2024-01"
+----
+====
+
 === Conversation Memory
 
 The component provides automatic conversation memory management via Spring 
AI's ChatClient and ChatMemory. Two memory strategies are supported:
@@ -409,6 +506,10 @@ The component integrates with the 
xref:spring-ai-tools-component.adoc[Spring AI
 
 When you configure the `tags` parameter, the chat component discovers all 
matching tools from `spring-ai-tools` routes, registers them with Spring AI's 
ChatClient, and allows the LLM to call them during conversation.
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Define tools
@@ -432,6 +533,111 @@ from("direct:multiToolChat")
     
.to("spring-ai-chat:chat?tags=weather,math,finance&chatClient=#chatClient");
 ----
 
+XML::
++
+[source,xml]
+----
+<!-- Define tools -->
+<route>
+  <from uri="spring-ai-tools:weather?tags=weather&amp;description=Get current 
weather for a location"/>
+  <setBody><constant>Sunny</constant></setBody>
+</route>
+
+<route>
+  <from uri="spring-ai-tools:calculator?tags=math&amp;description=Evaluate 
mathematical expressions"/>
+  <setBody><constant>42</constant></setBody>
+</route>
+
+<route>
+  <from uri="spring-ai-tools:stock?tags=finance&amp;description=Get current 
stock price"/>
+  <setBody><constant>42</constant></setBody>
+</route>
+
+<!-- Chat endpoints with different tool combinations -->
+<route>
+  <from uri="direct:weatherChat"/>
+  <to uri="spring-ai-chat:chat?tags=weather&amp;chatClient=#chatClient"/>
+</route>
+
+<route>
+  <from uri="direct:mathChat"/>
+  <to uri="spring-ai-chat:chat?tags=math&amp;chatClient=#chatClient"/>
+</route>
+
+<route>
+  <from uri="direct:multiToolChat"/>
+  <to 
uri="spring-ai-chat:chat?tags=weather,math,finance&amp;chatClient=#chatClient"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+# Define tools
+- route:
+    from:
+      uri: spring-ai-tools:weather
+      parameters:
+        tags: weather
+        description: Get current weather for a location
+      steps:
+        - setBody:
+            constant: Sunny
+
+- route:
+    from:
+      uri: spring-ai-tools:calculator
+      parameters:
+        tags: math
+        description: Evaluate mathematical expressions
+      steps:
+        - setBody:
+            constant: "42"
+
+- route:
+    from:
+      uri: spring-ai-tools:stock
+      parameters:
+        tags: finance
+        description: Get current stock price
+      steps:
+        - setBody:
+            constant: "42"
+
+# Chat endpoints with different tool combinations
+- route:
+    from:
+      uri: direct:weatherChat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              tags: weather
+              chatClient: "#chatClient"
+
+- route:
+    from:
+      uri: direct:mathChat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              tags: math
+              chatClient: "#chatClient"
+
+- route:
+    from:
+      uri: direct:multiToolChat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              tags: weather,math,finance
+              chatClient: "#chatClient"
+----
+====
+
 **How it works:**
 
 1. LLM analyzes the question and decides which tools to call
@@ -521,6 +727,10 @@ template.requestBody("direct:scan-analyzer", message, 
String.class);
 
 To prevent out-of-memory errors with large media files, the component 
validates file sizes before loading them into memory. The default maximum file 
size is 1MB, configurable via:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Configure via endpoint parameter (in bytes)
@@ -537,6 +747,73 @@ from("file:trusted")
     .to("spring-ai-chat:vision?chatModel=#chatModel&maxFileSize=0");
 ----
 
+XML::
++
+[source,xml]
+----
+<!-- Configure via endpoint parameter (in bytes) - 5MB -->
+<route>
+  <from uri="file:uploads"/>
+  <to 
uri="spring-ai-chat:vision?chatModel=#chatModel&amp;maxFileSize=5242880"/>
+</route>
+
+<!-- Override via header for dynamic control - 10MB -->
+<route>
+  <from uri="direct:upload"/>
+  <setHeader name="CamelSpringAiChatMaxFileSize">
+    <constant>10485760</constant>
+  </setHeader>
+  <to uri="spring-ai-chat:vision?chatModel=#chatModel"/>
+</route>
+
+<!-- Disable size checking (not recommended) -->
+<route>
+  <from uri="file:trusted"/>
+  <to uri="spring-ai-chat:vision?chatModel=#chatModel&amp;maxFileSize=0"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+# Configure via endpoint parameter (in bytes) - 5MB
+- route:
+    from:
+      uri: file:uploads
+      steps:
+        - to:
+            uri: spring-ai-chat:vision
+            parameters:
+              chatModel: "#chatModel"
+              maxFileSize: 5242880
+
+# Override via header for dynamic control - 10MB
+- route:
+    from:
+      uri: direct:upload
+      steps:
+        - setHeader:
+            name: CamelSpringAiChatMaxFileSize
+            constant: "10485760"
+        - to:
+            uri: spring-ai-chat:vision
+            parameters:
+              chatModel: "#chatModel"
+
+# Disable size checking (not recommended)
+- route:
+    from:
+      uri: file:trusted
+      steps:
+        - to:
+            uri: spring-ai-chat:vision
+            parameters:
+              chatModel: "#chatModel"
+              maxFileSize: 0
+----
+====
+
 Files exceeding the configured limit will be rejected with an 
`IllegalArgumentException`.
 
 === SafeGuard - Content Filtering
@@ -549,6 +826,10 @@ This feature is useful for:
 * Compliance with data protection requirements
 * Filtering inappropriate or restricted topics
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Configure safeguard with sensitive words
@@ -558,6 +839,33 @@ from("direct:safeguard")
         + "&safeguardFailureResponse=I cannot provide information containing 
sensitive words");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:safeguard"/>
+  <to 
uri="spring-ai-chat:test?chatModel=#chatModel&amp;safeguardSensitiveWords=password,secret,confidential,api-key&amp;safeguardFailureResponse=I
 cannot provide information containing sensitive words"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:safeguard
+      steps:
+        - to:
+            uri: spring-ai-chat:test
+            parameters:
+              chatModel: "#chatModel"
+              safeguardSensitiveWords: "password,secret,confidential,api-key"
+              safeguardFailureResponse: "I cannot provide information 
containing sensitive words"
+----
+====
+
 **Configuration Options:**
 
 * `safeguardSensitiveWords`: Comma-separated list of words to block in 
responses
@@ -675,6 +983,7 @@ from("direct:chat")
 Select specific tools by name using the `toolNames` parameter, instead of (or 
in addition to) tag-based discovery.
 This is useful for selecting individual `@Tool` methods or controlling which 
tools are available per endpoint:
 
+._Java-only: route definition with dynamic tool selection via ProducerTemplate 
header_
 [source,java]
 ----
 // Select only the getCapital tool by name
@@ -728,6 +1037,10 @@ Enable automatic validation of structured output with 
retry on failure.
 When the LLM produces invalid output (doesn't match the expected JSON Schema),
 the advisor re-prompts the LLM with validation errors:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -738,8 +1051,41 @@ from("direct:chat")
         + "&structuredOutputValidationMaxAttempts=3");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;outputFormat=BEAN&amp;outputClass=com.example.ActorFilms&amp;structuredOutputValidation=true&amp;structuredOutputValidationMaxAttempts=3"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              chatModel: "#chatModel"
+              outputFormat: BEAN
+              outputClass: com.example.ActorFilms
+              structuredOutputValidation: true
+              structuredOutputValidationMaxAttempts: 3
+----
+====
+
 If all retry attempts fail, the exception propagates to Camel's error handler:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -753,6 +1099,52 @@ from("direct:chat")
     .end();
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <doTry>
+    <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;outputFormat=BEAN&amp;outputClass=com.example.ActorFilms&amp;structuredOutputValidation=true&amp;structuredOutputValidationMaxAttempts=2"/>
+    <doCatch>
+      <exception>java.lang.Exception</exception>
+      <log message="Structured output validation failed: 
${exception.message}"/>
+      <to uri="direct:fallback"/>
+    </doCatch>
+  </doTry>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - doTry:
+            steps:
+              - to:
+                  uri: spring-ai-chat:chat
+                  parameters:
+                    chatModel: "#chatModel"
+                    outputFormat: BEAN
+                    outputClass: com.example.ActorFilms
+                    structuredOutputValidation: true
+                    structuredOutputValidationMaxAttempts: 2
+            doCatch:
+              - exception:
+                  - java.lang.Exception
+                steps:
+                  - log:
+                      message: "Structured output validation failed: 
${exception.message}"
+                  - to:
+                      uri: direct:fallback
+----
+====
+
 The advisor requires `outputClass` or `entityClass` to be set so it can 
generate a JSON Schema
 for validation. A warning is logged if neither is configured.
 
@@ -766,6 +1158,10 @@ Configure MCP servers using the 
`mcpServer.<name>.<property>` prefix notation:
 
 ==== Stdio Transport
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Connect to MCP filesystem server via stdio
@@ -776,8 +1172,40 @@ from("direct:chat")
         + 
"&mcpServer.fs.args=-y,@modelcontextprotocol/server-filesystem,/tmp");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;mcpServer.fs.transportType=stdio&amp;mcpServer.fs.command=npx&amp;mcpServer.fs.args=-y,@modelcontextprotocol/server-filesystem,/tmp"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              chatModel: "#chatModel"
+              mcpServer.fs.transportType: stdio
+              mcpServer.fs.command: npx
+              mcpServer.fs.args: 
"-y,@modelcontextprotocol/server-filesystem,/tmp"
+----
+====
+
 ==== SSE Transport
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 // Connect to MCP server via SSE
@@ -787,8 +1215,39 @@ from("direct:chat")
         + "&mcpServer.weather.url=http://mcp-server:3001/sse";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;mcpServer.weather.transportType=sse&amp;mcpServer.weather.url=http://mcp-server:3001/sse"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              chatModel: "#chatModel"
+              mcpServer.weather.transportType: sse
+              mcpServer.weather.url: "http://mcp-server:3001/sse";
+----
+====
+
 ==== Multiple MCP Servers
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -800,11 +1259,45 @@ from("direct:chat")
         + "&mcpServer.weather.url=http://weather-mcp:3001/sse";);
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;mcpServer.fs.transportType=stdio&amp;mcpServer.fs.command=npx&amp;mcpServer.fs.args=-y,@modelcontextprotocol/server-filesystem,/tmp&amp;mcpServer.weather.transportType=sse&amp;mcpServer.weather.url=http://weather-mcp:3001/sse"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              chatModel: "#chatModel"
+              mcpServer.fs.transportType: stdio
+              mcpServer.fs.command: npx
+              mcpServer.fs.args: 
"-y,@modelcontextprotocol/server-filesystem,/tmp"
+              mcpServer.weather.transportType: sse
+              mcpServer.weather.url: "http://weather-mcp:3001/sse";
+----
+====
+
 ==== OAuth Authentication for MCP Servers
 
 For MCP servers requiring authentication, configure an OAuth profile per 
server.
 This requires `camel-oauth` on the classpath:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 from("direct:chat")
@@ -814,6 +1307,34 @@ from("direct:chat")
         + "&mcpServer.api.oauthProfile=keycloak");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from uri="direct:chat"/>
+  <to 
uri="spring-ai-chat:chat?chatModel=#chatModel&amp;mcpServer.api.transportType=sse&amp;mcpServer.api.url=http://secure-mcp:3001/sse&amp;mcpServer.api.oauthProfile=keycloak"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: direct:chat
+      steps:
+        - to:
+            uri: spring-ai-chat:chat
+            parameters:
+              chatModel: "#chatModel"
+              mcpServer.api.transportType: sse
+              mcpServer.api.url: "http://secure-mcp:3001/sse";
+              mcpServer.api.oauthProfile: keycloak
+----
+====
+
 With corresponding properties:
 
 [source,properties]
diff --git 
a/components/camel-spring-parent/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
 
b/components/camel-spring-parent/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
index b7f9345ee842..dd44485922ca 100644
--- 
a/components/camel-spring-parent/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
+++ 
b/components/camel-spring-parent/camel-spring-rabbitmq/src/main/docs/spring-rabbitmq-component.adoc
@@ -81,11 +81,33 @@ The `ConnectionFactory` is auto-detected by default, so you 
can do:
 To use default exchange name (which would be an empty exchange name in 
RabbitMQ) then you should use `default` as name
 in the endpoint uri, such as:
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 to("spring-rabbitmq:default?routingKey=foo")
 ----
 
+XML::
++
+[source,xml]
+----
+<to uri="spring-rabbitmq:default?routingKey=foo"/>
+----
+
+YAML::
++
+[source,yaml]
+----
+- to:
+    uri: spring-rabbitmq:default
+    parameters:
+      routingKey: foo
+----
+====
+
 === Auto declare exchanges, queues and bindings
 
 Before you can send or receive messages from RabbitMQ, then exchanges, queues 
and bindings must be setup first.
@@ -153,6 +175,7 @@ So if we send `World` as message body to _direct:start_ 
then, we will se the mes
 - `log:input -> World`
 - `log:response -> Hello World`
 
+._Java-only: Java DSL with ExchangePattern.InOut and body().prepend()_
 [source,java]
 ----
 from("direct:start")
diff --git 
a/components/camel-spring-parent/camel-spring-ws/src/main/docs/spring-ws-component.adoc
 
b/components/camel-spring-parent/camel-spring-ws/src/main/docs/spring-ws-component.adoc
index 46e0a77ed7a9..04e89c3268b3 100644
--- 
a/components/camel-spring-parent/camel-spring-ws/src/main/docs/spring-ws-component.adoc
+++ 
b/components/camel-spring-parent/camel-spring-ws/src/main/docs/spring-ws-component.adoc
@@ -281,6 +281,7 @@ all Spring-WS endpoints
 
 - the local messageFilter directly on the endpoint as follows:
 
+._Java-only: endpoint URI fragment with bean reference_
 [source,java]
 ----
 
to("spring-ws:http://yourdomain.com?messageFilter=#myEndpointSpecificMessageFilter";);
@@ -428,40 +429,169 @@ define what web service requests are handled by your 
endpoint:
 The following route will receive all web service requests that have a
 root element named "GetFoo" within the `\http://example.com/` namespace.
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 
from("spring-ws:rootqname:{http://example.com/}GetFoo?endpointMapping=#endpointMapping";)
     .convertBodyTo(String.class).to("mock:example");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from 
uri="spring-ws:rootqname:{http://example.com/}GetFoo?endpointMapping=#endpointMapping"/>
+  <convertBodyTo type="String"/>
+  <to uri="mock:example"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: "spring-ws:rootqname:{http://example.com/}GetFoo";
+      parameters:
+        endpointMapping: "#endpointMapping"
+      steps:
+        - convertBodyTo:
+            type: String
+        - to:
+            uri: mock:example
+----
+====
+
 The following route will receive web service requests containing the
 `\http://example.com/GetFoo` SOAP action.
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 
from("spring-ws:soapaction:http://example.com/GetFoo?endpointMapping=#endpointMapping";)
     .convertBodyTo(String.class).to("mock:example");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from 
uri="spring-ws:soapaction:http://example.com/GetFoo?endpointMapping=#endpointMapping"/>
+  <convertBodyTo type="String"/>
+  <to uri="mock:example"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: "spring-ws:soapaction:http://example.com/GetFoo";
+      parameters:
+        endpointMapping: "#endpointMapping"
+      steps:
+        - convertBodyTo:
+            type: String
+        - to:
+            uri: mock:example
+----
+====
+
 The following route will receive all requests sent to
 `\http://example.com/foobar`.
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 
from("spring-ws:uri:http://example.com/foobar?endpointMapping=#endpointMapping";)
     .convertBodyTo(String.class).to("mock:example");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from 
uri="spring-ws:uri:http://example.com/foobar?endpointMapping=#endpointMapping"/>
+  <convertBodyTo type="String"/>
+  <to uri="mock:example"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: "spring-ws:uri:http://example.com/foobar";
+      parameters:
+        endpointMapping: "#endpointMapping"
+      steps:
+        - convertBodyTo:
+            type: String
+        - to:
+            uri: mock:example
+----
+====
+
 The route below will receive requests that contain the element
 `<foobar>abc</foobar>` anywhere inside the message (and the default
 namespace).
 
+[tabs]
+====
+Java::
++
 [source,java]
 ----
 
from("spring-ws:xpathresult:abc?expression=//foobar&endpointMapping=#endpointMapping")
     .convertBodyTo(String.class).to("mock:example");
 ----
 
+XML::
++
+[source,xml]
+----
+<route>
+  <from 
uri="spring-ws:xpathresult:abc?expression=//foobar&amp;endpointMapping=#endpointMapping"/>
+  <convertBodyTo type="String"/>
+  <to uri="mock:example"/>
+</route>
+----
+
+YAML::
++
+[source,yaml]
+----
+- route:
+    from:
+      uri: "spring-ws:xpathresult:abc"
+      parameters:
+        expression: "//foobar"
+        endpointMapping: "#endpointMapping"
+      steps:
+        - convertBodyTo:
+            type: String
+        - to:
+            uri: mock:example
+----
+====
+
 === Alternative configuration, using existing endpoint mappings
 
 For every endpoint with mapping-type `beanname` one bean of type
diff --git a/components/camel-sql/src/main/docs/sql-component.adoc 
b/components/camel-sql/src/main/docs/sql-component.adoc
index 52be8b127012..ab3d79913339 100644
--- a/components/camel-sql/src/main/docs/sql-component.adoc
+++ b/components/camel-sql/src/main/docs/sql-component.adoc
@@ -482,6 +482,7 @@ YAML::
 
 And the bean has the following method:
 
+._Java-only: bean class used as expression parameter_
 [source,java]
 ----
 public static class MyIdGenerator {

Reply via email to