KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jxxload_help > PathVFSJavaLoader


1 // Copyright 2000 Samuele Pedroni
2

3 package jxxload_help;
4
5 public class PathVFSJavaLoader extends ClassLoader JavaDoc {
6     private ClassLoader JavaDoc parent;
7    
8     private PathVFS vfs;
9     
10     public java.util.Vector JavaDoc interfaces = new java.util.Vector JavaDoc();
11     
12     public PathVFSJavaLoader(PathVFS vfs,ClassLoader JavaDoc parent) {
13         this.vfs = vfs;
14         this.parent = parent;
15     }
16     
17     protected Class JavaDoc loadClass(String JavaDoc name, boolean resolve) throws ClassNotFoundException JavaDoc {
18         Class JavaDoc c;
19         
20         c = findLoadedClass(name);
21         if (c != null) return c;
22         
23         try {
24             if (parent != null) return parent.loadClass(name);
25         } catch(ClassNotFoundException JavaDoc e) {
26         }
27         
28         java.io.InputStream JavaDoc in = vfs.open(name.replace('.','/')+".class");
29         if (in == null) throw new ClassNotFoundException JavaDoc(name);
30         try {
31         byte[] buf = org.python.core.FileUtil.readBytes( in );
32             in.close();
33             return loadClassFromBytes(name,buf);
34         } catch(java.io.IOException JavaDoc e) {
35             throw new ClassNotFoundException JavaDoc(name);
36         }
37     }
38
39     private Class JavaDoc loadClassFromBytes(String JavaDoc name, byte[] data) {
40         Class JavaDoc c = defineClass(name, data, 0, data.length);
41         resolveClass(c);
42         if (c.isInterface()) interfaces.addElement(c);
43         if (!org.python.core.Options.skipCompile) {
44             Compiler.compileClass(c);
45         }
46         return c;
47     }
48   
49 }
50
Popular Tags