Author: rgoers Date: Sun Apr 26 07:46:32 2009 New Revision: 768678 URL: http://svn.apache.org/viewvc?rev=768678&view=rev Log: Allow CatalogResolver to interpolate catalog entries.
Added: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml (with props) commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml (with props) Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java?rev=768678&r1=768677&r2=768678&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java Sun Apr 26 07:46:32 2009 @@ -755,6 +755,7 @@ EntityResolver resolver = (EntityResolver) BeanHelper.createBean(decl, CatalogResolver.class); BeanHelper.setProperty(resolver, "fileSystem", getFileSystem()); BeanHelper.setProperty(resolver, "baseDir", getBasePath()); + BeanHelper.setProperty(resolver, "substitutor", getSubstitutor()); setEntityResolver(resolver); } } Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java?rev=768678&r1=768677&r2=768678&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java Sun Apr 26 07:46:32 2009 @@ -285,8 +285,10 @@ public URL locateFromURL(String basePath, String fileName) { - if ((basePath != null && UriParser.extractScheme(basePath) == null) - || (basePath == null && UriParser.extractScheme(fileName) == null)) + String fileScheme = UriParser.extractScheme(fileName); + + // Use DefaultFileSystem if basePath and fileName don't have a scheme. + if ((basePath == null || UriParser.extractScheme(basePath) == null) && fileScheme == null) { return super.locateFromURL(basePath, fileName); } @@ -295,7 +297,8 @@ FileSystemManager fsManager = VFS.getManager(); FileObject file; - if (basePath != null) + // Only use the base path if the file name doesn't have a scheme. + if (basePath != null && fileScheme == null) { FileObject base = fsManager.resolveFile(basePath); if (base.getType() == FileType.FILE) Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java?rev=768678&r1=768677&r2=768678&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java Sun Apr 26 07:46:32 2009 @@ -24,6 +24,7 @@ import org.apache.commons.configuration2.FileSystem; import org.apache.commons.configuration2.ConfigurationException; import org.apache.commons.configuration2.ConfigurationUtils; +import org.apache.commons.lang.text.StrSubstitutor; import org.apache.xml.resolver.readers.CatalogReader; import org.apache.xml.resolver.CatalogException; @@ -122,6 +123,15 @@ } /** + * Set the StrSubstitutor. + * @param substitutor The StrSubstitutor. + */ + public void setSubstitutor(StrSubstitutor substitutor) + { + manager.setSubstitutor(substitutor); + } + + /** * Enables debug logging of xml-commons Catalog processing. * @param debug True if debugging should be enabled, false otherwise. */ @@ -242,6 +252,9 @@ /** The base directory */ private String baseDir = System.getProperty("user.dir"); + /** The String Substitutor */ + private StrSubstitutor substitutor; + /** * Set the FileSystem * @param fileSystem The FileSystem in use. @@ -280,6 +293,16 @@ { return this.baseDir; } + + public void setSubstitutor(StrSubstitutor substitutor) + { + this.substitutor = substitutor; + } + + public StrSubstitutor getStrSubstitutor() + { + return this.substitutor; + } } /** @@ -425,5 +448,18 @@ parsePendingCatalogs(); } } + + /** + * Perform character normalization on a URI reference. + * + * @param uriref The URI reference + * @return The normalized URI reference. + */ + protected String normalizeURI(String uriref) + { + StrSubstitutor substitutor = ((CatalogManager) catalogManager).getStrSubstitutor(); + String resolved = substitutor != null ? substitutor.replace(uriref) : uriref; + return super.normalizeURI(resolved); + } } } Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java?rev=768678&r1=768677&r2=768678&view=diff ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java (original) +++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java Sun Apr 26 07:46:32 2009 @@ -76,6 +76,9 @@ private static final File VALIDATION_FILE = ConfigurationAssert .getTestFile("testValidation.xml"); + private static final File VALIDATION2_FILE = ConfigurationAssert + .getTestFile("testValidation2.xml"); + private static final File MULTI_TENENT_FILE = ConfigurationAssert .getTestFile("testMultiTenentConfigurationBuilder.xml"); @@ -109,7 +112,7 @@ { FileSystem.resetDefaultFileSystem(); super.tearDown(); - } + } /** * Tests the isReservedNode() method of ConfigurationDeclaration. @@ -848,6 +851,15 @@ assertEquals("Incorrect value retrieved","value1",value); } + public void testValidation2() throws Exception + { + factory.setFile(VALIDATION2_FILE); + factory.getConfiguration(true); + String value = System.getProperty("key1"); + assertNotNull("The test key was not located", value); + assertEquals("Incorrect value retrieved","value1",value); + } + public void testMultiTenentConfiguration() throws Exception { factory.setFile(MULTI_TENENT_FILE); Added: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml?rev=768678&view=auto ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml (added) +++ commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml Sun Apr 26 07:46:32 2009 @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"> + + <public publicId="-//Apache//DTD Resolver Test V1.0//EN" + uri="resolver.dtd"/> + <rewriteSystem systemIdStartString="http://java.sun.com/dtd/" + rewritePrefix="./"/> + <rewriteSystem systemIdStartString="http://commons.apache.org/" + rewritePrefix="file://${sys:user.dir}/target/test-classes/"/> +</catalog> \ No newline at end of file Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml?rev=768678&view=auto ============================================================================== --- commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml (added) +++ commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml Sun Apr 26 07:46:32 2009 @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> +<!-- Test configuration definition file that demonstrates complex initialization --> +<configuration> + <header> + <result delimiterParsingDisabled="true"> + <nodeCombiner config-class="org.apache.commons.configuration2.tree.OverrideCombiner"/> + <expressionEngine config-class="org.apache.commons.configuration2.tree.xpath.XPathExpressionEngine"/> + </result> + <entity-resolver catalogFiles="file://${sys:user.dir}/target/test-classes/catalog2.xml"/> + </header> + <system/> + <properties fileName="test.properties.xml" throwExceptionOnMissing="true" + config-name="properties"> + </properties> + <xml fileName="file://${sys:user.dir}/target/test-classes/sample.xml" config-name="xml" schemaValidation="true"/> +</configuration> \ No newline at end of file Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml