org.apache.xbean.osgi.bundle.util
Class BundleClassLoader
java.lang.Object
java.lang.ClassLoader
org.apache.xbean.osgi.bundle.util.BundleClassLoader
- All Implemented Interfaces:
- DelegatingBundleReference, org.osgi.framework.BundleReference
- Direct Known Subclasses:
- BundleResourceClassLoader
public class BundleClassLoader
- extends java.lang.ClassLoader
- implements DelegatingBundleReference
ClassLoader for a Bundle.
In OSGi, resource lookup on resources in the META-INF directory using Bundle.getResource(String) or
Bundle.getResources(String) does not return the resources found in the wired bundles of the bundle
(wired via Import-Package or DynamicImport-Package). This class loader implementation provides
#getResource(String) and {@link #getResources(String)} methods that do delegate such resource lookups to
the wired bundles.
The URLs returned by {@link Bundle#getResource(String)} or {@link Bundle#getResources(String)} methods are
OSGi framework specific "bundle" URLs. This sometimes can cause problems with 3rd party libraries
which do not understand how to interpret the "bundle" URLs. This ClassLoader implementation, if enabled,
can return jar URLs for resources found in embedded jars in the bundle. If a resource is found within a
directory in the bundle the URL returned for that resource is unconverted.
- Version:
- $Rev: 1163514 $ $Date: 2011-08-31 00:37:38 -0700 (Wed, 31 Aug 2011) $
|
Constructor Summary |
BundleClassLoader(org.osgi.framework.Bundle bundle)
|
BundleClassLoader(org.osgi.framework.Bundle bundle,
boolean searchWiredBundles)
|
BundleClassLoader(org.osgi.framework.Bundle bundle,
boolean searchWiredBundles,
boolean convertResourceUrls)
|
| Methods inherited from class java.lang.ClassLoader |
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findSystemClass, getPackage, getPackages, getParent, getResourceAsStream, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, loadClass, resolveClass, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners |
| Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
bundle
protected final org.osgi.framework.Bundle bundle
resourceHelper
protected final BundleResourceHelper resourceHelper
BundleClassLoader
public BundleClassLoader(org.osgi.framework.Bundle bundle)
BundleClassLoader
public BundleClassLoader(org.osgi.framework.Bundle bundle,
boolean searchWiredBundles)
BundleClassLoader
public BundleClassLoader(org.osgi.framework.Bundle bundle,
boolean searchWiredBundles,
boolean convertResourceUrls)
toString
public java.lang.String toString()
- Overrides:
toString in class java.lang.Object
loadClass
protected java.lang.Class<?> loadClass(java.lang.String name,
boolean resolve)
throws java.lang.ClassNotFoundException
- Overrides:
loadClass in class java.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
getResource
public java.net.URL getResource(java.lang.String name)
- Overrides:
getResource in class java.lang.ClassLoader
getResources
public java.util.Enumeration<java.net.URL> getResources(java.lang.String name)
throws java.io.IOException
- Overrides:
getResources in class java.lang.ClassLoader
- Throws:
java.io.IOException
findResources
public java.util.Enumeration<java.net.URL> findResources(java.lang.String name)
throws java.io.IOException
- Overrides:
findResources in class java.lang.ClassLoader
- Throws:
java.io.IOException
setSearchWiredBundles
public void setSearchWiredBundles(boolean search)
getSearchWiredBundles
public boolean getSearchWiredBundles()
setConvertResourceUrls
public void setConvertResourceUrls(boolean convert)
getConvertResourceUrls
public boolean getConvertResourceUrls()
getBundle
public org.osgi.framework.Bundle getBundle(boolean unwrap)
- Return the bundle associated with this classloader.
In most cases the bundle associated with the classloader is a regular framework bundle.
However, in some cases the bundle associated with the classloader is a
DelegatingBundle.
In such cases, the unwrap parameter controls whether this function returns the
DelegatingBundle instance or the main application bundle backing with the DelegatingBundle.
- Specified by:
getBundle in interface DelegatingBundleReference
- Parameters:
unwrap - If true and if the bundle associated with this classloader is a DelegatingBundle,
this function will return the main application bundle backing with the DelegatingBundle.
Otherwise, the bundle associated with this classloader is returned as is.
- Returns:
- The bundle associated with this classloader.
getBundle
public org.osgi.framework.Bundle getBundle()
- Return the bundle associated with this classloader.
This method calls
getBundle(true) and therefore always returns a regular
framework bundle.
Note: Some libraries use BundleReference.getBundle() to obtain a bundle for the given
classloader and expect the returned bundle instance to be work with any OSGi API. Some of these API might
not work if DelegatingBundle is returned. That is why this function will always return
a regular framework bundle. See getBundle(boolean) for more information.
- Specified by:
getBundle in interface org.osgi.framework.BundleReference
- Returns:
- The bundle associated with this classloader.
hashCode
public int hashCode()
- Overrides:
hashCode in class java.lang.Object
equals
public boolean equals(java.lang.Object other)
- Overrides:
equals in class java.lang.Object
Copyright © 2005-2012 The Apache Software Foundation. All Rights Reserved.