You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:19:38 UTC
[sling-org-apache-sling-commons-classloader] 11/21: Provide parent
class loader to dynamic class loader providers; check for null reference.
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.commons.classloader-0.9.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-classloader.git
commit 8023ea15d1f7eab8a6291fe68bc9eb4cefd818cb
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Thu Jul 16 05:31:50 2009 +0000
Provide parent class loader to dynamic class loader providers; check for null reference.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/commons/classloader@794537 13f79535-47bb-0310-9956-ffa450edef68
---
.../classloader/DynamicClassLoaderProvider.java | 7 ++++-
.../classloader/impl/ClassLoaderFacade.java | 36 +++++++++++++---------
.../impl/DynamicClassLoaderManagerImpl.java | 4 ++-
3 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
index 04eaf8e..cdac258 100644
--- a/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
+++ b/src/main/java/org/apache/sling/commons/classloader/DynamicClassLoaderProvider.java
@@ -29,7 +29,12 @@ public interface DynamicClassLoaderProvider {
/**
* Return the class loader used for dynamic class loading.
+ * The returned class loader should use the provided parent class loader
+ * as one of its parent class loaders. This ensures that the returned
+ * class loader has access to all dynamically loaded classes that
+ * are not part of this class loader.
+ * @param parent The parent class loader for this dynamic class loader.
* @return The class loader.
*/
- ClassLoader getClassLoader();
+ ClassLoader getClassLoader(ClassLoader parent);
}
diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
index 1ef22a4..e852bd8 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/ClassLoaderFacade.java
@@ -42,9 +42,11 @@ public class ClassLoaderFacade extends ClassLoader {
public URL getResource(String name) {
final ClassLoader[] loaders = manager.getDynamicClassLoaders();
for(final ClassLoader cl : loaders) {
- final URL u = cl.getResource(name);
- if ( u != null ) {
- return u;
+ if ( cl != null ) {
+ final URL u = cl.getResource(name);
+ if ( u != null ) {
+ return u;
+ }
}
}
return null;
@@ -56,9 +58,11 @@ public class ClassLoaderFacade extends ClassLoader {
public InputStream getResourceAsStream(String name) {
final ClassLoader[] loaders = manager.getDynamicClassLoaders();
for(final ClassLoader cl : loaders) {
- final InputStream i = cl.getResourceAsStream(name);
- if ( i != null ) {
- return i;
+ if ( cl != null ) {
+ final InputStream i = cl.getResourceAsStream(name);
+ if ( i != null ) {
+ return i;
+ }
}
}
return null;
@@ -70,9 +74,11 @@ public class ClassLoaderFacade extends ClassLoader {
public Enumeration<URL> getResources(String name) throws IOException {
final ClassLoader[] loaders = manager.getDynamicClassLoaders();
for(final ClassLoader cl : loaders) {
- final Enumeration<URL> e = cl.getResources(name);
- if ( e != null && e.hasMoreElements() ) {
- return e;
+ if ( cl != null ) {
+ final Enumeration<URL> e = cl.getResources(name);
+ if ( e != null && e.hasMoreElements() ) {
+ return e;
+ }
}
}
return null;
@@ -84,11 +90,13 @@ public class ClassLoaderFacade extends ClassLoader {
public Class<?> loadClass(String name) throws ClassNotFoundException {
final ClassLoader[] loaders = manager.getDynamicClassLoaders();
for(final ClassLoader cl : loaders) {
- try {
- final Class<?> c = cl.loadClass(name);
- return c;
- } catch (Exception cnfe) {
- // we just ignore this and try the next class loader
+ if ( cl != null ) {
+ try {
+ final Class<?> c = cl.loadClass(name);
+ return c;
+ } catch (Exception cnfe) {
+ // we just ignore this and try the next class loader
+ }
}
}
throw new ClassNotFoundException("Class not found: " + name);
diff --git a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
index 2d9cc1f..2e5c6e1 100644
--- a/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
+++ b/src/main/java/org/apache/sling/commons/classloader/impl/DynamicClassLoaderManagerImpl.java
@@ -89,7 +89,9 @@ public class DynamicClassLoaderManagerImpl
int index = 1;
for(final ServiceReference ref : refs) {
final DynamicClassLoaderProvider provider = (DynamicClassLoaderProvider)this.getService(ref);
- loaders[index] = provider.getClassLoader();
+ if ( provider != null ) {
+ loaders[index] = provider.getClassLoader(this.pckAdminCL);
+ }
index++;
}
// and now use new array
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.