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 aBundle
.
In OSGi, resource lookup on resources in the META-INF directory usingBundle.getResource(String)
orBundle.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 providesand {@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 09:37:38 +0200 (Wed, 31 Aug 2011) $
-
-
Field Summary
Fields Modifier and Type Field Description protected org.osgi.framework.Bundle
bundle
protected BundleResourceHelper
resourceHelper
-
Constructor Summary
Constructors Constructor Description BundleClassLoader(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
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(java.lang.Object other)
java.util.Enumeration<java.net.URL>
findResources(java.lang.String name)
org.osgi.framework.Bundle
getBundle()
Return the bundle associated with this classloader.org.osgi.framework.Bundle
getBundle(boolean unwrap)
Return the bundle associated with this classloader.boolean
getConvertResourceUrls()
java.net.URL
getResource(java.lang.String name)
java.util.Enumeration<java.net.URL>
getResources(java.lang.String name)
boolean
getSearchWiredBundles()
int
hashCode()
protected java.lang.Class<?>
loadClass(java.lang.String name, boolean resolve)
void
setConvertResourceUrls(boolean convert)
void
setSearchWiredBundles(boolean search)
java.lang.String
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 Detail
-
bundle
protected final org.osgi.framework.Bundle bundle
-
resourceHelper
protected final BundleResourceHelper resourceHelper
-
-
Constructor Detail
-
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 Detail
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
loadClass
protected java.lang.Class<?> loadClass(java.lang.String name, boolean resolve) throws java.lang.ClassNotFoundException
- Overrides:
loadClass
in classjava.lang.ClassLoader
- Throws:
java.lang.ClassNotFoundException
-
getResource
public java.net.URL getResource(java.lang.String name)
- Overrides:
getResource
in classjava.lang.ClassLoader
-
getResources
public java.util.Enumeration<java.net.URL> getResources(java.lang.String name) throws java.io.IOException
- Overrides:
getResources
in classjava.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 classjava.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 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()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object other)
- Overrides:
equals
in classjava.lang.Object
-
-