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

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

commit 07e99354c0ee5b4c85d0ee4770a4ec87f223dd12
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Feb 16 21:15:25 2026 +0100

    CAMEL-23014: camel-core - Fix route dumper to support propOrder in model. 
And make sure circuitBreaker has onFallback last.
---
 .../modules/eips/pages/circuitBreaker-eip.adoc     | 23 ++++----
 .../java/org/apache/camel/xml/out/ModelWriter.java | 40 +++++++-------
 .../org/apache/camel/yaml/out/ModelWriter.java     | 40 +++++++-------
 .../maven/packaging/ModelWriterGeneratorMojo.java  | 63 +++++++++++++++++++---
 .../packaging/XmlModelWriterGeneratorMojo.java     |  5 +-
 .../packaging/YamlModelWriterGeneratorMojo.java    |  5 +-
 6 files changed, 112 insertions(+), 64 deletions(-)

diff --git 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
index 801ac1e1c5f2..19902985ee75 100644
--- 
a/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
+++ 
b/core/camel-core-engine/src/main/docs/modules/eips/pages/circuitBreaker-eip.adoc
@@ -80,25 +80,20 @@ YAML::
 ----
 - route:
     from:
-      uri: direct
-      parameters:
-        name: start
+      uri: direct:start
       steps:
         - circuitBreaker:
-            onFallback:
-              steps:
-                - transform:
-                    constant:
-                      expression: Fallback message
             steps:
               - to:
-                  uri: http
-                  parameters:
-                    httpUri: fooservice.com/slow
+                  uri: http://fooservice.com/slow
+              - onFallback:
+                  steps:
+                    - transform:
+                        expression:
+                          constant:
+                            expression: Fallback message
         - to:
-            uri: mock
-            parameters:
-              name: result
+            uri: mock:result
 ----
 ====
 
diff --git 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index d819281e9904..2c855e51690d 100644
--- 
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ 
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -927,9 +927,9 @@ public class ModelWriter extends BaseWriter {
         doWriteAttribute("inheritErrorHandler", 
toString(def.getInheritErrorHandler()), "false");
         doWriteAttribute("configuration", def.getConfiguration(), null);
         doWriteElement("resilience4jConfiguration", 
def.getResilience4jConfiguration(), 
this::doWriteResilience4jConfigurationDefinition);
-        doWriteElement("onFallback", def.getOnFallback(), 
this::doWriteOnFallbackDefinition);
         doWriteElement("faultToleranceConfiguration", 
def.getFaultToleranceConfiguration(), 
this::doWriteFaultToleranceConfigurationDefinition);
         doWriteList(null, null, def.getOutputs(), 
this::doWriteProcessorDefinitionRef);
+        doWriteElement("onFallback", def.getOnFallback(), 
this::doWriteOnFallbackDefinition);
         endElement(name);
     }
     protected void doWriteClaimCheckDefinition(String name, 
ClaimCheckDefinition def) throws IOException {
@@ -1284,11 +1284,11 @@ public class ModelWriter extends BaseWriter {
     protected void doWriteOnCompletionDefinition(String name, 
OnCompletionDefinition def) throws IOException {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
-        doWriteAttribute("parallelProcessing", def.getParallelProcessing(), 
null);
-        doWriteAttribute("useOriginalMessage", def.getUseOriginalMessage(), 
null);
         doWriteAttribute("mode", def.getMode(), "AfterConsumer");
         doWriteAttribute("onCompleteOnly", def.getOnCompleteOnly(), null);
         doWriteAttribute("executorService", def.getExecutorService(), null);
+        doWriteAttribute("parallelProcessing", def.getParallelProcessing(), 
null);
+        doWriteAttribute("useOriginalMessage", def.getUseOriginalMessage(), 
null);
         doWriteAttribute("onFailureOnly", def.getOnFailureOnly(), null);
         doWriteElement("onWhen", def.getOnWhen(), 
this::doWriteOnWhenDefinition);
         doWriteList(null, null, def.getOutputs(), 
this::doWriteProcessorDefinitionRef);
@@ -1646,22 +1646,22 @@ public class ModelWriter extends BaseWriter {
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("template", toString(def.isTemplate()), null);
         doWriteAttribute("routeConfigurationId", 
def.getRouteConfigurationId(), null);
+        doWriteAttribute("logMask", def.getLogMask(), null);
         doWriteAttribute("streamCache", def.getStreamCache(), null);
+        doWriteAttribute("autoStartup", def.getAutoStartup(), "true");
         doWriteAttribute("trace", def.getTrace(), null);
+        doWriteAttribute("nodePrefixId", def.getNodePrefixId(), null);
+        doWriteAttribute("delayer", def.getDelayer(), null);
+        doWriteAttribute("messageHistory", def.getMessageHistory(), null);
+        doWriteAttribute("kamelet", toString(def.isKamelet()), null);
+        doWriteAttribute("group", def.getGroup(), null);
         doWriteAttribute("rest", toString(def.isRest()), null);
         doWriteAttribute("routePolicyRef", def.getRoutePolicyRef(), null);
         doWriteAttribute("precondition", def.getPrecondition(), null);
+        doWriteAttribute("errorHandlerRef", def.getErrorHandlerRef(), null);
         doWriteAttribute("shutdownRoute", def.getShutdownRoute(), "Default");
         doWriteAttribute("shutdownRunningTask", def.getShutdownRunningTask(), 
"CompleteCurrentTaskOnly");
         doWriteAttribute("startupOrder", toString(def.getStartupOrder()), 
null);
-        doWriteAttribute("logMask", def.getLogMask(), null);
-        doWriteAttribute("nodePrefixId", def.getNodePrefixId(), null);
-        doWriteAttribute("messageHistory", def.getMessageHistory(), null);
-        doWriteAttribute("kamelet", toString(def.isKamelet()), null);
-        doWriteAttribute("autoStartup", def.getAutoStartup(), "true");
-        doWriteAttribute("delayer", def.getDelayer(), null);
-        doWriteAttribute("group", def.getGroup(), null);
-        doWriteAttribute("errorHandlerRef", def.getErrorHandlerRef(), null);
         doWriteList(null, "routeProperty", def.getRouteProperties(), 
this::doWritePropertyDefinition);
         doWriteElement("errorHandler", def.getErrorHandler(), 
this::doWriteErrorHandlerDefinition);
         doWriteElement(null, def.getInput(), this::doWriteFromDefinitionRef);
@@ -1679,8 +1679,8 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteOptionalIdentifiedDefinitionAttributes(def);
         doWriteList(null, "templateParameter", def.getTemplateParameters(), 
this::doWriteRouteTemplateParameterDefinition);
-        doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
         doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteBeanFactoryDefinition);
+        doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
         endElement(name);
     }
     protected void doWriteRouteTemplateParameterDefinition(String name, 
RouteTemplateParameterDefinition def) throws IOException {
@@ -1838,10 +1838,10 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteAttribute("routeId", def.getRouteId(), null);
         doWriteAttribute("routeTemplateRef", def.getRouteTemplateRef(), null);
-        doWriteAttribute("prefixId", def.getPrefixId(), null);
         doWriteAttribute("group", def.getGroup(), null);
-        doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
+        doWriteAttribute("prefixId", def.getPrefixId(), null);
         doWriteList(null, "parameter", def.getParameters(), 
this::doWriteTemplatedRouteParameterDefinition);
+        doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
         endElement(name);
     }
     protected void doWriteTemplatedRouteParameterDefinition(String name, 
TemplatedRouteParameterDefinition def) throws IOException {
@@ -1888,10 +1888,10 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("mode", def.getMode(), "TotalRequests");
-        doWriteAttribute("timePeriodMillis", def.getTimePeriodMillis(), 
"1000");
-        doWriteAttribute("rejectExecution", def.getRejectExecution(), null);
         doWriteAttribute("callerRunsWhenRejected", 
def.getCallerRunsWhenRejected(), "true");
         doWriteAttribute("executorService", def.getExecutorService(), null);
+        doWriteAttribute("timePeriodMillis", def.getTimePeriodMillis(), 
"1000");
+        doWriteAttribute("rejectExecution", def.getRejectExecution(), null);
         doWriteAttribute("asyncDelayed", def.getAsyncDelayed(), null);
         doWriteExpressionNodeElements(def);
         doWriteElement("correlationExpression", 
def.getCorrelationExpression(), this::doWriteExpressionSubElementDefinition);
@@ -2090,16 +2090,16 @@ public class ModelWriter extends BaseWriter {
         endElement(name);
     }
     protected void doWriteBeansDefinitionElements(BeansDefinition def) throws 
IOException {
-        doWriteList(null, "route", def.getRoutes(), 
this::doWriteRouteDefinition);
-        domElements(def.getSpringOrBlueprintBeans());
-        doWriteList("dataFormats", "dataFormat", def.getDataFormats(), 
this::doWriteDataFormatDefinition);
         doWriteList(null, "component-scan", def.getComponentScanning(), 
this::doWriteComponentScanDefinition);
         doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
+        domElements(def.getSpringOrBlueprintBeans());
+        doWriteList("dataFormats", "dataFormat", def.getDataFormats(), 
this::doWriteDataFormatDefinition);
         doWriteList(null, "restConfiguration", def.getRestConfigurations(), 
this::doWriteRestConfigurationDefinition);
         doWriteList(null, "rest", def.getRests(), this::doWriteRestDefinition);
         doWriteList(null, "routeConfiguration", def.getRouteConfigurations(), 
this::doWriteRouteConfigurationDefinition);
         doWriteList(null, "routeTemplate", def.getRouteTemplates(), 
this::doWriteRouteTemplateDefinition);
         doWriteList(null, "templatedRoute", def.getTemplatedRoutes(), 
this::doWriteTemplatedRouteDefinition);
+        doWriteList(null, "route", def.getRoutes(), 
this::doWriteRouteDefinition);
     }
     protected void doWriteBeansDefinition(String name, BeansDefinition def) 
throws IOException {
         startElement(name);
@@ -4245,4 +4245,4 @@ public class ModelWriter extends BaseWriter {
     public interface ElementSerializer<T> {
         void doWriteElement(String name, T value) throws IOException;
     }
-}
+}
\ No newline at end of file
diff --git 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index 47c6ecf107a0..e2e5b974a6eb 100644
--- 
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++ 
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -927,9 +927,9 @@ public class ModelWriter extends BaseWriter {
         doWriteAttribute("inheritErrorHandler", 
toString(def.getInheritErrorHandler()), "false");
         doWriteAttribute("configuration", def.getConfiguration(), null);
         doWriteElement("resilience4jConfiguration", 
def.getResilience4jConfiguration(), 
this::doWriteResilience4jConfigurationDefinition);
-        doWriteElement("onFallback", def.getOnFallback(), 
this::doWriteOnFallbackDefinition);
         doWriteElement("faultToleranceConfiguration", 
def.getFaultToleranceConfiguration(), 
this::doWriteFaultToleranceConfigurationDefinition);
         doWriteList(null, null, def.getOutputs(), 
this::doWriteProcessorDefinitionRef);
+        doWriteElement("onFallback", def.getOnFallback(), 
this::doWriteOnFallbackDefinition);
         endElement(name);
     }
     protected void doWriteClaimCheckDefinition(String name, 
ClaimCheckDefinition def) throws IOException {
@@ -1284,11 +1284,11 @@ public class ModelWriter extends BaseWriter {
     protected void doWriteOnCompletionDefinition(String name, 
OnCompletionDefinition def) throws IOException {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
-        doWriteAttribute("parallelProcessing", def.getParallelProcessing(), 
null);
-        doWriteAttribute("useOriginalMessage", def.getUseOriginalMessage(), 
null);
         doWriteAttribute("mode", def.getMode(), "AfterConsumer");
         doWriteAttribute("onCompleteOnly", def.getOnCompleteOnly(), null);
         doWriteAttribute("executorService", def.getExecutorService(), null);
+        doWriteAttribute("parallelProcessing", def.getParallelProcessing(), 
null);
+        doWriteAttribute("useOriginalMessage", def.getUseOriginalMessage(), 
null);
         doWriteAttribute("onFailureOnly", def.getOnFailureOnly(), null);
         doWriteElement("onWhen", def.getOnWhen(), 
this::doWriteOnWhenDefinition);
         doWriteList(null, null, def.getOutputs(), 
this::doWriteProcessorDefinitionRef);
@@ -1646,22 +1646,22 @@ public class ModelWriter extends BaseWriter {
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("template", toString(def.isTemplate()), null);
         doWriteAttribute("routeConfigurationId", 
def.getRouteConfigurationId(), null);
+        doWriteAttribute("logMask", def.getLogMask(), null);
         doWriteAttribute("streamCache", def.getStreamCache(), null);
+        doWriteAttribute("autoStartup", def.getAutoStartup(), "true");
         doWriteAttribute("trace", def.getTrace(), null);
+        doWriteAttribute("nodePrefixId", def.getNodePrefixId(), null);
+        doWriteAttribute("delayer", def.getDelayer(), null);
+        doWriteAttribute("messageHistory", def.getMessageHistory(), null);
+        doWriteAttribute("kamelet", toString(def.isKamelet()), null);
+        doWriteAttribute("group", def.getGroup(), null);
         doWriteAttribute("rest", toString(def.isRest()), null);
         doWriteAttribute("routePolicyRef", def.getRoutePolicyRef(), null);
         doWriteAttribute("precondition", def.getPrecondition(), null);
+        doWriteAttribute("errorHandlerRef", def.getErrorHandlerRef(), null);
         doWriteAttribute("shutdownRoute", def.getShutdownRoute(), "Default");
         doWriteAttribute("shutdownRunningTask", def.getShutdownRunningTask(), 
"CompleteCurrentTaskOnly");
         doWriteAttribute("startupOrder", toString(def.getStartupOrder()), 
null);
-        doWriteAttribute("logMask", def.getLogMask(), null);
-        doWriteAttribute("nodePrefixId", def.getNodePrefixId(), null);
-        doWriteAttribute("messageHistory", def.getMessageHistory(), null);
-        doWriteAttribute("kamelet", toString(def.isKamelet()), null);
-        doWriteAttribute("autoStartup", def.getAutoStartup(), "true");
-        doWriteAttribute("delayer", def.getDelayer(), null);
-        doWriteAttribute("group", def.getGroup(), null);
-        doWriteAttribute("errorHandlerRef", def.getErrorHandlerRef(), null);
         doWriteList(null, "routeProperty", def.getRouteProperties(), 
this::doWritePropertyDefinition);
         doWriteElement("errorHandler", def.getErrorHandler(), 
this::doWriteErrorHandlerDefinition);
         doWriteElement(null, def.getInput(), this::doWriteFromDefinitionRef);
@@ -1679,8 +1679,8 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteOptionalIdentifiedDefinitionAttributes(def);
         doWriteList(null, "templateParameter", def.getTemplateParameters(), 
this::doWriteRouteTemplateParameterDefinition);
-        doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
         doWriteList(null, "templateBean", def.getTemplateBeans(), 
this::doWriteBeanFactoryDefinition);
+        doWriteElement("route", def.getRoute(), this::doWriteRouteDefinition);
         endElement(name);
     }
     protected void doWriteRouteTemplateParameterDefinition(String name, 
RouteTemplateParameterDefinition def) throws IOException {
@@ -1838,10 +1838,10 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteAttribute("routeId", def.getRouteId(), null);
         doWriteAttribute("routeTemplateRef", def.getRouteTemplateRef(), null);
-        doWriteAttribute("prefixId", def.getPrefixId(), null);
         doWriteAttribute("group", def.getGroup(), null);
-        doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
+        doWriteAttribute("prefixId", def.getPrefixId(), null);
         doWriteList(null, "parameter", def.getParameters(), 
this::doWriteTemplatedRouteParameterDefinition);
+        doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
         endElement(name);
     }
     protected void doWriteTemplatedRouteParameterDefinition(String name, 
TemplatedRouteParameterDefinition def) throws IOException {
@@ -1888,10 +1888,10 @@ public class ModelWriter extends BaseWriter {
         startElement(name);
         doWriteProcessorDefinitionAttributes(def);
         doWriteAttribute("mode", def.getMode(), "TotalRequests");
-        doWriteAttribute("timePeriodMillis", def.getTimePeriodMillis(), 
"1000");
-        doWriteAttribute("rejectExecution", def.getRejectExecution(), null);
         doWriteAttribute("callerRunsWhenRejected", 
def.getCallerRunsWhenRejected(), "true");
         doWriteAttribute("executorService", def.getExecutorService(), null);
+        doWriteAttribute("timePeriodMillis", def.getTimePeriodMillis(), 
"1000");
+        doWriteAttribute("rejectExecution", def.getRejectExecution(), null);
         doWriteAttribute("asyncDelayed", def.getAsyncDelayed(), null);
         doWriteExpressionNodeElements(def);
         doWriteElement("correlationExpression", 
def.getCorrelationExpression(), this::doWriteExpressionSubElementDefinition);
@@ -2090,16 +2090,16 @@ public class ModelWriter extends BaseWriter {
         endElement(name);
     }
     protected void doWriteBeansDefinitionElements(BeansDefinition def) throws 
IOException {
-        doWriteList(null, "route", def.getRoutes(), 
this::doWriteRouteDefinition);
-        domElements(def.getSpringOrBlueprintBeans());
-        doWriteList("dataFormats", "dataFormat", def.getDataFormats(), 
this::doWriteDataFormatDefinition);
         doWriteList(null, "component-scan", def.getComponentScanning(), 
this::doWriteComponentScanDefinition);
         doWriteList(null, "bean", def.getBeans(), 
this::doWriteBeanFactoryDefinition);
+        domElements(def.getSpringOrBlueprintBeans());
+        doWriteList("dataFormats", "dataFormat", def.getDataFormats(), 
this::doWriteDataFormatDefinition);
         doWriteList(null, "restConfiguration", def.getRestConfigurations(), 
this::doWriteRestConfigurationDefinition);
         doWriteList(null, "rest", def.getRests(), this::doWriteRestDefinition);
         doWriteList(null, "routeConfiguration", def.getRouteConfigurations(), 
this::doWriteRouteConfigurationDefinition);
         doWriteList(null, "routeTemplate", def.getRouteTemplates(), 
this::doWriteRouteTemplateDefinition);
         doWriteList(null, "templatedRoute", def.getTemplatedRoutes(), 
this::doWriteTemplatedRouteDefinition);
+        doWriteList(null, "route", def.getRoutes(), 
this::doWriteRouteDefinition);
     }
     protected void doWriteBeansDefinition(String name, BeansDefinition def) 
throws IOException {
         startElement(name);
@@ -4245,4 +4245,4 @@ public class ModelWriter extends BaseWriter {
     public interface ElementSerializer<T> {
         void doWriteElement(String name, T value) throws IOException;
     }
-}
+}
\ No newline at end of file
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java
index a7f7a2244c93..131dd42519d0 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelWriterGeneratorMojo.java
@@ -75,6 +75,8 @@ import org.jboss.jandex.IndexReader;
 
 public abstract class ModelWriterGeneratorMojo extends AbstractGeneratorMojo {
 
+    private static final String FALLBACK = "doWriteElement(\"onFallback\"";
+
     public static final String MODEL_PACKAGE = "org.apache.camel.model";
 
     private final Map<Class<?>, List<Property>> properties = new 
ConcurrentHashMap<>();
@@ -141,6 +143,29 @@ public abstract class ModelWriterGeneratorMojo extends 
AbstractGeneratorMojo {
         return velocity("velocity/model-writer.vm", ctx);
     }
 
+    protected String postGenerateWriter(String writer) {
+        // the velocity templates are ugly to maintain so lets hack here to 
control the order in circuit-breaker
+        // we want onFallback to be after outputs, but because the writer is 
hard-coded to not be able to generate code
+        // that respect this order, then we swap the lines after the source 
code is generated
+        String[] lines = writer.split(System.lineSeparator());
+        int pos = -1;
+        for (int i = 0; i < lines.length; i++) {
+            String s = lines[i].trim();
+            if (s.startsWith(FALLBACK)) {
+                pos = i;
+                break;
+            }
+        }
+        if (pos != -1) {
+            // swap lines
+            String prev = lines[pos];
+            String next = lines[pos + 1];
+            lines[pos] = next;
+            lines[pos + 1] = prev;
+        }
+        return String.join(System.lineSeparator(), lines);
+    }
+
     protected Class<?> loadClass(ClassLoader loader, String name) {
         try {
             return loader.loadClass(name);
@@ -274,14 +299,40 @@ public abstract class ModelWriterGeneratorMojo extends 
AbstractGeneratorMojo {
         XmlType xmlType = clazz.getAnnotation(XmlType.class);
         if (xmlType != null) {
             String[] propOrder = xmlType.propOrder();
-            if (propOrder != null && propOrder.length > 0) {
-                // special for choice where whenClauses should use when in 
xml-io parser
-                final List<String> list = Arrays.stream(propOrder).map(o -> 
o.equals("whenClauses") ? "when" : o).toList();
-                properties = properties
-                        .sorted(Comparator.comparing(p -> 
Arrays.binarySearch(list.toArray(), p.getName())));
+            if (propOrder != null && propOrder.length > 1) {
+                // special for DSL where XML vs YAML have different names, and 
we must use as-is due to JAXB @XmlType propOrder
+                final Map<String, String> alias = Map.of(
+                        "whenClauses", "when",
+                        "componentScanning", "component-scan",
+                        "beans", "bean",
+                        "dataFormats", "dataFormat",
+                        "restConfigurations", "restConfiguration",
+                        "rests", "rest",
+                        "routeConfigurations", "routeConfiguration",
+                        "routeTemplates", "routeTemplate",
+                        "templatedRoutes", "templatedRoute",
+                        "routes", "route");
+                final List<String> list = Arrays.stream(propOrder).map(o -> 
alias.getOrDefault(o, o)).toList();
+                boolean outputsLast = list.indexOf("outputs") == list.size() - 
1;
+                properties = properties.sorted((o1, o2) -> {
+                    String n1 = alias.getOrDefault(o1.name, o1.name);
+                    String n2 = alias.getOrDefault(o2.name, o2.name);
+                    int idx1 = list.indexOf(n1);
+                    int idx2 = list.indexOf(n2);
+                    if ("outputs".equals(n1) && outputsLast) {
+                        idx1 = Integer.MAX_VALUE;
+                    }
+                    if ("outputs".equals(n2) && outputsLast) {
+                        idx2 = Integer.MAX_VALUE;
+                    }
+                    return Integer.compare(idx1, idx2);
+                });
             }
         }
-        return properties.toList();
+        var l = properties.toList();
+        var l2 = new ArrayList();
+        l2.addAll(l);
+        return l2;
     }
 
     private List<Member> getMembers(Class<?> clazz) {
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XmlModelWriterGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XmlModelWriterGeneratorMojo.java
index 89cd6a172b89..f2077ba6513c 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XmlModelWriterGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/XmlModelWriterGeneratorMojo.java
@@ -61,8 +61,9 @@ public class XmlModelWriterGeneratorMojo extends 
ModelWriterGeneratorMojo {
             return;
         }
         Path javaDir = sourcesOutputDir.toPath();
-        String parser = generateWriter();
-        updateResource(javaDir, (getWriterPackage() + 
".ModelWriter").replace('.', '/') + ".java", parser);
+        String writer = generateWriter();
+        writer = postGenerateWriter(writer);
+        updateResource(javaDir, (getWriterPackage() + 
".ModelWriter").replace('.', '/') + ".java", writer);
     }
 
     @Override
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/YamlModelWriterGeneratorMojo.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/YamlModelWriterGeneratorMojo.java
index 4ee2efc3721e..3fd3cc85519f 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/YamlModelWriterGeneratorMojo.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/YamlModelWriterGeneratorMojo.java
@@ -61,8 +61,9 @@ public class YamlModelWriterGeneratorMojo extends 
ModelWriterGeneratorMojo {
             return;
         }
         Path javaDir = sourcesOutputDir.toPath();
-        String parser = generateWriter();
-        updateResource(javaDir, (getWriterPackage() + 
".ModelWriter").replace('.', '/') + ".java", parser);
+        String writer = generateWriter();
+        writer = postGenerateWriter(writer);
+        updateResource(javaDir, (getWriterPackage() + 
".ModelWriter").replace('.', '/') + ".java", writer);
     }
 
     @Override

Reply via email to