Repository: camel
Updated Branches:
  refs/heads/camel-2.18.x a01363cd5 -> 34cf6b9eb
  refs/heads/master 2c32e5d47 -> 1c71af82f


CAMEL-10817: Prevent duplicated xmlns namespace prefix when dumping model XML


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1c71af82
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1c71af82
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1c71af82

Branch: refs/heads/master
Commit: 1c71af82f2fbb4a2a1bb8d4ce090de90d26e496d
Parents: 2c32e5d
Author: James Netherton <jamesnether...@gmail.com>
Authored: Mon Feb 13 08:43:58 2017 +0000
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Mon Feb 13 10:03:49 2017 +0100

----------------------------------------------------------------------
 .../org/apache/camel/model/ModelHelper.java     |  3 +-
 .../DuplicateNamespacePrefixIssueTest.java      | 70 ++++++++++++++++++++
 2 files changed, 72 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/1c71af82/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java 
b/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
index b681b38..373d231 100644
--- a/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
+++ b/camel-core/src/main/java/org/apache/camel/model/ModelHelper.java
@@ -96,7 +96,8 @@ public final class ModelHelper {
         // Add additional namespaces to the document root element
         Element documentElement = dom.getDocumentElement();
         for (String nsPrefix : namespaces.keySet()) {
-            documentElement.setAttribute("xmlns:" + nsPrefix, 
namespaces.get(nsPrefix));
+            String prefix = nsPrefix.equals("xmlns") ? nsPrefix : "xmlns:" + 
nsPrefix;
+            documentElement.setAttribute(prefix, namespaces.get(nsPrefix));
         }
 
         // We invoke the type converter directly because we need to pass some 
custom XML output options

http://git-wip-us.apache.org/repos/asf/camel/blob/1c71af82/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/issues/DuplicateNamespacePrefixIssueTest.java
----------------------------------------------------------------------
diff --git 
a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/issues/DuplicateNamespacePrefixIssueTest.java
 
b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/issues/DuplicateNamespacePrefixIssueTest.java
new file mode 100644
index 0000000..0e42bf5
--- /dev/null
+++ 
b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/issues/DuplicateNamespacePrefixIssueTest.java
@@ -0,0 +1,70 @@
+/**
+ * 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.
+ */
+package org.apache.camel.itest.karaf.issues;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.blueprint.BlueprintCamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.itest.karaf.BaseKarafTest;
+import org.apache.camel.model.ModelHelper;
+import org.apache.camel.model.RoutesDefinition;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+
+/**
+ * CAMEL-10817: dumpModelAsXml can return invalid XML namespace xmlns:xmlns
+ */
+
+@RunWith(PaxExam.class)
+public class DuplicateNamespacePrefixIssueTest extends BaseKarafTest {
+
+    @Test
+    public void testRoutesNamespacePrefixesNotDuplicated() throws Exception {
+        CamelContext context = new BlueprintCamelContext(bundleContext, 
blueprintContainer);
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:foo").id("foo")
+                    .choice()
+                        .when(xpath("foo:foo/foo:foo = 'foo'"))
+                            .log("Matched foo")
+                        .when(xpath("foo:foo/foo:bar = 'bar'"))
+                            .log("Matched bar")
+                        .when(xpath("foo:foo/foo:cheese = 'cheese'"))
+                            .log("Matched cheese");
+            }
+        });
+
+        // Dump the model XML
+        String originalModelXML = ModelHelper.dumpModelAsXml(context, 
context.getRouteDefinition("foo"));
+
+        // Reload routes from dumped XML
+        InputStream stream = new 
ByteArrayInputStream(originalModelXML.getBytes("UTF-8"));
+        RoutesDefinition routesDefinition = 
ModelHelper.loadRoutesDefinition(context, stream);
+
+        // Verify namespaces are as we expect
+        String modifiedModelXML = ModelHelper.dumpModelAsXml(context, 
routesDefinition);
+        String modifiedRoutesElementXML = modifiedModelXML.split("\n")[1];
+        String expectedRoutesElementXML = "<routes 
xmlns=\"http://camel.apache.org/schema/spring\";>";
+        Assert.assertEquals(expectedRoutesElementXML, 
modifiedRoutesElementXML);
+    }
+}

Reply via email to