Author: ecki Date: Fri Oct 2 15:13:15 2015 New Revision: 1706429 URL: http://svn.apache.org/viewvc?rev=1706429&view=rev Log: [VFS-424] Fix StandardFileSystemManager class loading so it works in a OSGi environment.
Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java commons/proper/vfs/trunk/src/changes/changes.xml Modified: commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java?rev=1706429&r1=1706428&r2=1706429&view=diff ============================================================================== --- commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java (original) +++ commons/proper/vfs/trunk/core/src/main/java/org/apache/commons/vfs2/impl/StandardFileSystemManager.java Fri Oct 2 15:13:15 2015 @@ -130,12 +130,10 @@ public class StandardFileSystemManager */ protected void configurePlugins() throws FileSystemException { - final ClassLoader cl = findClassLoader(); - Enumeration<URL> enumResources; try { - enumResources = cl.getResources(PLUGIN_CONFIG_RESOURCE); + enumResources = loadResources(PLUGIN_CONFIG_RESOURCE); } catch (final IOException e) { @@ -407,7 +405,7 @@ public class StandardFileSystemManager { try { - findClassLoader().loadClass(className); + loadClass(className); return true; } catch (final ClassNotFoundException e) @@ -480,7 +478,7 @@ public class StandardFileSystemManager { try { - final Class<?> clazz = findClassLoader().loadClass(className); + Class<?> clazz = loadClass(className); return clazz.newInstance(); } catch (final Exception e) @@ -488,4 +486,36 @@ public class StandardFileSystemManager throw new FileSystemException("vfs.impl/create-provider.error", className, e); } } + + /** + * Load a class from different class loaders. + * @throws ClassNotFoundException if last {@code loadClass} failed. + * @see #findClassLoader() + */ + private Class< ? > loadClass(String className) throws ClassNotFoundException + { + try + { + return findClassLoader().loadClass(className); + } + catch (final ClassNotFoundException e) + { + return getClass().getClassLoader().loadClass(className); + } + } + + /** + * Resolve resources from different class loaders. + * @throws IOException if {@code getResource} failed. + * @see #findClassLoader() + */ + private Enumeration<URL> loadResources(String name) throws IOException + { + Enumeration<URL> res = findClassLoader().getResources(name); + if (res == null || !res.hasMoreElements()) + { + res = getClass().getClassLoader().getResources(name); + } + return res; + } } Modified: commons/proper/vfs/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1706429&r1=1706428&r2=1706429&view=diff ============================================================================== --- commons/proper/vfs/trunk/src/changes/changes.xml (original) +++ commons/proper/vfs/trunk/src/changes/changes.xml Fri Oct 2 15:13:15 2015 @@ -26,6 +26,9 @@ <!-- <action issue="VFS-443" dev="ggregory" type="update" due-to="nickallen"> --> <!-- [Local] Need an easy way to convert from a FileObject to a File. --> <!-- </action> --> + <action issue="VFS-424" dev="ecki" type="fix"> + Fix StandardFileSystemManager class loading so it works in a OSGi environment. + </action> <action issue="VFS-490" dev="ecki" type="fix"> [vfsclassloader] Do not open folders with .jar extension. Adds tests. </action>