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
ClassLoader for a
In OSGi, resource lookup on resources in the META-INF directory using
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
invalid input: 'and {@link #getResources(String)} methods that do delegate such resource lookups to
the wired bundles.
<br/>
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 <tt>jar</tt> 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 09:37:38 +0200 (Wed, 31 Aug 2011) $'
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.osgi.framework.Bundle
protected final BundleResourceHelper
-
Constructor Summary
ConstructorsConstructorDescriptionBundleClassLoader
(org.osgi.framework.Bundle bundle) BundleClassLoader
(org.osgi.framework.Bundle bundle, boolean searchWiredBundles) BundleClassLoader
(org.osgi.framework.Bundle bundle, boolean searchWiredBundles, boolean convertResourceUrls) -
Method Summary
Modifier and TypeMethodDescriptionboolean
findResources
(String name) org.osgi.framework.Bundle
Return the bundle associated with this classloader.org.osgi.framework.Bundle
getBundle
(boolean unwrap) Return the bundle associated with this classloader.boolean
getResource
(String name) getResources
(String name) boolean
int
hashCode()
protected Class
<?> void
setConvertResourceUrls
(boolean convert) void
setSearchWiredBundles
(boolean search) toString()
Methods inherited from class java.lang.ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findClass, findLibrary, findLoadedClass, findResource, findResource, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResourceAsStream, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Field Details
-
bundle
protected final org.osgi.framework.Bundle bundle -
resourceHelper
-
-
Constructor Details
-
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)
-
-
Method Details
-
toString
-
loadClass
- Overrides:
loadClass
in classClassLoader
- Throws:
ClassNotFoundException
-
getResource
- Overrides:
getResource
in classClassLoader
-
getResources
- Overrides:
getResources
in classClassLoader
- Throws:
IOException
-
findResources
- Overrides:
findResources
in classClassLoader
- Throws:
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 aDelegatingBundle
. In such cases, the unwrap parameter controls whether this function returns theDelegatingBundle
instance or the main application bundle backing with theDelegatingBundle
.- Specified by:
getBundle
in interfaceDelegatingBundleReference
- Parameters:
unwrap
- If true and if the bundle associated with this classloader is aDelegatingBundle
, this function will return the main application bundle backing with theDelegatingBundle
. 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 callsgetBundle(true)
and therefore always returns a regular framework bundle.
Note: Some libraries useBundleReference.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 ifDelegatingBundle
is returned. That is why this function will always return a regular framework bundle. SeegetBundle(boolean)
for more information.- Specified by:
getBundle
in interfaceorg.osgi.framework.BundleReference
- Returns:
- The bundle associated with this classloader.
-
hashCode
public int hashCode() -
equals
-