Author: rmannibucau
Date: Tue Jun 11 14:57:57 2013
New Revision: 1491819

URL: http://svn.apache.org/r1491819
Log:
TOMEE-970 reading loaderClass

Modified:
    
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java

Modified: 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java?rev=1491819&r1=1491818&r2=1491819&view=diff
==============================================================================
--- 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
 (original)
+++ 
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/QuickContextXmlParser.java
 Tue Jun 11 14:57:57 2013
@@ -18,6 +18,7 @@ package org.apache.openejb.config;
 
 import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.loader.Files;
+import org.apache.openejb.util.reflection.Reflections;
 import org.apache.xbean.finder.ClassLoaders;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -57,24 +58,26 @@ public class QuickContextXmlParser exten
                 if 
("org.apache.catalina.loader.VirtualWebappLoader".equals(className)
                         || 
"org.apache.tomee.catalina.ProvisioningWebappLoader".equals(className)) {
                     virtualClasspath = attributes.getValue("virtualClasspath");
-                } else {
-                    try {
-                        final ClassLoader parent = 
ParentClassLoaderFinder.Helper.get();
-                        final Class<?> clazz = parent.loadClass(className);
-                        ClassLoader instance = null;
-                        try {
-                            final Constructor<?> constructor = 
clazz.getConstructor(ClassLoader.class);
-                            instance = 
ClassLoader.class.cast(constructor.newInstance(parent));
-                        } catch (final NoSuchMethodException nsme) {
-                            instance = 
ClassLoader.class.cast(clazz.newInstance());
-                        }
-
-                        if (instance != null) {
-                            urls = ClassLoaders.findUrls(instance);
-                        }
-                    } catch (final Exception e) {
-                        // no-op
+                }
+            }
+
+            final String loaderClass = attributes.getValue("loaderClass");
+            if (loaderClass != null) {
+                try {
+                    final ClassLoader parent = 
ParentClassLoaderFinder.Helper.get();
+
+                    // create a fake loader
+                    final Object loader = 
parent.loadClass("org.apache.catalina.loader.WebappLoader").newInstance();
+                    Reflections.set(loader, "loaderClass", loaderClass);
+                    Reflections.set(loader, "parentClassLoader", parent);
+
+                    // get the loader
+                    final ClassLoader instance = 
ClassLoader.class.cast(Reflections.invokeByReflection(loader, 
"createClassLoader", new Class<?>[0], null));
+                    if (instance != null) {
+                        urls = ClassLoaders.findUrls(instance);
                     }
+                } catch (final Exception e) {
+                    // no-op
                 }
             }
         }


Reply via email to