KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > mx4j > loading > ClassLoaderObjectInputStream


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package mx4j.loading;
10
11 import java.io.IOException JavaDoc;
12 import java.io.InputStream JavaDoc;
13 import java.io.ObjectInputStream JavaDoc;
14 import java.io.ObjectStreamClass JavaDoc;
15 import java.io.StreamCorruptedException JavaDoc;
16 import java.lang.reflect.Proxy JavaDoc;
17
18 /**
19  * ObjectInputStream that can read serialized java Objects using a supplied classloader
20  * to find the object's classes.
21  *
22  * @version $Revision: 1.6 $
23  */

24 public class ClassLoaderObjectInputStream extends ObjectInputStream JavaDoc
25 {
26    private ClassLoader JavaDoc classLoader;
27
28    /**
29     * Creates a new ClassLoaderObjectInputStream
30     *
31     * @param stream The decorated stream
32     * @param classLoader The ClassLoader used to load classes
33     */

34    public ClassLoaderObjectInputStream(InputStream JavaDoc stream, ClassLoader JavaDoc classLoader) throws IOException JavaDoc, StreamCorruptedException JavaDoc
35    {
36       super(stream);
37       this.classLoader = classLoader;
38    }
39
40    protected Class JavaDoc resolveClass(ObjectStreamClass JavaDoc osc) throws IOException JavaDoc, ClassNotFoundException JavaDoc
41    {
42       String JavaDoc name = osc.getName();
43       return loadClass(name);
44    }
45
46    protected Class JavaDoc resolveProxyClass(String JavaDoc[] interfaces) throws IOException JavaDoc, ClassNotFoundException JavaDoc
47    {
48       Class JavaDoc[] classes = new Class JavaDoc[interfaces.length];
49       for (int i = 0; i < interfaces.length; ++i) classes[i] = loadClass(interfaces[i]);
50
51       return Proxy.getProxyClass(classLoader, classes);
52    }
53
54    private Class JavaDoc loadClass(String JavaDoc name) throws ClassNotFoundException JavaDoc
55    {
56       if (classLoader != null)
57          return classLoader.loadClass(name);
58       else
59          return Class.forName(name, true, null);
60    }
61 }
62
Popular Tags