You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by rg...@apache.org on 2008/12/27 21:10:42 UTC
svn commit: r729668 - in /commons/proper/configuration/trunk/src:
java/org/apache/commons/configuration/XMLConfiguration.java
test/org/apache/commons/configuration/TestXMLConfiguration.java
Author: rgoers
Date: Sat Dec 27 12:10:42 2008
New Revision: 729668
URL: http://svn.apache.org/viewvc?rev=729668&view=rev
Log:
Validate XML document against schema when saving the file
Modified:
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/XMLConfiguration.java
commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java
Modified: commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/XMLConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/XMLConfiguration.java?rev=729668&r1=729667&r2=729668&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/XMLConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/XMLConfiguration.java Sat Dec 27 12:10:42 2008
@@ -17,11 +17,7 @@
package org.apache.commons.configuration;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.Writer;
+import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
@@ -952,8 +948,38 @@
{
Transformer transformer = createTransformer();
Source source = new DOMSource(createDocument());
- Result result = new StreamResult(writer);
+ Result result;
+ StringWriter buffer = null;
+ if (isSchemaValidation())
+ {
+ buffer = new StringWriter();
+ result = new StreamResult(buffer);
+ }
+ else
+ {
+ result = new StreamResult(writer);
+ }
transformer.transform(source, result);
+ if (isSchemaValidation())
+ {
+ DocumentBuilder builder = createDocumentBuilder();
+ Reader reader = new StringReader(buffer.getBuffer().toString());
+ builder.parse(new InputSource(reader));
+ writer.write(buffer.getBuffer().toString());
+ writer.close();
+ }
+ }
+ catch (SAXException e)
+ {
+ throw new ConfigurationException("Unable to save the configuration", e);
+ }
+ catch (ParserConfigurationException e)
+ {
+ throw new ConfigurationException("Unable to save the configuration", e);
+ }
+ catch (IOException e)
+ {
+ throw new ConfigurationException("Unable to save the configuration", e);
}
catch (TransformerException e)
{
Modified: commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java?rev=729668&r1=729667&r2=729668&view=diff
==============================================================================
--- commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java (original)
+++ commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestXMLConfiguration.java Sat Dec 27 12:10:42 2008
@@ -40,6 +40,7 @@
import org.apache.commons.configuration.reloading.InvariantReloadingStrategy;
import org.apache.commons.configuration.tree.ConfigurationNode;
import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine;
+import org.apache.commons.configuration.resolver.CatalogResolver;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
@@ -51,6 +52,7 @@
*/
public class TestXMLConfiguration extends TestCase
{
+ private static final String CATALOG_FILES = "conf/catalog.xml";
/** Constant for the used encoding.*/
static final String ENCODING = "ISO-8859-1";
@@ -74,6 +76,7 @@
private String testProperties2 = new File("conf/testDigesterConfigurationInclude1.xml").getAbsolutePath();
private String testBasePath = new File("conf").getAbsolutePath();
private File testSaveConf = new File("target/testsave.xml");
+ private String testFile2 = new File("conf/sample.xml").getAbsolutePath();
private XMLConfiguration conf;
@@ -1476,6 +1479,50 @@
}
/**
+ * Tests modifying an XML document and saving it with schema validation enabled.
+ */
+ public void testSaveWithValidation() throws Exception
+ {
+ CatalogResolver resolver = new CatalogResolver();
+ resolver.setCatalogFiles(CATALOG_FILES);
+ conf = new XMLConfiguration();
+ conf.setEntityResolver(resolver);
+ conf.setFileName(testFile2);
+ conf.setSchemaValidation(true);
+ conf.load();
+ conf.setProperty("Employee.SSN", "123456789");
+ conf.save(testSaveConf);
+ conf = new XMLConfiguration(testSaveConf);
+ assertEquals("123456789", conf.getString("Employee.SSN"));
+ }
+
+ /**
+ * Tests modifying an XML document and saving it with schema validation enabled.
+ */
+ public void testSaveWithValidationFailure() throws Exception
+ {
+ CatalogResolver resolver = new CatalogResolver();
+ resolver.setCatalogFiles(CATALOG_FILES);
+ conf = new XMLConfiguration();
+ conf.setEntityResolver(resolver);
+ conf.setFileName(testFile2);
+ conf.setSchemaValidation(true);
+ conf.load();
+ conf.setProperty("Employee.Email", "JohnDoe@apache.org");
+ try
+ {
+ conf.save(testSaveConf);
+ fail("No validation failure on save");
+ }
+ catch (Exception e)
+ {
+ Throwable cause = e.getCause();
+ assertNotNull("No cause for exception on save", cause);
+ assertTrue("Incorrect exception on save", cause instanceof SAXParseException);
+ }
+ }
+
+ /**
* Prepares a configuration object for testing a reload operation.
*
* @return the initialized configuration