mbeaninstantiatorimpl.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 539 行 · 第 1/2 页

JAVA
539
字号
	throws OperationsException {        // Check parameter validity            if (data == null) {            throw new  RuntimeOperationsException(new 		IllegalArgumentException(), "Null data passed in parameter");        }        if (data.length == 0) {	    throw new  RuntimeOperationsException(new 		IllegalArgumentException(), "Empty data passed in parameter");        } 	// Object deserialization              ByteArrayInputStream bIn;        ObjectInputStream    objIn;        String               typeStr;        bIn   = new ByteArrayInputStream(data);        try {            objIn = new ObjectInputStreamWithLoader(bIn,loader);        } catch (IOException e) {            throw new OperationsException(                     "An IOException occured trying to de-serialize the data");        }         return objIn;        }    public ObjectInputStream deserialize(String className,					 ObjectName loaderName,					 byte[] data,					 ClassLoader loader)	throws InstanceNotFoundException,	       OperationsException,	       ReflectionException  {        // Check parameter validity        if (data == null) {            throw new  RuntimeOperationsException(new 		IllegalArgumentException(), "Null data passed in parameter");        }        if (data.length == 0) {            throw new  RuntimeOperationsException(new 		IllegalArgumentException(), "Empty data passed in parameter");        }        if (className == null) {            throw new  RuntimeOperationsException(new 	     IllegalArgumentException(), "Null className passed in parameter");        }               Class theClass = null;        if (loaderName == null) {            // Load the class using the agent class loader	    theClass = findClass(className, loader);                } else {            // Get the class loader MBean	    try {		ClassLoader instance = null;				if (clr!=null)  		    instance = clr.getClassLoader(loaderName);		if (instance == null) 		    throw new ClassNotFoundException(className);		theClass = Class.forName(className, false, instance);            }            catch (ClassNotFoundException e) {                throw new ReflectionException(e,                                "The MBean class could not be loaded by the " + 		               loaderName.toString() + " class loader");            }        }         // Object deserialization        ByteArrayInputStream bIn;        ObjectInputStream    objIn;        String               typeStr;                bIn   = new ByteArrayInputStream(data);        try {            objIn = new ObjectInputStreamWithLoader(bIn,					   theClass.getClassLoader());        } catch (IOException e) {            throw new OperationsException(                    "An IOException occured trying to de-serialize the data");        }                return objIn;    }    public Object instantiate(String className)	throws ReflectionException,	MBeanException {	return instantiate(className, (Object[]) null, (String[]) null, null);    }    public Object instantiate(String className, ObjectName loaderName, 			      ClassLoader loader)         throws ReflectionException, MBeanException,	       InstanceNotFoundException {	return instantiate(className, loaderName, (Object[]) null, 			   (String[]) null, loader);    }    public Object instantiate(String className,			      Object params[],			      String signature[],			      ClassLoader loader)         throws ReflectionException,	MBeanException {	Class theClass = findClassWithDefaultLoaderRepository(className);	return instantiate(theClass, params, signature, loader);    }    public Object instantiate(String className,			      ObjectName loaderName,			      Object params[],			      String signature[],			      ClassLoader loader)         throws ReflectionException,	       MBeanException,	InstanceNotFoundException {	// ------------------------------ 	// ------------------------------	Class theClass;		if (loaderName == null) {	    theClass = findClass(className, loader);	} else {	    theClass = findClass(className, loaderName);		}       	return instantiate(theClass, params, signature, loader);    }    public ModifiableClassLoaderRepository getClassLoaderRepository() {	return clr;    }    /**     * Load a class with the specified loader, or with this object     * class loader if the specified loader is null.     **/    static Class loadClass(String className, ClassLoader loader)         throws ReflectionException {           Class theClass = null;	if (className == null) {	    throw new RuntimeOperationsException(new 		IllegalArgumentException("The class name cannot be null"),                               "Exception occured during object instantiation");	} 	try {	    if (loader == null) 		loader = MBeanInstantiatorImpl.class.getClassLoader();	    if (loader != null) {		theClass = Class.forName(className, false, loader);	    } else {		theClass = Class.forName(className);	    }	} catch (ClassNotFoundException e) {	    throw new ReflectionException(e, 	    "The MBean class could not be loaded by the context classloader");	}        return theClass;    }        /**     * Load the classes specified in the signature with the given loader,      * or with this object class loader.     **/    static Class[] loadSignatureClasses(String signature[],					ClassLoader loader)	throws  ReflectionException {	    	if (signature == null) return null;	final ClassLoader aLoader =    	   (loader==null?MBeanInstantiatorImpl.class.getClassLoader():loader);	final int length= signature.length;	final Class tab[]=new Class[length]; 	if (length == 0) return tab;	try {	    for (int i= 0; i < length; i++) {		// Start handling primitive types (int. boolean and so 		// forth)		//				final Class primCla = 		    StandardMetaDataImpl.findClassForPrim(signature[i]);		if (primCla != null) {		    tab[i] = primCla;		    continue;		}		// Ok we do not have a primitive type ! We need to build 		// the signature of the method		//		// We need to load the class through the class 		// loader of the target object.		// 		tab[i] = Class.forName(signature[i], false, aLoader);	    }	} catch (ClassNotFoundException e) {	    debugX("findSignatureClasses",e);	    throw new ReflectionException(e, 		      "The parameter class could not be found");	} catch (RuntimeException e) {	    debugX("findSignatureClasses",e);	    throw e; 	}	return tab;    }    // TRACES & DEBUG    //---------------        private static boolean isTraceOn() {        return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER);    }    private static void trace(String clz, String func, String info) {        Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER, clz, func, info);    }    private static void trace(String func, String info) {        trace(dbgTag, func, info);    }    private static boolean isDebugOn() {        return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER);    }    private static void debug(String clz, String func, String info) {        Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER, clz, func, info);    }    private static void debug(String func, String info) {        debug(dbgTag, func, info);    }    private static void debugX(String func,Throwable e) {	if (isDebugOn()) {	    final StringWriter s = new StringWriter();	    e.printStackTrace(new PrintWriter(s));	    final String stack = s.toString();	    	    debug(dbgTag,func,"Exception caught in "+ func+"(): "+e);	    debug(dbgTag,func,stack);	    	    // java.lang.System.err.println("**** Exception caught in "+	    //				 func+"(): "+e);	    // java.lang.System.err.println(stack);	}    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?