You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2018/04/11 15:42:31 UTC

svn commit: r1828907 - in /commons/proper/configuration/trunk/src: main/java/org/apache/commons/configuration2/ test/java/org/apache/commons/configuration2/ test/resources/

Author: oheger
Date: Wed Apr 11 15:42:31 2018
New Revision: 1828907

URL: http://svn.apache.org/viewvc?rev=1828907&view=rev
Log:
CONFIGURATION-652: XML namespace attributes are now set correctly.

When loading and saving XML configuration files the attributes of the
root node are now updated correctly. Thanks to claude at xenei dot com
for the patch.

Added:
    commons/proper/configuration/trunk/src/test/resources/testChildNamespace.xml
    commons/proper/configuration/trunk/src/test/resources/testRootNamespace.xml
Modified:
    commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/XMLConfiguration.java
    commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestXMLConfiguration.java

Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/XMLConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/XMLConfiguration.java?rev=1828907&r1=1828906&r2=1828907&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/XMLConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/XMLConfiguration.java Wed Apr 11 15:42:31 2018
@@ -1135,6 +1135,7 @@ public class XMLConfiguration extends Ba
          */
         public void processDocument(ReferenceNodeHandler refHandler)
         {
+            updateAttributes(refHandler.getRootNode(), document.getDocumentElement() );
             NodeTreeWalker.INSTANCE.walkDFS(refHandler.getRootNode(), this,
                     refHandler);
         }

Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestXMLConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestXMLConfiguration.java?rev=1828907&r1=1828906&r2=1828907&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestXMLConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestXMLConfiguration.java Wed Apr 11 15:42:31 2018
@@ -398,6 +398,20 @@ public class TestXMLConfiguration
     }
 
     @Test
+    public void testSetRootNamespace() throws ConfigurationException
+    {
+        conf.addProperty(  "[@xmlns:foo]",  "http://example.com/" );
+        conf.addProperty(  "foo:bar", "foobar" );
+        assertEquals("Root attribute not set", "http://example.com/", conf
+                .getString("[@xmlns:foo]"));
+        saveTestConfig();
+        XMLConfiguration checkConf = checkSavedConfig();
+        assertTrue("Attribute not found after save", checkConf
+                .containsKey("[@xmlns:foo]"));
+        checkConf.setProperty("[@xmlns:foo]", "http://example.net/");
+    }
+
+    @Test
     public void testAddList()
     {
         conf.addProperty("test.array", "value1");
@@ -918,6 +932,23 @@ public class TestXMLConfiguration
         assertEquals("test3_yoge", conf.getString("yoge"));
     }
 
+
+    @Test
+    public void testLoadWithRootNamespace() throws ConfigurationException
+    {
+        conf = new XMLConfiguration();
+        new FileHandler(conf).load(ConfigurationAssert.getTestFile("testRootNamespace.xml"));
+        assertEquals("http://example.com/", conf.getString("[@xmlns:foo]"));
+    }
+
+    @Test
+    public void testLoadChildNamespace() throws ConfigurationException
+    {
+        conf = new XMLConfiguration();
+        new FileHandler(conf).load(ConfigurationAssert.getTestFile("testChildNamespace.xml"));
+        assertEquals("http://example.com/", conf.getString("foo:bar.[@xmlns:foo]"));
+    }
+
     /**
      * Tests whether the encoding is written to the generated XML file.
      */
@@ -935,6 +966,35 @@ public class TestXMLConfiguration
                 containsString("encoding=\"" + ENCODING + "\""));
     }
 
+    @Test
+    public void testSaveWithRootAttributes() throws ConfigurationException
+    {
+        conf.setProperty("[@xmlns:ex]", "http://example.com/");
+        assertEquals("Root attribute not set", "http://example.com/", conf
+                .getString("[@xmlns:ex]"));
+        FileHandler handler = new FileHandler(conf);
+
+        StringWriter out = new StringWriter();
+        handler.save(out);
+        assertThat("Encoding was not written to file", out.toString(),
+                containsString("testconfig xmlns:ex=\"http://example.com/\""));
+    }
+
+    @Test
+    public void testSaveWithRootAttributes_ByHand() throws ConfigurationException
+    {
+        conf = new XMLConfiguration();
+        conf.addProperty(  "[@xmlns:foo]",  "http://example.com/" );
+        assertEquals("Root attribute not set", "http://example.com/", conf
+                .getString("[@xmlns:foo]"));
+        FileHandler handler = new FileHandler(conf);
+
+        StringWriter out = new StringWriter();
+        handler.save(out);
+        assertThat("Encoding was not written to file", out.toString(),
+                containsString("configuration xmlns:foo=\"http://example.com/\""));
+    }
+
     /**
      * Tests whether a default encoding is used if no specific encoding is set.
      * According to the XSLT specification (http://www.w3.org/TR/xslt#output)

Added: commons/proper/configuration/trunk/src/test/resources/testChildNamespace.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/resources/testChildNamespace.xml?rev=1828907&view=auto
==============================================================================
Binary files commons/proper/configuration/trunk/src/test/resources/testChildNamespace.xml (added) and commons/proper/configuration/trunk/src/test/resources/testChildNamespace.xml Wed Apr 11 15:42:31 2018 differ

Added: commons/proper/configuration/trunk/src/test/resources/testRootNamespace.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/resources/testRootNamespace.xml?rev=1828907&view=auto
==============================================================================
Binary files commons/proper/configuration/trunk/src/test/resources/testRootNamespace.xml (added) and commons/proper/configuration/trunk/src/test/resources/testRootNamespace.xml Wed Apr 11 15:42:31 2018 differ