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

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


The following commit(s) were added to refs/heads/main by this push:
     new 265011ea1026 CAMEL-25157: camel-java-io - LwModelToJavaDumper writes 
valid Java DSL for more routes (#27129)
265011ea1026 is described below

commit 265011ea1026da8cafb06a892ce2bdfd3a71399e
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Sep 30 15:01:36 2026 +0200

    CAMEL-25157: camel-java-io - LwModelToJavaDumper writes valid Java DSL for 
more routes (#27129)
    
    Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
---
 .../apache/camel/java/out/JavaDslModelWriter.java  | 110 +++++
 .../org/apache/camel/java/in/ModelNormalizer.java  |  11 +
 .../camel/java/out/JavaDslModelWriterSupport.java  | 511 ++++++++++++++++++++-
 .../apache/camel/java/LwModelToJavaDumperTest.java |  33 ++
 .../org/apache/camel/java/in/RoundTripTest.java    |  14 +-
 .../resources/stepArgumentsAndTypedOptions.xml     |  78 ++++
 .../resources/velocity/model-java-dsl-writer.vm    |   1 +
 7 files changed, 742 insertions(+), 16 deletions(-)

diff --git 
a/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java
 
b/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java
index df5d2c563441..a85cc4ac9fee 100644
--- 
a/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java
+++ 
b/core/camel-java-io/src/generated/java/org/apache/camel/java/out/JavaDslModelWriter.java
@@ -4125,6 +4125,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "AggregateDefinition" -> {
                     AggregateDefinition _d = (AggregateDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".aggregate(");
                     boolean _first = true;
                     if (_d.getCorrelationExpression() != null && 
_d.getCorrelationExpression().getExpressionType() != null) {
@@ -4141,6 +4142,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "BeanDefinition" -> {
                     BeanDefinition _d = (BeanDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".bean(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -4162,6 +4164,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "CacheDefinition" -> {
                     CacheDefinition _d = (CacheDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".cache(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4178,6 +4181,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "CatchDefinition" -> {
                     CatchDefinition _d = (CatchDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".doCatch(");
                     boolean _first = true;
                     if (_d.getExceptions() != null) {
@@ -4206,6 +4210,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ClaimCheckDefinition" -> {
                     ClaimCheckDefinition _d = (ClaimCheckDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".claimCheck(");
                     boolean _first = true;
                     if (_d.getOperation() != null) {
@@ -4233,6 +4238,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertBodyDefinition" -> {
                     ConvertBodyDefinition _d = (ConvertBodyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".convertBodyTo(");
                     boolean _first = true;
                     if (_d.getType() != null) {
@@ -4248,6 +4254,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertHeaderDefinition" -> {
                     ConvertHeaderDefinition _d = (ConvertHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".convertHeaderTo(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4269,6 +4276,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertVariableDefinition" -> {
                     ConvertVariableDefinition _d = (ConvertVariableDefinition) 
v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".convertVariableTo(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4290,6 +4298,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DelayDefinition" -> {
                     DelayDefinition _d = (DelayDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".delay(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4306,6 +4315,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DynamicRouterDefinition" -> {
                     DynamicRouterDefinition _d = (DynamicRouterDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".dynamicRouter(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4327,6 +4337,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "FilterDefinition" -> {
                     FilterDefinition _d = (FilterDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".filter(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4353,6 +4364,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "IdempotentConsumerDefinition" -> {
                     IdempotentConsumerDefinition _d = 
(IdempotentConsumerDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".idempotentConsumer(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4379,6 +4391,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "InterceptFromDefinition" -> {
                     InterceptFromDefinition _d = (InterceptFromDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".interceptFrom(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -4394,6 +4407,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "InterceptSendToEndpointDefinition" -> {
                     InterceptSendToEndpointDefinition _d = 
(InterceptSendToEndpointDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".interceptSendToEndpoint(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -4409,6 +4423,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "KameletDefinition" -> {
                     KameletDefinition _d = (KameletDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".kamelet(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4429,6 +4444,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "LogDefinition" -> {
                     LogDefinition _d = (LogDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".log(");
                     boolean _first = true;
                     if (_d.getLoggingLevel() != null) {
@@ -4450,6 +4466,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "LoopDefinition" -> {
                     LoopDefinition _d = (LoopDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".loop(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4481,6 +4498,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "OnExceptionDefinition" -> {
                     OnExceptionDefinition _d = (OnExceptionDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".onException(");
                     boolean _first = true;
                     if (_d.getExceptions() != null) {
@@ -4529,6 +4547,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PolicyDefinition" -> {
                     PolicyDefinition _d = (PolicyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".policy(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -4544,6 +4563,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PollDefinition" -> {
                     PollDefinition _d = (PollDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".poll(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -4570,6 +4590,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ProcessDefinition" -> {
                     ProcessDefinition _d = (ProcessDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".process(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -4585,6 +4606,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RecipientListDefinition" -> {
                     RecipientListDefinition _d = (RecipientListDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".recipientList(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4601,6 +4623,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveHeaderDefinition" -> {
                     RemoveHeaderDefinition _d = (RemoveHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".removeHeader(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4616,6 +4639,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveHeadersDefinition" -> {
                     RemoveHeadersDefinition _d = (RemoveHeadersDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".removeHeaders(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -4631,6 +4655,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemovePropertiesDefinition" -> {
                     RemovePropertiesDefinition _d = 
(RemovePropertiesDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeProperties(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -4646,6 +4671,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemovePropertyDefinition" -> {
                     RemovePropertyDefinition _d = (RemovePropertyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeProperty(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4661,6 +4687,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveVariableDefinition" -> {
                     RemoveVariableDefinition _d = (RemoveVariableDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeVariable(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4686,6 +4713,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RollbackDefinition" -> {
                     RollbackDefinition _d = (RollbackDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".rollback(");
                     boolean _first = true;
                     if (_d.getMessage() != null) {
@@ -4731,6 +4759,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RoutingSlipDefinition" -> {
                     RoutingSlipDefinition _d = (RoutingSlipDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".routingSlip(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4757,6 +4786,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ScriptDefinition" -> {
                     ScriptDefinition _d = (ScriptDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".script(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4773,6 +4803,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetBodyDefinition" -> {
                     SetBodyDefinition _d = (SetBodyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setBody(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4789,6 +4820,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetExchangePatternDefinition" -> {
                     SetExchangePatternDefinition _d = 
(SetExchangePatternDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".setExchangePattern(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -4804,6 +4836,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetHeaderDefinition" -> {
                     SetHeaderDefinition _d = (SetHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setHeader(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4831,6 +4864,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetPropertyDefinition" -> {
                     SetPropertyDefinition _d = (SetPropertyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setProperty(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4853,6 +4887,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetVariableDefinition" -> {
                     SetVariableDefinition _d = (SetVariableDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setVariable(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -4880,6 +4915,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SortDefinition" -> {
                     SortDefinition _d = (SortDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".sort(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4896,6 +4932,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SplitDefinition" -> {
                     SplitDefinition _d = (SplitDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".split(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4938,6 +4975,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThreadsDefinition" -> {
                     ThreadsDefinition _d = (ThreadsDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".threads(");
                     boolean _first = true;
                     if (_d.getPoolSize() != null) {
@@ -4959,6 +4997,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThrottleDefinition" -> {
                     ThrottleDefinition _d = (ThrottleDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".throttle(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -4975,6 +5014,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThrowExceptionDefinition" -> {
                     ThrowExceptionDefinition _d = (ThrowExceptionDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".throwException(");
                     boolean _first = true;
                     if (_d.getExceptionType() != null) {
@@ -4996,6 +5036,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ToDefinition" -> {
                     ToDefinition _d = (ToDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".to(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -5017,6 +5058,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ToDynamicDefinition" -> {
                     ToDynamicDefinition _d = (ToDynamicDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".toD(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -5042,6 +5084,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "TransformDataTypeDefinition" -> {
                     TransformDataTypeDefinition _d = 
(TransformDataTypeDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".transformDataType(");
                     boolean _first = true;
                     if (_d.getFromType() != null) {
@@ -5063,6 +5106,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "TransformDefinition" -> {
                     TransformDefinition _d = (TransformDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".transform(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5089,6 +5133,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ValidateDefinition" -> {
                     ValidateDefinition _d = (ValidateDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".validate(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5105,6 +5150,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "WhenDefinition" -> {
                     WhenDefinition _d = (WhenDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".when(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5121,6 +5167,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "WireTapDefinition" -> {
                     WireTapDefinition _d = (WireTapDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".wireTap(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -5136,6 +5183,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DeleteDefinition" -> {
                     DeleteDefinition _d = (DeleteDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".delete(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5151,6 +5199,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "GetDefinition" -> {
                     GetDefinition _d = (GetDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".get(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5166,6 +5215,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "HeadDefinition" -> {
                     HeadDefinition _d = (HeadDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".head(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5186,6 +5236,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PatchDefinition" -> {
                     PatchDefinition _d = (PatchDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".patch(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5201,6 +5252,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PostDefinition" -> {
                     PostDefinition _d = (PostDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".post(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5216,6 +5268,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PutDefinition" -> {
                     PutDefinition _d = (PutDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".put(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5236,6 +5289,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RestDefinition" -> {
                     RestDefinition _d = (RestDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".rest(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -5278,6 +5332,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "AggregateDefinition" -> {
                     AggregateDefinition _d = (AggregateDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".aggregate(");
                     boolean _first = true;
                     if (_d.getCorrelationExpression() != null && 
_d.getCorrelationExpression().getExpressionType() != null) {
@@ -5294,6 +5349,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "BeanDefinition" -> {
                     BeanDefinition _d = (BeanDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".bean(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -5315,6 +5371,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "CacheDefinition" -> {
                     CacheDefinition _d = (CacheDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".cache(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5331,6 +5388,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "CatchDefinition" -> {
                     CatchDefinition _d = (CatchDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".doCatch(");
                     boolean _first = true;
                     if (_d.getExceptions() != null) {
@@ -5359,6 +5417,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ClaimCheckDefinition" -> {
                     ClaimCheckDefinition _d = (ClaimCheckDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".claimCheck(");
                     boolean _first = true;
                     if (_d.getOperation() != null) {
@@ -5386,6 +5445,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertBodyDefinition" -> {
                     ConvertBodyDefinition _d = (ConvertBodyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".convertBodyTo(");
                     boolean _first = true;
                     if (_d.getType() != null) {
@@ -5401,6 +5461,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertHeaderDefinition" -> {
                     ConvertHeaderDefinition _d = (ConvertHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".convertHeaderTo(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5422,6 +5483,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ConvertVariableDefinition" -> {
                     ConvertVariableDefinition _d = (ConvertVariableDefinition) 
v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".convertVariableTo(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5443,6 +5505,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DelayDefinition" -> {
                     DelayDefinition _d = (DelayDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".delay(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5459,6 +5522,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DynamicRouterDefinition" -> {
                     DynamicRouterDefinition _d = (DynamicRouterDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".dynamicRouter(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5480,6 +5544,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "FilterDefinition" -> {
                     FilterDefinition _d = (FilterDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".filter(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5501,6 +5566,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "IdempotentConsumerDefinition" -> {
                     IdempotentConsumerDefinition _d = 
(IdempotentConsumerDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".idempotentConsumer(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5522,6 +5588,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "InterceptFromDefinition" -> {
                     InterceptFromDefinition _d = (InterceptFromDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".interceptFrom(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -5537,6 +5604,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "InterceptSendToEndpointDefinition" -> {
                     InterceptSendToEndpointDefinition _d = 
(InterceptSendToEndpointDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".interceptSendToEndpoint(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -5552,6 +5620,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "KameletDefinition" -> {
                     KameletDefinition _d = (KameletDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".kamelet(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5572,6 +5641,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "LogDefinition" -> {
                     LogDefinition _d = (LogDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".log(");
                     boolean _first = true;
                     if (_d.getLoggingLevel() != null) {
@@ -5593,6 +5663,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "LoopDefinition" -> {
                     LoopDefinition _d = (LoopDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".loop(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5624,6 +5695,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "OnExceptionDefinition" -> {
                     OnExceptionDefinition _d = (OnExceptionDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".onException(");
                     boolean _first = true;
                     if (_d.getExceptions() != null) {
@@ -5652,6 +5724,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PolicyDefinition" -> {
                     PolicyDefinition _d = (PolicyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".policy(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -5667,6 +5740,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PollDefinition" -> {
                     PollDefinition _d = (PollDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".poll(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -5693,6 +5767,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ProcessDefinition" -> {
                     ProcessDefinition _d = (ProcessDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".process(");
                     boolean _first = true;
                     if (_d.getRef() != null) {
@@ -5708,6 +5783,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RecipientListDefinition" -> {
                     RecipientListDefinition _d = (RecipientListDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".recipientList(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5724,6 +5800,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveHeaderDefinition" -> {
                     RemoveHeaderDefinition _d = (RemoveHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".removeHeader(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5739,6 +5816,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveHeadersDefinition" -> {
                     RemoveHeadersDefinition _d = (RemoveHeadersDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".removeHeaders(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -5754,6 +5832,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemovePropertiesDefinition" -> {
                     RemovePropertiesDefinition _d = 
(RemovePropertiesDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeProperties(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -5769,6 +5848,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemovePropertyDefinition" -> {
                     RemovePropertyDefinition _d = (RemovePropertyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeProperty(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5784,6 +5864,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RemoveVariableDefinition" -> {
                     RemoveVariableDefinition _d = (RemoveVariableDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".removeVariable(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5809,6 +5890,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RollbackDefinition" -> {
                     RollbackDefinition _d = (RollbackDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".rollback(");
                     boolean _first = true;
                     if (_d.getMessage() != null) {
@@ -5829,6 +5911,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RoutingSlipDefinition" -> {
                     RoutingSlipDefinition _d = (RoutingSlipDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".routingSlip(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5855,6 +5938,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ScriptDefinition" -> {
                     ScriptDefinition _d = (ScriptDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".script(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5871,6 +5955,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetBodyDefinition" -> {
                     SetBodyDefinition _d = (SetBodyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setBody(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5887,6 +5972,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetExchangePatternDefinition" -> {
                     SetExchangePatternDefinition _d = 
(SetExchangePatternDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".setExchangePattern(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -5902,6 +5988,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetHeaderDefinition" -> {
                     SetHeaderDefinition _d = (SetHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setHeader(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5929,6 +6016,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetPropertyDefinition" -> {
                     SetPropertyDefinition _d = (SetPropertyDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setProperty(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5951,6 +6039,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetVariableDefinition" -> {
                     SetVariableDefinition _d = (SetVariableDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setVariable(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -5978,6 +6067,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SortDefinition" -> {
                     SortDefinition _d = (SortDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".sort(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -5994,6 +6084,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SplitDefinition" -> {
                     SplitDefinition _d = (SplitDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".split(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -6021,6 +6112,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThreadsDefinition" -> {
                     ThreadsDefinition _d = (ThreadsDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".threads(");
                     boolean _first = true;
                     if (_d.getPoolSize() != null) {
@@ -6042,6 +6134,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThrottleDefinition" -> {
                     ThrottleDefinition _d = (ThrottleDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".throttle(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -6058,6 +6151,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ThrowExceptionDefinition" -> {
                     ThrowExceptionDefinition _d = (ThrowExceptionDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".throwException(");
                     boolean _first = true;
                     if (_d.getExceptionType() != null) {
@@ -6079,6 +6173,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ToDefinition" -> {
                     ToDefinition _d = (ToDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".to(");
                     boolean _first = true;
                     if (_d.getPattern() != null) {
@@ -6100,6 +6195,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ToDynamicDefinition" -> {
                     ToDynamicDefinition _d = (ToDynamicDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".toD(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -6125,6 +6221,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "TransformDataTypeDefinition" -> {
                     TransformDataTypeDefinition _d = 
(TransformDataTypeDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     
sb.append("\n").append(indent()).append(".transformDataType(");
                     boolean _first = true;
                     if (_d.getFromType() != null) {
@@ -6146,6 +6243,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "TransformDefinition" -> {
                     TransformDefinition _d = (TransformDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".transform(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -6172,6 +6270,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "ValidateDefinition" -> {
                     ValidateDefinition _d = (ValidateDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".validate(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -6188,6 +6287,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "WireTapDefinition" -> {
                     WireTapDefinition _d = (WireTapDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".wireTap(");
                     boolean _first = true;
                     if (_d.getUri() != null) {
@@ -6242,6 +6342,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetHeaderDefinition" -> {
                     SetHeaderDefinition _d = (SetHeaderDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setHeader(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -6270,6 +6371,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "SetVariableDefinition" -> {
                     SetVariableDefinition _d = (SetVariableDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".setVariable(");
                     boolean _first = true;
                     if (_d.getName() != null) {
@@ -6309,6 +6411,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "WhenDefinition" -> {
                     WhenDefinition _d = (WhenDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".when(");
                     boolean _first = true;
                     if (_d.getExpression() != null) {
@@ -6510,6 +6613,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "RestDefinition" -> {
                     RestDefinition _d = (RestDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".rest(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6542,6 +6646,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "DeleteDefinition" -> {
                     DeleteDefinition _d = (DeleteDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".delete(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6557,6 +6662,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "GetDefinition" -> {
                     GetDefinition _d = (GetDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".get(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6572,6 +6678,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "HeadDefinition" -> {
                     HeadDefinition _d = (HeadDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".head(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6587,6 +6694,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PatchDefinition" -> {
                     PatchDefinition _d = (PatchDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".patch(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6602,6 +6710,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PostDefinition" -> {
                     PostDefinition _d = (PostDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".post(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
@@ -6617,6 +6726,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "PutDefinition" -> {
                     PutDefinition _d = (PutDefinition) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".put(");
                     boolean _first = true;
                     if (_d.getPath() != null) {
diff --git 
a/core/camel-java-io/src/main/java/org/apache/camel/java/in/ModelNormalizer.java
 
b/core/camel-java-io/src/main/java/org/apache/camel/java/in/ModelNormalizer.java
index a084af72c929..e0706bffa2d5 100644
--- 
a/core/camel-java-io/src/main/java/org/apache/camel/java/in/ModelNormalizer.java
+++ 
b/core/camel-java-io/src/main/java/org/apache/camel/java/in/ModelNormalizer.java
@@ -27,6 +27,8 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.camel.builder.ExpressionClause;
+import org.apache.camel.model.RemoveHeadersDefinition;
+import org.apache.camel.model.RemovePropertiesDefinition;
 import org.apache.camel.model.language.ConstantExpression;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.support.builder.ValueBuilder;
@@ -72,6 +74,15 @@ final class ModelNormalizer {
         if (!o.getClass().getName().startsWith("org.apache.camel.model.")) {
             return;
         }
+        // removeHeaders("*", "keep") keeps one exclude in an array, XML and 
YAML in the excludePattern option
+        if (o instanceof RemoveHeadersDefinition rh && rh.getExcludePattern() 
== null && rh.getExcludePatterns() != null
+                && rh.getExcludePatterns().length == 1) {
+            rh.setExcludePattern(rh.getExcludePatterns()[0]);
+        }
+        if (o instanceof RemovePropertiesDefinition rp && 
rp.getExcludePattern() == null
+                && rp.getExcludePatterns() != null && 
rp.getExcludePatterns().length == 1) {
+            rp.setExcludePattern(rp.getExcludePatterns()[0]);
+        }
         if (o instanceof ConstantExpression ce && ce.getExpression() == null 
&& ce.getExpressionValue() != null) {
             // expression().constant(value) keeps the value as a runtime 
expression; the other DSLs have its text
             ce.setExpression(ce.getExpressionValue().toString());
diff --git 
a/core/camel-java-io/src/main/java/org/apache/camel/java/out/JavaDslModelWriterSupport.java
 
b/core/camel-java-io/src/main/java/org/apache/camel/java/out/JavaDslModelWriterSupport.java
index afbffa2a0cb2..43a77f1eaba4 100644
--- 
a/core/camel-java-io/src/main/java/org/apache/camel/java/out/JavaDslModelWriterSupport.java
+++ 
b/core/camel-java-io/src/main/java/org/apache/camel/java/out/JavaDslModelWriterSupport.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.java.out;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
 import java.util.Base64;
 import java.util.HashSet;
 import java.util.List;
@@ -23,30 +26,53 @@ import java.util.Map;
 import java.util.Set;
 import java.util.function.BiConsumer;
 
+import org.apache.camel.builder.ExpressionClause;
+import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.BeanFactoryDefinition;
+import org.apache.camel.model.ConvertBodyDefinition;
+import org.apache.camel.model.ConvertHeaderDefinition;
+import org.apache.camel.model.ConvertVariableDefinition;
 import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.EnrichDefinition;
 import org.apache.camel.model.ErrorHandlerDefinition;
+import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.model.ExpressionSubElementDefinition;
+import org.apache.camel.model.InputTypeDefinition;
 import org.apache.camel.model.InterceptDefinition;
 import org.apache.camel.model.InterceptFromDefinition;
 import org.apache.camel.model.InterceptSendToEndpointDefinition;
 import org.apache.camel.model.LoadBalancerDefinition;
+import org.apache.camel.model.LogDefinition;
+import org.apache.camel.model.LoopDefinition;
 import org.apache.camel.model.OnWhenDefinition;
 import org.apache.camel.model.OptionalIdentifiedDefinition;
+import org.apache.camel.model.OutputTypeDefinition;
+import org.apache.camel.model.PollEnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.model.PropertyExpressionDefinition;
+import org.apache.camel.model.RemoveHeadersDefinition;
+import org.apache.camel.model.RemovePropertiesDefinition;
+import org.apache.camel.model.RollbackDefinition;
 import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
+import org.apache.camel.model.SamplingDefinition;
+import org.apache.camel.model.SetHeaderDefinition;
+import org.apache.camel.model.SetHeadersDefinition;
+import org.apache.camel.model.SetVariableDefinition;
+import org.apache.camel.model.SetVariablesDefinition;
 import org.apache.camel.model.SwitchCaseDefinition;
 import org.apache.camel.model.SwitchDefinition;
 import org.apache.camel.model.TemplatedRouteDefinition;
 import org.apache.camel.model.TemplatedRouteParameterDefinition;
+import org.apache.camel.model.ThrowExceptionDefinition;
 import org.apache.camel.model.ToDefinition;
+import org.apache.camel.model.ToDynamicDefinition;
 import org.apache.camel.model.ValueDefinition;
 import org.apache.camel.model.config.BatchResequencerConfig;
+import org.apache.camel.model.config.StreamResequencerConfig;
 import org.apache.camel.model.errorhandler.DeadLetterChannelDefinition;
 import org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition;
 import org.apache.camel.model.language.ConstantExpression;
@@ -66,8 +92,10 @@ import org.apache.camel.model.language.WasmExpression;
 import org.apache.camel.model.language.XMLTokenizerExpression;
 import org.apache.camel.model.language.XPathExpression;
 import org.apache.camel.model.language.XQueryExpression;
+import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition;
+import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
 import org.apache.camel.model.rest.ResponseHeaderDefinition;
 import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -80,6 +108,8 @@ import 
org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.CustomValidatorDefinition;
 import org.apache.camel.model.validator.EndpointValidatorDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
+import org.apache.camel.support.builder.ValueBuilder;
+import org.apache.camel.util.TimeUtils;
 
 /**
  * Base class for the generated {@link JavaDslModelWriter}. Provides helper 
methods for building Java DSL source code
@@ -122,13 +152,17 @@ public abstract class JavaDslModelWriterSupport {
             "doTry", "circuitBreaker", "step", "saga", "loop",
             "transacted", "aggregate", "resequence", "idempotentConsumer",
             "onCompletion", "loadBalance", "kamelet", "onException",
-            "intercept", "interceptFrom", "interceptSendToEndpoint");
+            "intercept", "interceptFrom", "interceptSendToEndpoint", "policy");
 
     private static final Set<String> BLOCK_CHILDREN = Set.of(
             "otherwise", "doFinally", "onFallback");
 
     private static final Set<String> PREDICATE_CHILDREN = Set.of("handled", 
"continued", "retryWhile");
 
+    /** Expression options whose fluent method has another name: aggregate's 
completionSize(Expression). */
+    private static final Map<String, String> CHILD_RENAMES = Map.of(
+            "completionSizeExpression", "completionSize", 
"completionTimeoutExpression", "completionTimeout");
+
     private static final Set<String> SKIP_ATTRIBUTES = Set.of("customId");
 
     // Builder methods that are no-arg toggles: .name() when "true", skip when 
"false"
@@ -177,6 +211,12 @@ public abstract class JavaDslModelWriterSupport {
 
     private boolean inDataFormatBuilder;
     private boolean inSubBuilder;
+    /** The definition whose options are being written, whose fluent methods 
say how to write each one. */
+    private Object optionOwner;
+    /** Where the call of the step being written starts, for a step whose 
options must be its arguments. */
+    private int stepStart = -1;
+    /** The onFallback() of the circuit breaker being written, written last. */
+    private Runnable pendingFallback;
     private boolean inRestParam;
     private boolean generatedIds;
     private boolean sourceLocation;
@@ -203,9 +243,12 @@ public abstract class JavaDslModelWriterSupport {
         inDataFormatBuilder = false;
         inSubBuilder = false;
         inRestParam = false;
+        optionOwner = null;
+        pendingFallback = null;
     }
 
     protected void writeRoute(StringBuilder sb, RouteDefinition def) {
+        optionOwner = def;
         // extract intercepts from outputs — they are RouteBuilder-level in 
Java DSL
         if (def.getOutputs() != null) {
             for (ProcessorDefinition<?> output : def.getOutputs()) {
@@ -508,10 +551,26 @@ public abstract class JavaDslModelWriterSupport {
      */
     protected void beginStep(StringBuilder sb, String name, Object def) {
         handledAttributes.clear();
+        optionOwner = def;
+        stepStart = sb.length();
         if ("param".equals(name)) {
             inRestParam = true;
         }
         sb.append(NL).append(indent()).append(".").append(name).append("()");
+        // enrich().constant("uri"): the expression clause comes first, the 
options after it
+        if ((def instanceof EnrichDefinition || def instanceof 
PollEnrichDefinition)
+                && ((ExpressionNode) def).getExpression() != null) {
+            sb.append(NL).append(indent()).append("    
.").append(expressionDsl(((ExpressionNode) def).getExpression()));
+            handledAttributes.add("expression");
+        }
+    }
+
+    /**
+     * A step the writer writes with its arguments inline ({@code 
.recipientList(header("to"))}): its options follow.
+     */
+    protected void beginInlineStep(StringBuilder sb, Object def) {
+        optionOwner = def;
+        stepStart = sb.length();
     }
 
     /**
@@ -522,10 +581,16 @@ public abstract class JavaDslModelWriterSupport {
         if ("param".equals(name)) {
             inRestParam = false;
         }
+        rewriteFromJavaForms(sb, def);
         String restEnd = REST_END_METHODS.get(name);
         if (restEnd != null) {
             
sb.append(NL).append(indent()).append(".").append(restEnd).append("()");
         } else if (BLOCK_EIPS.contains(name)) {
+            if ("circuitBreaker".equals(name) && pendingFallback != null) {
+                Runnable fallback = pendingFallback;
+                pendingFallback = null;
+                fallback.run();
+            }
             sb.append(NL).append(indent()).append(".end()");
         }
     }
@@ -543,9 +608,14 @@ public abstract class JavaDslModelWriterSupport {
         if (defaultValue != null && defaultValue.equals(value)) {
             return;
         }
+        if (!inSubBuilder && !inDataFormatBuilder && !inRestParam && 
stepArgumentOption(sb, key)) {
+            return;
+        }
         String methodName = key;
         if (inDataFormatBuilder) {
             methodName = DATAFORMAT_ATTR_RENAMES.getOrDefault(key, key);
+        } else if (!inSubBuilder && !inRestParam) {
+            methodName = OPTION_RENAMES.getOrDefault(key, key);
         }
         if (CLASS_LITERAL_ATTRIBUTES.contains(key)) {
             sb.append(NL).append(indent()).append("    
.").append(methodName).append("(").append(value).append(".class)");
@@ -561,7 +631,8 @@ public abstract class JavaDslModelWriterSupport {
             }
             return;
         }
-        if (BOOLEAN_ATTRIBUTES.contains(key)) {
+        if (BOOLEAN_ATTRIBUTES.contains(key) && ("true".equals(value) || 
"false".equals(value))) {
+            // a placeholder ({{enabled}}) is quoted below, for the String 
variant of the option
             sb.append(NL).append(indent()).append("    
.").append(methodName).append("(").append(value).append(")");
             return;
         }
@@ -569,9 +640,315 @@ public abstract class JavaDslModelWriterSupport {
             sb.append(NL).append(indent()).append("    
.").append(methodName).append("(").append(value).append(")");
             return;
         }
+        if (!inSubBuilder && !inDataFormatBuilder && !inRestParam && 
optionOwner != null) {
+            String call = typedOption(optionOwner.getClass(), methodName, 
value);
+            if (call != null) {
+                if (!call.isEmpty()) {
+                    sb.append(NL).append(indent()).append("    
.").append(call);
+                }
+                return;
+            }
+        }
         sb.append(NL).append(indent()).append("    
.").append(methodName).append("(").append(quote(value)).append(")");
     }
 
+    /**
+     * Options the Java DSL takes as arguments of the step itself, not as 
calls after it: the step's call is written
+     * again from its definition, with them. {@code 
convertBodyTo(byte[].class, "UTF-8")}, {@code removeHeaders("*",
+     * "foo")}, {@code toV("direct:x", "send", null)}, {@code 
log(LoggingLevel.INFO, "my.log", "hi")},
+     * {@code sample(10)}, {@code loopDoWhile(...)}.
+     *
+     * @return whether the option was written as an argument
+     */
+    private boolean stepArgumentOption(StringBuilder sb, String key) {
+        Object d = optionOwner;
+        String call = null;
+        Set<String> keys = Set.of();
+        if (d instanceof ConvertBodyDefinition c && Set.of("charset", 
"mandatory").contains(key)) {
+            String type = classLiteral(c.getType());
+            call = c.getCharset() != null
+                    ? "convertBodyTo(" + type + ", " + quote(c.getCharset()) + 
")"
+                    : "convertBodyTo(" + type + ", " + 
booleanLiteral(c.getMandatory()) + ")";
+            keys = Set.of("charset", "mandatory");
+        } else if (d instanceof ConvertHeaderDefinition c && Set.of("toName", 
"charset", "mandatory").contains(key)) {
+            call = convertTo("convertHeaderTo", c.getName(), c.getToName(), 
c.getType(), c.getCharset(), c.getMandatory());
+            keys = Set.of("toName", "charset", "mandatory");
+        } else if (d instanceof ConvertVariableDefinition c && 
Set.of("toName", "charset", "mandatory").contains(key)) {
+            call = convertTo("convertVariableTo", c.getName(), c.getToName(), 
c.getType(), c.getCharset(), c.getMandatory());
+            keys = Set.of("toName", "charset", "mandatory");
+        } else if (d instanceof RemoveHeadersDefinition r && 
"excludePattern".equals(key)) {
+            call = "removeHeaders(" + quote(r.getPattern()) + ", " + 
quote(r.getExcludePattern()) + ")";
+            keys = Set.of("excludePattern");
+        } else if (d instanceof ToDefinition t && !(d instanceof 
ToDynamicDefinition)
+                && Set.of("variableSend", "variableReceive").contains(key)) {
+            call = "toV(" + quote(t.getUri()) + ", " + 
quoteOrNull(t.getVariableSend()) + ", "
+                   + quoteOrNull(t.getVariableReceive()) + ")";
+            keys = Set.of("variableSend", "variableReceive");
+        } else if (d != null && d.getClass() == ToDynamicDefinition.class
+                && Set.of("variableSend", "variableReceive", 
"ignoreInvalidEndpoint", "cacheSize").contains(key)) {
+            // toD(uri) returns the parent: its options are arguments of 
toD(uri, ...), one of them at most
+            ToDynamicDefinition t = (ToDynamicDefinition) d;
+            if (t.getVariableSend() != null || t.getVariableReceive() != null) 
{
+                call = "toD(" + quote(t.getUri()) + ", " + 
quoteOrNull(t.getVariableSend()) + ", "
+                       + quoteOrNull(t.getVariableReceive()) + ")";
+            } else if (t.getIgnoreInvalidEndpoint() != null) {
+                call = "toD(" + quote(t.getUri()) + ", " + 
booleanLiteral(t.getIgnoreInvalidEndpoint()) + ")";
+            } else if (t.getCacheSize() != null && 
wholeNumber(t.getCacheSize()) != null) {
+                call = "toD(" + quote(t.getUri()) + ", " + t.getCacheSize() + 
")";
+            }
+            keys = Set.of("variableSend", "variableReceive", 
"ignoreInvalidEndpoint", "cacheSize");
+        } else if (d instanceof RemovePropertiesDefinition r && 
"excludePattern".equals(key)) {
+            call = "removeProperties(" + quote(r.getPattern()) + ", " + 
quote(r.getExcludePattern()) + ")";
+            keys = Set.of("excludePattern");
+        } else if (d instanceof BeanDefinition b && "beanType".equals(key) && 
b.getRef() == null) {
+            call = "bean(" + classLiteral(b.getBeanType()) + (b.getMethod() != 
null ? ", " + quote(b.getMethod()) : "") + ")";
+            keys = Set.of("beanType", "method");
+        } else if (d instanceof LogDefinition l && Set.of("loggingLevel", 
"logName", "marker").contains(key)) {
+            // log(message) returns the parent: its options are arguments of 
log(level, logName, marker, message)
+            String level = "LoggingLevel." + (l.getLoggingLevel() != null ? 
l.getLoggingLevel() : "INFO");
+            if (l.getMarker() != null) {
+                call = "log(" + level + ", " + (l.getLogName() != null ? 
quote(l.getLogName()) : "(String) null") + ", "
+                       + quote(l.getMarker()) + ", " + quote(l.getMessage()) + 
")";
+            } else if (l.getLogName() != null) {
+                call = "log(" + level + ", " + quote(l.getLogName()) + ", " + 
quote(l.getMessage()) + ")";
+            } else {
+                call = "log(" + level + ", " + quote(l.getMessage()) + ")";
+            }
+            keys = Set.of("loggingLevel", "logName", "marker");
+        } else if (d instanceof SamplingDefinition sd && 
Set.of("messageFrequency", "samplePeriod").contains(key)) {
+            call = sd.getMessageFrequency() != null
+                    ? "sample(" + sd.getMessageFrequency() + 
(isLongLiteral(sd.getMessageFrequency()) ? "L" : "") + ")"
+                    : "sample(" + quote(sd.getSamplePeriod()) + ")";
+            keys = Set.of("messageFrequency", "samplePeriod");
+        } else if (d instanceof RollbackDefinition rb && 
Set.of("markRollbackOnly", "markRollbackOnlyLast").contains(key)) {
+            // rollback() returns the parent: markRollbackOnly() is the step, 
not an option of it
+            if ("true".equals(rb.getMarkRollbackOnly())) {
+                call = "markRollbackOnly()";
+            } else if ("true".equals(rb.getMarkRollbackOnlyLast())) {
+                call = "markRollbackOnlyLast()";
+            }
+            keys = Set.of("markRollbackOnly", "markRollbackOnlyLast");
+        } else if (d instanceof LoopDefinition loop && "doWhile".equals(key)) {
+            if ("true".equals(loop.getDoWhile()) && loop.getExpression() != 
null) {
+                call = "loopDoWhile(" + expressionDsl(loop.getExpression()) + 
")";
+            }
+            keys = Set.of("doWhile");
+        }
+        if (keys.isEmpty()) {
+            return false;
+        }
+        handledAttributes.addAll(keys);
+        if (call != null && stepStart >= 0 && stepStart < sb.length()) {
+            int end = sb.indexOf(NL, stepStart + 1);
+            if (end < 0) {
+                end = sb.length();
+            }
+            String line = sb.substring(stepStart, end);
+            int dot = line.indexOf('.');
+            if (dot > 0) {
+                sb.replace(stepStart, end, line.substring(0, dot + 1) + call);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * A route built in Java keeps some options in forms XML and YAML do not 
have (a Class, an array): the step's call
+     * is written again with them, without changing the model. {@code 
throwException(Foo.class, "msg")},
+     * {@code removeHeaders("*", "Keep*")}.
+     */
+    private void rewriteFromJavaForms(StringBuilder sb, Object def) {
+        String call = null;
+        if (def instanceof ThrowExceptionDefinition t && t.getExceptionType() 
== null && t.getExceptionClass() != null) {
+            call = "throwException(" + typeName(t.getExceptionClass()) + 
".class, " + quote(t.getMessage()) + ")";
+        } else if (def instanceof RemoveHeadersDefinition r && 
r.getExcludePattern() == null
+                && r.getExcludePatterns() != null && 
r.getExcludePatterns().length > 0) {
+            call = "removeHeaders(" + quote(r.getPattern()) + ", " + 
quotedList(r.getExcludePatterns()) + ")";
+        } else if (def instanceof RemovePropertiesDefinition r && 
r.getExcludePattern() == null
+                && r.getExcludePatterns() != null && 
r.getExcludePatterns().length > 0) {
+            call = "removeProperties(" + quote(r.getPattern()) + ", " + 
quotedList(r.getExcludePatterns()) + ")";
+        }
+        if (call == null || stepStart < 0 || stepStart >= sb.length()) {
+            return;
+        }
+        int end = sb.indexOf(NL, stepStart + 1);
+        if (end < 0) {
+            end = sb.length();
+        }
+        String line = sb.substring(stepStart, end);
+        int dot = line.indexOf('.');
+        if (dot > 0) {
+            sb.replace(stepStart, end, line.substring(0, dot + 1) + call);
+        }
+    }
+
+    private String quotedList(String[] values) {
+        StringBuilder b = new StringBuilder();
+        for (String v : values) {
+            b.append(b.isEmpty() ? "" : ", ").append(quote(v));
+        }
+        return b.toString();
+    }
+
+    /** A class as Java names it in source: java.lang.String as String, byte[] 
as byte[], a nested one with a dot. */
+    private String typeName(Class<?> type) {
+        if (type.isArray()) {
+            return typeName(type.getComponentType()) + "[]";
+        }
+        String name = type.getName().replace('$', '.');
+        return name.startsWith("java.lang.") && name.indexOf('.', 10) < 0 ? 
name.substring(10) : name;
+    }
+
+    /** setHeaders("h1", expr1, "h2", expr2): the Java DSL takes the names and 
values as varargs of the step. */
+    private boolean writeNamesAndValues(StringBuilder sb, String key, List<?> 
list) {
+        StringBuilder args = new StringBuilder();
+        for (Object o : list) {
+            String name;
+            ExpressionDefinition expr;
+            if (o instanceof SetHeaderDefinition h) {
+                name = h.getName();
+                expr = h.getExpression();
+            } else if (o instanceof SetVariableDefinition v) {
+                name = v.getName();
+                expr = v.getExpression();
+            } else {
+                return false;
+            }
+            if (name == null || expr == null) {
+                return false;
+            }
+            args.append(args.isEmpty() ? "" : ", 
").append(quote(name)).append(", ").append(expressionDsl(expr));
+        }
+        if (stepStart < 0 || stepStart >= sb.length()) {
+            return false;
+        }
+        int end = sb.indexOf(NL, stepStart + 1);
+        if (end < 0) {
+            end = sb.length();
+        }
+        String line = sb.substring(stepStart, end);
+        int dot = line.indexOf('.');
+        String method = "headers".equals(key) ? "setHeaders" : "setVariables";
+        sb.replace(stepStart, end, line.substring(0, dot + 1) + method + "(" + 
args + ")");
+        handledAttributes.add(key);
+        return true;
+    }
+
+    private String convertTo(String method, String name, String toName, String 
type, String charset, String mandatory) {
+        String cls = classLiteral(type);
+        if (toName != null) {
+            return method + "(" + quote(name) + ", " + quote(toName) + ", " + 
cls + ")";
+        }
+        if (charset != null) {
+            return method + "(" + quote(name) + ", " + cls + ", " + 
quote(charset) + ")";
+        }
+        return method + "(" + quote(name) + ", " + cls + ", " + 
booleanLiteral(mandatory) + ")";
+    }
+
+    private static String booleanLiteralOrFalse(String value) {
+        return "true".equalsIgnoreCase(value) ? "true" : "false";
+    }
+
+    private static String booleanLiteral(String value) {
+        return "false".equalsIgnoreCase(value) ? "false" : "true";
+    }
+
+    private String quoteOrNull(String value) {
+        return value != null ? quote(value) : "null";
+    }
+
+    /** Options whose fluent method in the Java DSL has another name than the 
option. */
+    private static final Map<String, String> OPTION_RENAMES = 
Map.of("errorHandlerRef", "errorHandler");
+
+    /**
+     * How an option is written when its fluent method does not take a String: 
{@code name()} for a toggle (nothing when
+     * false), {@code name(10)} for a number (a duration such as {@code 2s} in 
millis), {@code name(true)},
+     * {@code name(LoggingLevel.WARN)}. Null when a {@code name(String)} 
method exists (the value is quoted, as a
+     * placeholder must be) or no method fits; the empty string when nothing 
is to be written.
+     */
+    static String typedOption(Class<?> type, String name, String value) {
+        Method noArg = null;
+        List<Class<?>> params = new ArrayList<>();
+        for (Method m : type.getMethods()) {
+            if (!m.getName().equals(name) || m.isBridge() || 
Modifier.isStatic(m.getModifiers())) {
+                continue;
+            }
+            if (m.getParameterCount() == 0) {
+                noArg = m;
+            } else if (m.getParameterCount() == 1) {
+                params.add(m.getParameterTypes()[0]);
+            }
+        }
+        if (params.contains(String.class) || params.contains(Object.class)) {
+            return null;
+        }
+        String v = value.strip();
+        // a property placeholder can only go where a String does
+        if (v.startsWith("{{")) {
+            return null;
+        }
+        for (Class<?> p : params) {
+            if ((p == boolean.class || p == Boolean.class) && 
("true".equals(v) || "false".equals(v))) {
+                return name + "(" + v + ")";
+            }
+            if (p == int.class || p == Integer.class || p == long.class || p 
== Long.class) {
+                String number = wholeNumber(v);
+                if (number != null) {
+                    return name + "(" + number + ((p == long.class || p == 
Long.class) && isLongLiteral(number) ? "L" : "")
+                           + ")";
+                }
+            }
+            if (p == double.class || p == Double.class || p == float.class || 
p == Float.class) {
+                try {
+                    Double.parseDouble(v);
+                    return name + "(" + v + (p == float.class || p == 
Float.class ? "f" : "") + ")";
+                } catch (NumberFormatException e) {
+                    // not a number
+                }
+            }
+            if (p.isEnum()) {
+                for (Object c : p.getEnumConstants()) {
+                    if (((Enum<?>) c).name().equalsIgnoreCase(v)) {
+                        return name + "(" + p.getSimpleName() + "." + 
((Enum<?>) c).name() + ")";
+                    }
+                }
+            }
+        }
+        if (noArg != null && params.isEmpty()) {
+            return "true".equals(v) ? name + "()" : "";
+        }
+        // mode="BeforeConsumer" is modeBeforeConsumer()
+        if (params.isEmpty() && !v.isEmpty()) {
+            String combined = name + Character.toUpperCase(v.charAt(0)) + 
v.substring(1);
+            try {
+                if (type.getMethod(combined).getParameterCount() == 0) {
+                    return combined + "()";
+                }
+            } catch (NoSuchMethodException e) {
+                // not that either
+            }
+        }
+        return null;
+    }
+
+    /** A whole number, or a duration such as 2s or 1m30s in millis; null for 
anything else. */
+    private static String wholeNumber(String value) {
+        try {
+            return String.valueOf(Long.parseLong(value));
+        } catch (NumberFormatException e) {
+            try {
+                return String.valueOf(TimeUtils.toMilliSeconds(value));
+            } catch (RuntimeException ex) {
+                return null;
+            }
+        }
+    }
+
+    private static boolean isLongLiteral(String number) {
+        long l = Long.parseLong(number);
+        return l > Integer.MAX_VALUE || l < Integer.MIN_VALUE;
+    }
+
     private static boolean isPrimitiveLiteral(String value) {
         if ("true".equals(value) || "false".equals(value)) {
             return true;
@@ -596,15 +973,25 @@ public abstract class JavaDslModelWriterSupport {
 
     protected <T> void doWriteChildElement(StringBuilder sb, String key, T 
value, BiConsumer<StringBuilder, T> writer) {
         if (value != null && !handledAttributes.contains(key)) {
-            if (BLOCK_CHILDREN.contains(key)) {
+            if ("onFallback".equals(key)) {
+                // onFallback() takes every step after it: it is written last, 
before the circuit breaker's end()
+                pendingFallback = () -> {
+                    indentLevel++;
+                    sb.append(NL).append(indent()).append(".onFallback()");
+                    writer.accept(sb, value);
+                    indentLevel--;
+                };
+            } else if (BLOCK_CHILDREN.contains(key)) {
                 indentLevel++;
                 
sb.append(NL).append(indent()).append(".").append(key).append("()");
                 writer.accept(sb, value);
                 indentLevel--;
+            } else if (value instanceof StreamResequencerConfig src) {
+                writeStreamResequencerConfig(sb, src);
             } else if (value instanceof ExpressionSubElementDefinition esd) {
                 if (esd.getExpressionType() != null) {
                     boolean isPredicate = PREDICATE_CHILDREN.contains(key);
-                    sb.append(NL).append(indent()).append("    
.").append(key).append("(");
+                    sb.append(NL).append(indent()).append("    
.").append(CHILD_RENAMES.getOrDefault(key, key)).append("(");
                     if (isPredicate) {
                         sb.append("(Predicate) ");
                     }
@@ -646,6 +1033,19 @@ public abstract class JavaDslModelWriterSupport {
 
     protected <T> void doWriteElementRef(StringBuilder sb, String key, T 
value, BiConsumer<StringBuilder, T> writer) {
         if (value != null && !handledAttributes.contains(key)) {
+            // a route's input and output types are options of the route: 
.inputType("urn")
+            if (value instanceof InputTypeDefinition in && in.getUrn() != 
null) {
+                sb.append(NL).append(indent()).append(".inputType")
+                        .append("true".equals(in.getValidate()) ? 
"WithValidate" : "")
+                        .append("(").append(quote(in.getUrn())).append(")");
+                return;
+            }
+            if (value instanceof OutputTypeDefinition out && out.getUrn() != 
null) {
+                sb.append(NL).append(indent()).append(".outputType")
+                        .append("true".equals(out.getValidate()) ? 
"WithValidate" : "")
+                        .append("(").append(quote(out.getUrn())).append(")");
+                return;
+            }
             writer.accept(sb, value);
         }
     }
@@ -666,6 +1066,11 @@ public abstract class JavaDslModelWriterSupport {
     protected <T> void doWriteChildList(
             StringBuilder sb, String key, List<T> list, 
BiConsumer<StringBuilder, T> writer) {
         if (list != null && !list.isEmpty() && 
!handledAttributes.contains(key)) {
+            if (("headers".equals(key) && optionOwner instanceof 
SetHeadersDefinition
+                    || "variables".equals(key) && optionOwner instanceof 
SetVariablesDefinition)
+                    && writeNamesAndValues(sb, key, list)) {
+                return;
+            }
             if ("value".equals(key) && list.get(0) instanceof ValueDefinition) 
{
                 writeAllowableValues(sb, list);
                 return;
@@ -864,13 +1269,42 @@ public abstract class JavaDslModelWriterSupport {
                 || def instanceof InterceptSendToEndpointDefinition;
     }
 
+    /**
+     * resequence().stream() with its options: capacity(int), timeout(long) 
and deliveryAttemptInterval(long) in millis.
+     */
+    protected void writeStreamResequencerConfig(StringBuilder sb, 
StreamResequencerConfig src) {
+        sb.append(NL).append(indent()).append("    .stream()");
+        if (src.getCapacity() != null) {
+            sb.append(NL).append(indent()).append("    
.capacity(").append(src.getCapacity()).append(")");
+        }
+        if (src.getTimeout() != null) {
+            String millis = wholeNumber(src.getTimeout());
+            sb.append(NL).append(indent()).append("    
.timeout(").append(millis != null ? millis : src.getTimeout())
+                    .append(")");
+        }
+        if (src.getDeliveryAttemptInterval() != null) {
+            String millis = wholeNumber(src.getDeliveryAttemptInterval());
+            sb.append(NL).append(indent()).append("    
.deliveryAttemptInterval(")
+                    .append(millis != null ? millis : 
src.getDeliveryAttemptInterval()).append(")");
+        }
+        if ("true".equals(src.getIgnoreInvalidExchanges())) {
+            sb.append(NL).append(indent()).append("    
.ignoreInvalidExchanges()");
+        }
+        if ("true".equals(src.getRejectOld())) {
+            sb.append(NL).append(indent()).append("    .rejectOld()");
+        }
+    }
+
     protected void writeBatchResequencerConfig(StringBuilder sb, 
BatchResequencerConfig brc) {
         sb.append(NL).append(indent()).append("    .batch()");
         if (brc.getBatchSize() != null) {
             sb.append(NL).append(indent()).append("    
.size(").append(brc.getBatchSize()).append(")");
         }
         if (brc.getBatchTimeout() != null) {
-            sb.append(NL).append(indent()).append("    
.timeout(").append(brc.getBatchTimeout()).append(")");
+            // timeout(long): a duration (1s) as millis
+            String millis = wholeNumber(brc.getBatchTimeout());
+            sb.append(NL).append(indent()).append("    .timeout(")
+                    .append(millis != null ? millis : 
brc.getBatchTimeout()).append(")");
         }
     }
 
@@ -920,6 +1354,16 @@ public abstract class JavaDslModelWriterSupport {
                     first = false;
                     sb.append(classLiteral(ex));
                 }
+            } else if (failover.getExceptionTypes() != null && 
!failover.getExceptionTypes().isEmpty()) {
+                // built in Java: failover(IOException.class) keeps the classes
+                boolean first = true;
+                for (Class<?> ex : failover.getExceptionTypes()) {
+                    if (!first) {
+                        sb.append(", ");
+                    }
+                    first = false;
+                    sb.append(typeName(ex)).append(".class");
+                }
             }
             sb.append(")");
             handledAttributes.add("exception");
@@ -933,6 +1377,19 @@ public abstract class JavaDslModelWriterSupport {
             sb.append(")");
             handledAttributes.add("correlationExpression");
             handledAttributes.add("expression");
+        } else if (lb instanceof CustomLoadBalancerDefinition custom && 
custom.getRef() != null) {
+            sb.append(".custom(").append(quote(custom.getRef())).append(")");
+            handledAttributes.add("ref");
+        } else if (lb instanceof WeightedLoadBalancerDefinition w && 
w.getDistributionRatio() != null) {
+            
sb.append(".weighted(").append(booleanLiteralOrFalse(w.getRoundRobin())).append(",
 ")
+                    .append(quote(w.getDistributionRatio()));
+            if (w.getDistributionRatioDelimiter() != null && 
!",".equals(w.getDistributionRatioDelimiter())) {
+                sb.append(", 
").append(quote(w.getDistributionRatioDelimiter()));
+            }
+            sb.append(")");
+            handledAttributes.add("roundRobin");
+            handledAttributes.add("distributionRatio");
+            handledAttributes.add("distributionRatioDelimiter");
         } else {
             // Derive method name: strip "LoadBalancer" suffix, lowercase 
first char
             String className = lb.getClass().getSimpleName();
@@ -946,6 +1403,12 @@ public abstract class JavaDslModelWriterSupport {
         if (expr == null) {
             return "";
         }
+        // a route built in Java keeps setProperty("p").constant("v") or 
header("x") as a Java object wrapped in an
+        // ExpressionDefinition: the language inside it is written (the model 
is not changed)
+        ExpressionDefinition language = languageOf(expr);
+        if (language != expr) {
+            return expressionDsl(language);
+        }
         String value = expr.getExpression();
         if (value == null) {
             value = "";
@@ -965,6 +1428,26 @@ public abstract class JavaDslModelWriterSupport {
         return compactExpressionDsl(expr, value);
     }
 
+    /** The language inside a wrapped expression clause or value builder; the 
expression itself when there is none. */
+    private static ExpressionDefinition languageOf(ExpressionDefinition expr) {
+        if (expr.getClass() != ExpressionDefinition.class) {
+            return expr;
+        }
+        Object v = expr.getExpressionValue() != null ? 
expr.getExpressionValue() : expr.getPredicate();
+        for (int i = 0; i < 5 && v != null; i++) {
+            if (v instanceof ExpressionDefinition d) {
+                return d;
+            } else if (v instanceof ExpressionClause<?> clause) {
+                v = clause.getExpressionType() instanceof ExpressionDefinition 
d ? d : clause.getExpressionValue();
+            } else if (v instanceof ValueBuilder vb) {
+                v = vb.getExpression();
+            } else {
+                break;
+            }
+        }
+        return expr;
+    }
+
     private String compactExpressionDsl(ExpressionDefinition expr, String 
value) {
         String quotedValue = quote(value);
 
@@ -995,8 +1478,22 @@ public abstract class JavaDslModelWriterSupport {
         if (expr instanceof DatasonnetExpression) {
             return "datasonnet(" + quotedValue + ")";
         }
-        if (expr instanceof TokenizerExpression) {
-            return "tokenize(" + quotedValue + ")";
+        if (expr instanceof TokenizerExpression t) {
+            // the token is an option, not the expression text: the language 
builder keeps them all
+            StringBuilder b = new StringBuilder("expression().tokenize()");
+            appendOption(b, "token", t.getToken());
+            appendOption(b, "endToken", t.getEndToken());
+            appendOption(b, "inheritNamespaceTagName", 
t.getInheritNamespaceTagName());
+            appendOption(b, "regex", t.getRegex());
+            appendOption(b, "xml", t.getXml());
+            appendOption(b, "includeTokens", t.getIncludeTokens());
+            appendOption(b, "group", t.getGroup());
+            appendOption(b, "groupDelimiter", t.getGroupDelimiter());
+            appendOption(b, "skipFirst", t.getSkipFirst());
+            if (t.getSource() != null) {
+                appendOption(b, "source", t.getSource());
+            }
+            return b.append(".end()").toString();
         }
         if (expr instanceof XMLTokenizerExpression) {
             return "xtokenize(" + quotedValue + ")";
diff --git 
a/core/camel-java-io/src/test/java/org/apache/camel/java/LwModelToJavaDumperTest.java
 
b/core/camel-java-io/src/test/java/org/apache/camel/java/LwModelToJavaDumperTest.java
index f040d2bd772a..6e77e7bb614a 100644
--- 
a/core/camel-java-io/src/test/java/org/apache/camel/java/LwModelToJavaDumperTest.java
+++ 
b/core/camel-java-io/src/test/java/org/apache/camel/java/LwModelToJavaDumperTest.java
@@ -16,12 +16,15 @@
  */
 package org.apache.camel.java;
 
+import java.io.IOException;
+
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.builder.RouteConfigurationBuilder;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
+import org.apache.camel.model.ThrowExceptionDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.junit.jupiter.api.Test;
 
@@ -73,4 +76,34 @@ public class LwModelToJavaDumperTest {
             assertThat(java).contains("\"Hello\\n  ${body}\"");
         }
     }
+
+    /**
+     * A route built in Java keeps expression clauses, classes and arrays the 
XML DSL does not have: they are written as
+     * Java DSL, without changing the model (CAMEL-25157).
+     */
+    @Test
+    public void testDumpRouteBuiltInJava() throws Exception {
+        try (DefaultCamelContext context = new DefaultCamelContext()) {
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from("direct:start").routeId("javaBuilt")
+                            .setProperty("p").constant("v")
+                            .throwException(IllegalArgumentException.class, 
"Forced")
+                            
.loadBalance().failover(IOException.class).to("mock:x").end()
+                            .removeHeaders("*", "Keep*")
+                            .to("mock:result");
+                }
+            });
+            String java = new LwModelToJavaDumper().dumpModelAsJava(context, 
context.getRouteDefinition("javaBuilt"));
+            assertThat(java).contains(
+                    ".setProperty(\"p\", constant(\"v\"))",
+                    ".throwException(IllegalArgumentException.class, 
\"Forced\")",
+                    ".failover(java.io.IOException.class)",
+                    ".removeHeaders(\"*\", \"Keep*\")");
+            // the model was not changed
+            assertThat(((ThrowExceptionDefinition) 
context.getRouteDefinition("javaBuilt").getOutputs().get(1))
+                    .getExceptionType()).isNull();
+        }
+    }
 }
diff --git 
a/core/camel-java-io/src/test/java/org/apache/camel/java/in/RoundTripTest.java 
b/core/camel-java-io/src/test/java/org/apache/camel/java/in/RoundTripTest.java
index 3d997cfe3455..e05dbad37745 100644
--- 
a/core/camel-java-io/src/test/java/org/apache/camel/java/in/RoundTripTest.java
+++ 
b/core/camel-java-io/src/test/java/org/apache/camel/java/in/RoundTripTest.java
@@ -67,12 +67,7 @@ class RoundTripTest {
      * the list only shrinks.
      */
     private static final Map<String, String> KNOWN = Map.of(
-            "resequencerBatch.xml", "the DSL stores timeout(2000) as 2s0ms, 
which the dumper writes unquoted",
-            "resequencerStream.xml", "the DSL stores timeout(2000) as 2s0ms, 
which the dumper writes unquoted",
-            "routeWithCircuitBreaker.xml", "the dumper writes steps after 
onFallback() without end(): the DSL nests them",
-            "circuitBreakerResilience4j.xml", "the dumper writes steps after 
onFallback() without end(): the DSL nests them",
-            "routeWithSetHeaders.xml", "the dumper writes setHeaders() as 
nested setHeader calls, not varargs",
-            "routeWithSetVariables.xml", "the dumper writes setVariables() as 
nested setVariable calls, not varargs");
+            "circuitBreakerResilience4j.xml", "failureRateThreshold(float) 
keeps 30 as 30.0: the same value, written apart");
 
     static String dump(RouteDefinition route) {
         try (DefaultCamelContext context = new DefaultCamelContext()) {
@@ -239,9 +234,10 @@ class RoundTripTest {
         }
         String report = String.format("%d of %d routes read back (%d the 
dumper could not write)%n%s%n%n%s", same, routes,
                 dumpFailed, reasons, String.join("\n\n", examples));
-        System.out.println(report);
+        Files.writeString(Path.of("target/spring-xml-corpus-report.txt"), 
report);
         assertThat(routes).isGreaterThan(500);
-        // most of the rest is Java the dumper writes that is not Java DSL 
(CAMEL-25157); raise the floor as it improves
-        assertThat(same).as(report).isGreaterThanOrEqualTo(674);
+        // the rest has no Java DSL form (throwException with a ref, options 
of marshal and unmarshal, a logger ref)
+        // or is written apart from what XML holds; raise the floor as it 
improves
+        assertThat(same).as(report).isGreaterThanOrEqualTo(815);
     }
 }
diff --git 
a/core/camel-java-io/src/test/resources/stepArgumentsAndTypedOptions.xml 
b/core/camel-java-io/src/test/resources/stepArgumentsAndTypedOptions.xml
new file mode 100644
index 000000000000..3957973da0d3
--- /dev/null
+++ b/core/camel-java-io/src/test/resources/stepArgumentsAndTypedOptions.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<!-- Options the Java DSL takes as arguments of the step, or in another form 
than name("value") (CAMEL-25157) -->
+<routes xmlns="http://camel.apache.org/schema/xml-io";>
+  <route id="options" startupOrder="5" errorHandlerRef="myErrorHandler">
+    <from uri="direct:options"/>
+    <inputType urn="json:Order"/>
+    <convertBodyTo type="java.lang.String" charset="UTF-8"/>
+    <convertBodyTo type="java.lang.Integer" mandatory="false"/>
+    <convertHeaderTo name="a" toName="b" type="java.lang.String"/>
+    <removeHeaders pattern="Beer*" excludePattern="BeerKeep"/>
+    <removeProperties pattern="f*" excludePattern="fiu"/>
+    <setHeaders>
+      <setHeader name="h1"><simple>${body}</simple></setHeader>
+      <setHeader name="h2"><constant>two</constant></setHeader>
+    </setHeaders>
+    <setVariables>
+      <setVariable name="v1"><constant>one</constant></setVariable>
+    </setVariables>
+    <to uri="direct:send" variableSend="v1"/>
+    <toD uri="mock:${header.foo}" ignoreInvalidEndpoint="true"/>
+    <log message="hi" logName="my.log" loggingLevel="WARN"/>
+    <sample messageFrequency="10"/>
+    <recipientList stopOnException="true" 
ignoreInvalidEndpoints="true"><header>to</header></recipientList>
+    <to uri="mock:end"/>
+  </route>
+  <route id="blocks">
+    <from uri="direct:blocks"/>
+    <onCompletion mode="BeforeConsumer">
+      <to uri="mock:done"/>
+    </onCompletion>
+    <loop doWhile="true">
+      <simple>${body} != 'done'</simple>
+      <to uri="mock:loop"/>
+    </loop>
+    <aggregate aggregationStrategy="myStrategy">
+      <correlationExpression><header>id</header></correlationExpression>
+      
<completionSizeExpression><header>size</header></completionSizeExpression>
+      <to uri="mock:aggregated"/>
+    </aggregate>
+    <enrich 
aggregationStrategy="myStrategy"><constant>direct:resource</constant></enrich>
+    <split>
+      <tokenize token=","/>
+      <to uri="mock:part"/>
+    </split>
+    <loadBalance>
+      <weightedLoadBalancer distributionRatio="4,2,1"/>
+      <to uri="mock:x"/>
+      <to uri="mock:y"/>
+      <to uri="mock:z"/>
+    </loadBalance>
+    <policy ref="myPolicy">
+      <to uri="mock:policy"/>
+    </policy>
+    <to uri="mock:after"/>
+  </route>
+  <route id="rollback">
+    <from uri="direct:rollback"/>
+    <rollback markRollbackOnly="true"/>
+  </route>
+</routes>
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/model-java-dsl-writer.vm
 
b/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/model-java-dsl-writer.vm
index 8d389c26aabb..12dc6184d1c6 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/model-java-dsl-writer.vm
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/resources/velocity/model-java-dsl-writer.vm
@@ -308,6 +308,7 @@ public class JavaDslModelWriter extends 
JavaDslModelWriterSupport {
                 case "${t}" -> {
                     ${t} _d = (${t}) v;
                     handledAttributes.clear();
+                    beginInlineStep(sb, _d);
                     sb.append("\n").append(indent()).append(".${n}(");
                     boolean _first = true;
                 #foreach( $arg in $primaryArgs )

Reply via email to