Author: rgoers
Date: Mon Apr 20 04:44:15 2009
New Revision: 766570

URL: http://svn.apache.org/viewvc?rev=766570&view=rev
Log:
CatalogResolver should use FileSystem so schemas can be retrieved using the 
same FileSystem as the XML files

Modified:
    
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
    
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/resolver/CatalogResolver.java

Modified: 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java?rev=766570&r1=766569&r2=766570&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/DefaultConfigurationBuilder.java
 Mon Apr 20 04:44:15 2009
@@ -746,7 +746,9 @@
         if (getMaxIndex(KEY_ENTITY_RESOLVER) == 0)
         {
             XMLBeanDeclaration decl = new XMLBeanDeclaration(this, 
KEY_ENTITY_RESOLVER, true);
-            setEntityResolver((EntityResolver) BeanHelper.createBean(decl, 
CatalogResolver.class));
+            EntityResolver resolver = (EntityResolver) 
BeanHelper.createBean(decl, CatalogResolver.class);
+            BeanHelper.setProperty(resolver, "fileSystem", getFileSystem());
+            setEntityResolver(resolver);
         }
     }
 

Modified: 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/resolver/CatalogResolver.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/resolver/CatalogResolver.java?rev=766570&r1=766569&r2=766570&view=diff
==============================================================================
--- 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/resolver/CatalogResolver.java
 (original)
+++ 
commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/resolver/CatalogResolver.java
 Mon Apr 20 04:44:15 2009
@@ -22,6 +22,7 @@
 import org.apache.xml.resolver.CatalogManager;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.impl.NoOpLog;
+import org.apache.commons.configuration.FileSystem;
 
 import java.net.URL;
 import java.io.InputStream;
@@ -50,12 +51,18 @@
     /**
      * The CatalogResolver
      */
-    private org.apache.xml.resolver.tools.CatalogResolver resolver;
+    protected org.apache.xml.resolver.tools.CatalogResolver resolver;
 
     /**
      * The CatalogManager
      */
-    private CatalogManager manager = new CatalogManager();
+    protected CatalogManager manager = new CatalogManager();
+
+    /**
+     * The FileSystem in use.
+     */
+    protected FileSystem fs = FileSystem.getDefaultFileSystem();
+
 
     /**
      * Stores the logger.
@@ -84,6 +91,15 @@
     }
 
     /**
+     * Set the FileSystem.
+     * @param fileSystem The FileSystem.
+     */
+    public void setFileSystem(FileSystem fileSystem)
+    {
+        this.fs = fileSystem;
+    }
+
+    /**
      * Enables debug logging of xml-commons Catalog processing.
      * @param debug True if debugging should be enabled, false otherwise.
      */
@@ -143,28 +159,15 @@
 
             try
             {
+                InputStream is = fs.getInputStream(null, resolved);
                 InputSource iSource = new InputSource(resolved);
                 iSource.setPublicId(publicId);
-
-                // Ideally this method would not attempt to open the
-                // InputStream, but there is a bug (in Xerces, at least)
-                // that causes the parser to mistakenly open the wrong
-                // system identifier if the returned InputSource does
-                // not have a byteStream.
-                //
-                // It could be argued that we still shouldn't do this here,
-                // but since the purpose of calling the entityResolver is
-                // almost certainly to open the input stream, it seems to
-                // do little harm.
-                //
-                URL url = new URL(resolved);
-                InputStream iStream = url.openStream();
-                iSource.setByteStream(iStream);
-
+                iSource.setByteStream(is);
                 return iSource;
             }
             catch (Exception e)
             {
+                e.printStackTrace();
                 log.debug("Failed to create InputSource for " + resolved + " ("
                                 + e.toString() + ")");
                 return null;


Reply via email to