org.apache.tuscany.sca.binding.ejb.corba
Class ClassLoadingUtil

java.lang.Object
  extended by org.apache.tuscany.sca.binding.ejb.corba.ClassLoadingUtil

public class ClassLoadingUtil
extends java.lang.Object

Utility class for loading classes by a variety of name variations.

Supported names types are:

1) Fully qualified class name (e.g., "java.lang.String", "org.apache.geronimo.kernel.ClassLoading" 2) Method signature encoding ("Ljava.lang.String;", "J", "I", etc.) 3) Primitive type names ("int", "boolean", etc.) 4) Method array signature strings ("[I", "[Ljava.lang.String") 5) Arrays using Java code format ("int[]", "java.lang.String[][]")

The classes are loaded using the provided class loader. For the basic types, the primitive reflection types are returned.


Constructor Summary
ClassLoadingUtil()
           
 
Method Summary
static java.util.Set getAllTypes(java.lang.Class type)
           
static java.lang.String getClassName(java.lang.Class type)
          Map a class object back to a class name.
static java.lang.Class loadClass(java.lang.String className, java.lang.ClassLoader classLoader)
          Load a class that matches the requested name, using the provided class loader context.
static java.lang.Class[] reduceInterfaces(java.lang.Class[] source)
          If there are multiple interfaces, and some of them extend each other, eliminate the superclass in favor of the subclasses that extend them.
static java.util.Set reduceInterfaces(java.util.Set source)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClassLoadingUtil

public ClassLoadingUtil()
Method Detail

loadClass

public static java.lang.Class loadClass(java.lang.String className,
                                        java.lang.ClassLoader classLoader)
                                 throws java.lang.ClassNotFoundException
Load a class that matches the requested name, using the provided class loader context.

The class name may be a standard class name, the name of a primitive type Java reflection class (e.g., "boolean" or "int"), or a type in method type signature encoding. Array classes in either encoding form are also processed.

Parameters:
className - The name of the required class.
classLoader - The class loader used to resolve the class object.
Returns:
The Class object resolved from "className".
Throws:
java.lang.ClassNotFoundException - When unable to resolve the class object.
java.lang.IllegalArgumentException - If either argument is null.

getClassName

public static java.lang.String getClassName(java.lang.Class type)
Map a class object back to a class name. The returned class object must be "round trippable", which means

type == ClassLoading.loadClass(ClassLoading.getClassName(type), classLoader)

must be true. To ensure this, the class name is always returned in method signature format.

Parameters:
type - The class object we convert into name form.
Returns:
A string representation of the class name, in method signature format.

getAllTypes

public static java.util.Set getAllTypes(java.lang.Class type)

reduceInterfaces

public static java.util.Set reduceInterfaces(java.util.Set source)

reduceInterfaces

public static java.lang.Class[] reduceInterfaces(java.lang.Class[] source)
If there are multiple interfaces, and some of them extend each other, eliminate the superclass in favor of the subclasses that extend them. If one of the entries is a class (not an interface), make sure it's the first one in the array. If more than one of the entries is a class, throws an IllegalArgumentException

Parameters:
source - the original list of interfaces
Returns:
the equal or smaller list of interfaces