Claus Ibsen created CAMEL-23763:
-----------------------------------

             Summary: camel-xml-io ModelWriter writes kamelet child element as 
route attribute breaking XML round-trip
                 Key: CAMEL-23763
                 URL: https://issues.apache.org/jira/browse/CAMEL-23763
             Project: Camel
          Issue Type: Bug
          Components: camel-core
            Reporter: Claus Ibsen


When a route contains a {{<kamelet name="my-processor"/>}} child element, the 
XML ModelWriter in camel-xml-io writes it back as a {{kamelet="false"}} 
attribute on the {{<route>}} element instead of preserving the {{<kamelet>}} 
child element. This breaks XML round-trip (parse, write, re-parse).

*Input XML:*
{code:xml}
<routes xmlns="http://camel.apache.org/schema/xml-io";>
  <route>
    <from uri="direct:start"/>
    <kamelet name="my-processor"/>
    <to uri="mock:result"/>
  </route>
</routes>
{code}

*Written XML (incorrect):*
{code:xml}
<route kamelet="false" xmlns="http://camel.apache.org/schema/xml-io";>
  <from uri="direct:start"/>
  <to uri="mock:result"/>
</route>
{code}

The {{<kamelet>}} child element is lost entirely, and a spurious 
{{kamelet="false"}} attribute appears on the {{<route>}} element. Re-parsing 
the written XML then fails with: {{Unexpected attribute 'kamelet'}}.

*Root cause:* {{RouteDefinition}} has a boolean {{kamelet}} field that is a 
runtime transient (used internally to mark whether a route originates from a 
kamelet). The XML ModelWriter picks up this boolean field and writes it as an 
XML attribute, while the actual {{KameletDefinition}} child element (the 
Kamelet EIP) is not written. The writer should never serialize the transient 
boolean and should always write the {{KameletDefinition}} child element.

*Discovered while:* adding compile-validation tests for the new Java DSL model 
writer (CAMEL-23757). The kamelet XML test file had to be placed in 
camel-java-io test resources instead of camel-xml-io to avoid breaking the 
ModelWriterTest round-trip tests.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to