public class ClassLoaderUtil
extends java.lang.Object
 The Java reflection framework allows to load classes at runtime
 for instance via Class.forName(String). In a configuration-file
 configured classes can also be instantiated via the ServiceLoader.
 But both approaches work only, if the Class to work with is known
 by the current ClassLoader. This is no problem in a normal Java Application
 since all classes are managed by the same ClassLoader. But in an
 OSGI setup like Eclipse, each component (plug-in) has its own ClassLoader.
 The consequence is that the reflection framework can only work with classes
 in the same component as they are only known by the current ClassLoader.
 
To achieve the same behavior in all supported types provides this class utility methods which should be used instead:
getClassforName(String) instead of Class.forName(String)The application specific behavior is implemented in {@link IClassLoader} instances. The used instance is accessible via {@link #getClassLoader()} which is by default the {@link JavaApplicationClassLoader}. In an OSGI (Eclipse) setup the instance is replaced via {@link #setClassLoader(IClassLoader)} with an {@code OSGIClassLoader} instance.
IClassLoader, 
JavaApplicationClassLoader| Modifier and Type | Field and Description | 
|---|---|
private static IClassLoader | 
classLoader
The  
IClassLoader instance to use. | 
| Constructor and Description | 
|---|
ClassLoaderUtil()  | 
| Modifier and Type | Method and Description | 
|---|---|
static java.lang.Class<?> | 
getClassforName(java.lang.String className)
Returns the  
Class for the given class name similar
 to Class.forName(String) but with same behavior in all
 supported application types. | 
static IClassLoader | 
getClassLoader()
Returns the used  
IClassLoader. | 
static <S> java.lang.Iterable<S> | 
loadServices(java.lang.Class<?> contextClass,
            java.lang.Class<S> service)
Loads all configured services similar to  
ServiceLoader.load(Class)
 but with same behavior in all supported application types. | 
static <S> java.lang.Iterable<S> | 
loadServices(java.lang.Class<S> service)
Loads all configured services similar to  
ServiceLoader.load(Class)
 but with same behavior in all supported application types. | 
static void | 
setClassLoader(IClassLoader classLoader)
Sets the  
IClassLoader instance to use. | 
private static IClassLoader classLoader
IClassLoader instance to use.public static IClassLoader getClassLoader()
IClassLoader.IClassLoader.public static void setClassLoader(IClassLoader classLoader)
IClassLoader instance to use.classLoader - The IClassLoader instance to use.public static java.lang.Class<?> getClassforName(java.lang.String className)
                                          throws java.lang.ClassNotFoundException
Class for the given class name similar
 to Class.forName(String) but with same behavior in all
 supported application types.className - The name of the class.Class instance.java.lang.ClassNotFoundException - Occurred Exception if Class is not available.public static <S> java.lang.Iterable<S> loadServices(java.lang.Class<S> service)
ServiceLoader.load(Class)
 but with same behavior in all supported application types.service - The requested service.Iterable with the created service instances.public static <S> java.lang.Iterable<S> loadServices(java.lang.Class<?> contextClass,
                                                     java.lang.Class<S> service)
ServiceLoader.load(Class)
 but with same behavior in all supported application types.contextClass - The calling Class which ClassLoader knows the configuration-file.service - The requested service.Iterable with the created service instances.