You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/02/13 09:05:31 UTC

[1/2] camel git commit: CAMEL-10817: Prevent duplicated xmlns namespace prefix when dumping model XML

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 <ja...@gmail.com>
Authored: Mon Feb 13 08:43:58 2017 +0000
Committer: Claus Ibsen <da...@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);
+    }
+}


[2/2] camel git commit: CAMEL-10817: Prevent duplicated xmlns namespace prefix when dumping model XML

Posted by da...@apache.org.
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/34cf6b9e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/34cf6b9e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/34cf6b9e

Branch: refs/heads/camel-2.18.x
Commit: 34cf6b9ebf36e1aae9e52a06881b2dfea9781c73
Parents: a01363c
Author: James Netherton <ja...@gmail.com>
Authored: Mon Feb 13 08:43:58 2017 +0000
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Feb 13 10:05:22 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/34cf6b9e/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 db40f63..1fbad55 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/34cf6b9e/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);
+    }
+}