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>
