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