View Javadoc
1 package remoteTester.runner.server; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /*** 7 * Created by Nicolas FRANK 8 * @mail: nicolas.frank@laposte.net 9 * Date: Oct 18, 2002 10 * Time: 11:16:50 AM 11 */ 12 13 /*** 14 * This class loader instanciate classes provided as a byte array 15 */ 16 public class ByteClassLoader extends ClassLoader { 17 18 /*** 19 * main class byte stream (todo : could be moved into the hashMap) 20 */ 21 private byte[] classAsByte; 22 /*** 23 * main class (todo : could be moved into the hashMap) 24 */ 25 private String className; 26 /*** 27 * list of helper classes 28 */ 29 private Map helperClasses = new HashMap(); 30 31 /*** 32 * This class loader allows to load the Class provided as a byte array in the current JVM 33 * 34 * @param classAsByte 35 * @param className 36 */ 37 public ByteClassLoader(byte[] classAsByte, String className) { 38 39 this.classAsByte = classAsByte; 40 this.className = className; 41 } 42 43 /*** 44 * This class loader allows to load the Class provided as a byte array in the current JVM 45 * 46 * @param classAsByte an array of byte that allows to create a class 47 * @param className the class name 48 * @param helperClassesAsBytes helper classes definition as byte arrays 49 * @param helperClasseNames helper classes names 50 */ 51 public ByteClassLoader(byte[] classAsByte, String className, byte[][] helperClassesAsBytes, String[] helperClasseNames) { 52 53 this.classAsByte = classAsByte; 54 this.className = className; 55 56 if (helperClasseNames != null) { 57 // put classes definition into map 58 for (int i = 0; i < helperClasseNames.length; i++) { 59 helperClasses.put(helperClasseNames[i], helperClassesAsBytes[i]); 60 } 61 } 62 } 63 64 /*** 65 * this should be the prefered method to load the class that was defined in the constructor 66 * 67 * @return the Class loaded 68 * @throws java.lang.ClassNotFoundException 69 * 70 */ 71 public synchronized Class loadClass() throws ClassNotFoundException { 72 return loadClass(className, false); 73 } 74 75 76 /*** 77 * overrride the default class loader mechanism 78 * 79 * @param className class to load 80 * @param resolve need to resolve 81 * @return The Class loaded 82 * @throws ClassNotFoundException 83 */ 84 protected synchronized Class loadClass(String className, boolean resolve) 85 throws ClassNotFoundException { 86 Class resultClass = null; 87 88 89 if (!className.equals(this.className)) { 90 // now I support helper classes (mock objects...) 91 if (helperClasses.containsKey(className)) { 92 93 resultClass = defineClass(className, (byte[]) helperClasses.get(className), 0, ((byte[]) helperClasses.get(className)).length); 94 // resolve if necessary 95 if (resolve) { 96 resolveClass(resultClass); 97 } 98 99 return resultClass; 100 } 101 102 ClassLoader parentClassLoader = null; 103 try { 104 // deleguate other class loading to parent classloader 105 parentClassLoader = getClass().getClassLoader(); 106 resultClass = parentClassLoader.loadClass(className); 107 return resultClass; 108 } catch (ClassNotFoundException e) { 109 System.out.println("failed loading " + className + " using parent classloader (" + parentClassLoader.getClass().getName() + ")!"); 110 throw new ClassNotFoundException(); 111 } 112 } 113 114 resultClass = defineClass(className, classAsByte, 0, classAsByte.length); 115 116 // resolve if necessary 117 if (resolve) { 118 resolveClass(resultClass); 119 } 120 121 return resultClass; 122 } 123 }

This page was automatically generated by Maven