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