View Javadoc
1 2 /* --------------------------- Package ---------------------------- */ 3 package net.jbeans.lang.loader; 4 5 /* ------------------ Import classes (packages) ------------------- *//package-summary/html">color="#329900"> ------------------ Import classes (packages) ------------------- *//package-summary.html">color="#329900">/* ------------------ Import classes (packages) ------------------- *//package-summary.html">color="#329900"> ------------------ Import classes (packages) ------------------- */ 6 import java.io.*; 7 import java.lang.reflect.*; 8 9 /*==================================================================== 10 Implementation of class MtObjectInputStreamLoader 11 ====================================================================*/ 12 /*** 13 * This subclass of ObjectInputStream delegates loading of classes to 14 * an existing ClassLoader. 15 * 16 * @version $Revision: 1.1.1.1 $ 17 * @author Masahiro Takatsuka (masa@jh9gpz.com) 18 * @see ObjectInputStream 19 */ 20 21 public final class ObjectInputStreamLoader extends ObjectInputStream { 22 private ClassLoader classLoader; 23 24 /*** 25 * Loader must be non-null; 26 */ 27 public ObjectInputStreamLoader(InputStream in, ClassLoader loader) throws IOException, StreamCorruptedException { 28 super(in); 29 if (loader == null || in == null) { 30 throw new IllegalArgumentException("Illegal null argument to ObjectInputStreamLoader"); 31 } 32 this.classLoader = loader; 33 } 34 35 /*** 36 * Make a primitive array class 37 */ 38 39 private Class primitiveType(char type) { 40 switch (type) { 41 case 'B': return byte.class; 42 case 'C': return char.class; 43 case 'D': return double.class; 44 case 'F': return float.class; 45 case 'I': return int.class; 46 case 'J': return long.class; 47 case 'S': return short.class; 48 case 'Z': return boolean.class; 49 default: return null; 50 } 51 } 52 53 /*** 54 * Use the given ClassLoader rather than using the system class 55 */ 56 protected Class resolveClass(ObjectStreamClass classDesc) 57 throws IOException, ClassNotFoundException { 58 59 String cname = classDesc.getName(); 60 if (cname.startsWith("[")) { 61 // An array 62 Class component; // component class 63 int dcount; // dimension 64 for (dcount=1; cname.charAt(dcount)=='['; dcount++) ; 65 if (cname.charAt(dcount) == 'L') { 66 component = this.classLoader.loadClass(cname.substring(dcount+1, 67 cname.length()-1)); 68 } else { 69 if (cname.length() != dcount+1) { 70 throw new ClassNotFoundException(cname);// malformed 71 } 72 component = primitiveType(cname.charAt(dcount)); 73 } 74 int dim[] = new int[dcount]; 75 for (int i=0; i<dcount; i++) { 76 dim[i]=0; 77 } 78 return Array.newInstance(component, dim).getClass(); 79 } else { 80 return this.classLoader.loadClass(cname); 81 } 82 } 83 84 85 public final ClassLoader getClassLoader() { 86 return this.classLoader; 87 } 88 }

This page was automatically generated by Maven