You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by no...@apache.org on 2011/03/18 09:58:21 UTC

svn commit: r1082850 - /aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java

Author: not
Date: Fri Mar 18 08:58:20 2011
New Revision: 1082850

URL: http://svn.apache.org/viewvc?rev=1082850&view=rev
Log:
ARIES-615 Switch to using reflection so the EquinoxWorker works with nested frameworks.

Modified:
    aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java

Modified: aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java
URL: http://svn.apache.org/viewvc/aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java?rev=1082850&r1=1082849&r2=1082850&view=diff
==============================================================================
--- aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java (original)
+++ aries/trunk/util/src/main/java/org/apache/aries/util/internal/EquinoxWorker.java Fri Mar 18 08:58:20 2011
@@ -18,21 +18,39 @@
  */
 package org.apache.aries.util.internal;
 
-import org.eclipse.osgi.framework.adaptor.BundleClassLoader;
-import org.eclipse.osgi.framework.internal.core.BundleHost;
-import org.eclipse.osgi.internal.loader.BundleLoader;
-import org.eclipse.osgi.internal.loader.BundleLoaderProxy;
+import java.lang.reflect.InvocationTargetException;
+
 import org.osgi.framework.Bundle;
 
 public class EquinoxWorker extends DefaultWorker implements FrameworkUtilWorker {
 
   public ClassLoader getClassLoader(Bundle b) 
   {
-    BundleHost host = (BundleHost) b;
-    BundleLoaderProxy lp = host.getLoaderProxy();
-    BundleLoader bl = (lp == null) ? null : lp.getBasicBundleLoader();
-    BundleClassLoader cl = (bl == null) ? null : bl.createClassLoader();
+    ClassLoader result = null;
+    try {
+      Object bundleLoaderProxy = invoke(b, "getLoaderProxy");
+      if (bundleLoaderProxy != null) {
+        Object bundleLoader = invoke(bundleLoaderProxy, "getBasicBundleLoader");
+        if (bundleLoader != null) {
+          Object bundleClassLoader = invoke(bundleLoader, "createClassLoader");
+          if (bundleClassLoader instanceof ClassLoader) {
+            result = (ClassLoader)bundleClassLoader;
+          }
+        }
+      }
+    } catch (IllegalArgumentException e) {
+    } catch (SecurityException e) {
+    } catch (IllegalAccessException e) {
+    } catch (InvocationTargetException e) {
+    } catch (NoSuchMethodException e) {
+    }
     
-    return ((cl instanceof ClassLoader) ? (ClassLoader)cl : null);
+    return result;
+  }
+
+  private Object invoke(Object targetObject, String method) throws IllegalAccessException, InvocationTargetException,
+      NoSuchMethodException
+  {
+    return targetObject.getClass().getDeclaredMethod(method).invoke(targetObject);
   }
 }