01: package org.hansel;
02:
03: import java.io.ByteArrayOutputStream;
04: import java.io.InputStream;
05: import java.io.IOException;
06: import java.util.MissingResourceException;
07:
08: public class ProbeTableClassLoader extends ClassLoader {
09: private Class probeTable;
10:
11: public ProbeTableClassLoader(ClassLoader parent) {
12: super (parent);
13: probeTable = createClass(ProbeTable.class.getName());
14: }
15:
16: public Class loadClass(String name) throws ClassNotFoundException {
17: if (ProbeTable.class.getName().equals(name)) {
18: return probeTable;
19: }
20:
21: return super .loadClass(name);
22: }
23:
24: public Class getProbeTable() {
25: return probeTable;
26: }
27:
28: private byte[] ressourceToByteArray(String ressourceName,
29: String classname) {
30: InputStream is = getClass().getClassLoader()
31: .getResourceAsStream(ressourceName);
32:
33: if (is == null) {
34: throw new MissingResourceException("Cannot find "
35: + classname + ".", ProbeTable.class.getName(),
36: ressourceName);
37: }
38:
39: ByteArrayOutputStream baos = new ByteArrayOutputStream();
40: byte[] data = new byte[1024];
41:
42: try {
43: int count = is.read(data);
44: while (count != -1) {
45: baos.write(data, 0, count);
46: count = is.read(data);
47: }
48: } catch (IOException e) {
49: throw new MissingResourceException("Cannot read class"
50: + e.getMessage(), classname, ressourceName);
51: }
52:
53: return baos.toByteArray();
54: }
55:
56: private Class createClass(String classname) {
57: String ressourceName = classname.replace('.', '/') + ".class";
58: byte[] classdata = ressourceToByteArray(ressourceName,
59: classname);
60:
61: return defineClass(classname, classdata, 0, classdata.length);
62: }
63: }
|