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

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

commit f97289fe2ccb28b7c8f20d4e012ec70c7d6f3145
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Nov 11 08:12:20 2024 +0100

    CAMEL-21420: camel-xml-io: Parser should handle default Camel namespace 
better.
---
 .../java/org/apache/camel/xml/in/BaseParser.java     | 20 +++++++++++++++-----
 .../java/org/apache/camel/xml/out/BaseWriter.java    | 10 +++++++++-
 .../org/apache/camel/xml/out/ModelWriterTest.java    | 17 +++++++++++++++++
 .../src/test/resources/beansWithFactoryMethod.xml    |  1 +
 .../src/test/resources/resequencerStream.xml         |  2 +-
 core/camel-xml-io/src/test/resources/routingSlip.xml |  2 +-
 .../src/test/resources/routingSlipHeaderSet.xml      |  2 +-
 7 files changed, 45 insertions(+), 9 deletions(-)

diff --git 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
index 4b338253f06..ba2620e2742 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
@@ -53,6 +53,8 @@ import org.apache.camel.xml.io.XmlPullParserLocationException;
 
 public class BaseParser {
 
+    public static final String DEFAULT_NAMESPACE = 
"http://camel.apache.org/schema/spring";;
+
     protected final MXParser parser;
     protected String namespace;
     protected final Set<String> secondaryNamespaces = new HashSet<>();
@@ -80,14 +82,14 @@ public class BaseParser {
         this.parser = new MXParser();
         this.parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
         this.parser.setInput(input, null);
-        this.namespace = namespace != null ? namespace : "";
+        this.namespace = namespace != null && !namespace.isEmpty() ? namespace 
: DEFAULT_NAMESPACE;
     }
 
     public BaseParser(Reader reader, String namespace) throws IOException, 
XmlPullParserException {
         this.parser = new MXParser();
         this.parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
         this.parser.setInput(reader);
-        this.namespace = namespace != null ? namespace : "";
+        this.namespace = namespace != null && !namespace.isEmpty() ? namespace 
: DEFAULT_NAMESPACE;
     }
 
     public void addSecondaryNamespace(String namespace) {
@@ -528,9 +530,17 @@ public class BaseParser {
         if (Objects.equals(ns, namespace)) {
             return true;
         }
-        for (String second : secondaryNamespaces) {
-            if (Objects.equals(ns, second)) {
-                return true;
+        if (DEFAULT_NAMESPACE.equals(ns) && namespace.isEmpty()) {
+            return true;
+        }
+        if (DEFAULT_NAMESPACE.equals(namespace) && ns.isEmpty()) {
+            return true;
+        }
+        if (secondaryNamespaces != null) {
+            for (String second : secondaryNamespaces) {
+                if (Objects.equals(ns, second)) {
+                    return true;
+                }
             }
         }
         return false;
diff --git 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
index a8c4b779ce7..cfd9db0434f 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
@@ -33,14 +33,19 @@ import org.apache.camel.xml.io.XMLWriter;
 
 public class BaseWriter {
 
+    public static final String DEFAULT_NAMESPACE = 
"http://camel.apache.org/schema/spring";;
+
     protected final XMLWriter writer;
     protected final Deque<String> namespacesStack = new LinkedList<>();
     protected boolean namespaceWritten;
+    protected boolean skipCustomId = true;
 
     public BaseWriter(Writer writer, String namespace) throws IOException {
         this.writer = new XMLWriter(writer);
-        if (namespace != null) {
+        if (namespace != null && !namespace.isEmpty()) {
             this.namespacesStack.push(namespace);
+        } else {
+            this.namespacesStack.push(DEFAULT_NAMESPACE);
         }
     }
 
@@ -96,6 +101,9 @@ public class BaseWriter {
     }
 
     protected void attribute(String name, Object value) throws IOException {
+        if (skipCustomId && "customId".equals(name)) {
+            return;
+        }
         if (value != null) {
             writer.addAttribute(name, value.toString());
         }
diff --git 
a/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java 
b/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
index 2ba6084b9b6..77783aa9b78 100644
--- 
a/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
+++ 
b/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
@@ -145,6 +145,16 @@ public class ModelWriterTest {
         XmlAssert.assertThat(generatedXml)
                 .and(original)
                 .withNodeMatcher(new 
DefaultNodeMatcher(ElementSelectors.byNameAndText))
+                .withAttributeFilter(attr -> {
+                    // skip default values for rest-dsl header params
+                    if ("header".equals(attr.getOwnerElement().getTagName()) 
&& "arrayType".equals(attr.getName())) {
+                        return false;
+                    }
+                    if ("header".equals(attr.getOwnerElement().getTagName()) 
&& "collectionFormat".equals(attr.getName())) {
+                        return false;
+                    }
+                    return true;
+                })
                 .ignoreWhitespace()
                 .ignoreElementContentWhitespace()
                 .ignoreComments()
@@ -269,6 +279,13 @@ public class ModelWriterTest {
         XmlAssert.assertThat(generatedXml)
                 .and(original)
                 .withNodeMatcher(new 
DefaultNodeMatcher(ElementSelectors.byNameAndText))
+                .withAttributeFilter(attr -> {
+                    // bean constructor index is optional
+                    if 
("constructor".equals(attr.getOwnerElement().getTagName()) && 
"index".equals(attr.getName())) {
+                        return false;
+                    }
+                    return true;
+                })
                 .ignoreWhitespace()
                 .ignoreElementContentWhitespace()
                 .ignoreComments()
diff --git a/core/camel-xml-io/src/test/resources/beansWithFactoryMethod.xml 
b/core/camel-xml-io/src/test/resources/beansWithFactoryMethod.xml
index 9065010d4c4..20c1afa8242 100644
--- a/core/camel-xml-io/src/test/resources/beansWithFactoryMethod.xml
+++ b/core/camel-xml-io/src/test/resources/beansWithFactoryMethod.xml
@@ -22,6 +22,7 @@ xsi:schemaLocation="http://camel.apache.org/schema/spring 
file:/data/sources/git
 
        <bean name="b1" type="org.apache.camel.xml.in.ModelParserTest.MyBean" 
factoryMethod="createMyBean">
                <constructors>
+                       <!-- index is optional -->
                        <constructor value="c1" />
                        <constructor value="c2" />
                </constructors>
diff --git a/core/camel-xml-io/src/test/resources/resequencerStream.xml 
b/core/camel-xml-io/src/test/resources/resequencerStream.xml
index 7905dd942c0..09deea289c6 100644
--- a/core/camel-xml-io/src/test/resources/resequencerStream.xml
+++ b/core/camel-xml-io/src/test/resources/resequencerStream.xml
@@ -21,7 +21,7 @@
     <route>
        <from uri="direct:start" />
        <resequence>
-            <streamConfig timeout="2000"/> <!-- Use default capacity -->
+            <streamConfig capacity="1000" timeout="2000"/>
                <simple>in.header.seqnum</simple>
                <to uri="mock:result" />
        </resequence>
diff --git a/core/camel-xml-io/src/test/resources/routingSlip.xml 
b/core/camel-xml-io/src/test/resources/routingSlip.xml
index 23c6d2fe414..74ceb723762 100644
--- a/core/camel-xml-io/src/test/resources/routingSlip.xml
+++ b/core/camel-xml-io/src/test/resources/routingSlip.xml
@@ -20,7 +20,7 @@
 <routes id="camel" xmlns="http://camel.apache.org/schema/spring";>
   <route>
     <from uri="seda:a"/>
-    <routingSlip>
+    <routingSlip uriDelimiter=",">
       <header>destinations</header>
     </routingSlip>
   </route>
diff --git a/core/camel-xml-io/src/test/resources/routingSlipHeaderSet.xml 
b/core/camel-xml-io/src/test/resources/routingSlipHeaderSet.xml
index 1a60dc66dbb..b0c21431473 100644
--- a/core/camel-xml-io/src/test/resources/routingSlipHeaderSet.xml
+++ b/core/camel-xml-io/src/test/resources/routingSlipHeaderSet.xml
@@ -20,7 +20,7 @@
 <routes id="camel" xmlns="http://camel.apache.org/schema/spring";>
   <route>
     <from uri="seda:a"/>
-    <routingSlip>
+    <routingSlip uriDelimiter=",">
       <header>theRoutingSlipHeader</header>
     </routingSlip>
   </route>

Reply via email to