2 * 11/19/04 1.0 moved to LGPL.
3 * 12/12/99 Initial version. mdm@techie.com
4 *-----------------------------------------------------------------------
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU Library General Public License as published
7 * by the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU Library General Public
16 * License along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 *----------------------------------------------------------------------
22 //import java.io.IOException;
23 //import java.io.InputStream;
24 //import java.io.InvalidClassException;
25 //import java.io.InvalidObjectException;
26 //import java.io.ObjectInputStream;
27 //import java.io.ObjectOutputStream;
28 //import java.io.OutputStream;
29 //import java.lang.reflect.Array;
32 * The JavaLayerUtils class is not strictly part of the JavaLayer API.
33 * It serves to provide useful methods and system-wide hooks.
37 public class JavaLayerUtils
39 static private JavaLayerHook hook = null;
42 * Deserializes the object contained in the given input stream.
43 * @param in The input stream to deserialize an object from.
44 * @param cls The expected class of the deserialized object.
46 // static public Object deserialize(InputStream in, Class cls)
47 static public Object deserialize(InputStream in)
51 // throw new NullPointerException("cls");
53 // Object obj = deserialize(in, cls);
54 Object obj = deserialize(in);
55 // if (!cls.isInstance(obj))
57 // throw new InvalidObjectException("type of deserialized instance not of required class.");
64 * Deserializes an object from the given <code>InputStream</code>.
65 * The deserialization is delegated to an <code>
66 * ObjectInputStream</code> instance.
68 * @param in The <code>InputStream</code> to deserialize an object
71 * @return The object deserialized from the stream.
72 * @exception IOException is thrown if there was a problem reading
73 * the underlying stream, or an object could not be deserialized
76 * @see java.io.ObjectInputStream
78 static public Object deserialize(InputStream in)
82 throw new NullPointerException("in");
84 //TODO : need to enable after having objectinputstream
86 ObjectInputStream objIn = new ObjectInputStream(in);
92 obj = objIn.readObject();
94 catch (ClassNotFoundException ex)
96 throw new InvalidClassException(ex.toString());
105 * Deserializes an array from a given <code>InputStream</code>.
107 * @param in The <code>InputStream</code> to
108 * deserialize an object from.
110 * @param elemType The class denoting the type of the array
112 * @param length The expected length of the array, or -1 if
113 * any length is expected.
115 static public Object deserializeArray(InputStream in, int length)
119 throw new IllegalArgumentException("length");
121 Object obj = deserialize(in);
125 // static public Object deserializeArray(InputStream in, Class elemType, int length)
126 // throws IOException
128 // if (elemType==null)
129 // throw new NullPointerException("elemType");
132 // throw new IllegalArgumentException("length");
134 // Object obj = deserialize(in);
136 // //SSJava will never throw exceptions as it is so this code is meaningless
138 // Class cls = obj.getClass();
140 // if (!cls.isArray())
141 // throw new InvalidObjectException("object is not an array");
143 // Class arrayElemType = cls.getComponentType();
144 // if (arrayElemType!=elemType)
145 // throw new InvalidObjectException("unexpected array component type");
149 // int arrayLength = Array.getLength(obj);
150 // if (arrayLength!=length)
151 // throw new InvalidObjectException("array length mismatch");
157 // static public Object deserializeArrayResource(String name, Class elemType, int length)
158 static public Object deserializeArrayResource(String name, int length)
161 InputStream str = getResourceAsStream(name);
163 throw new IOException("unable to load resource '"+name+"'");
165 // Object obj = deserializeArray(str, elemType, length);
166 Object obj = deserializeArray(str, length);
171 static public void serialize(OutputStream out, Object obj)
174 //TODO : need to enable after having objectinputstream
176 // throw new NullPointerException("out");
179 // throw new NullPointerException("obj");
181 // ObjectOutputStream objOut = new ObjectOutputStream(out);
182 // objOut.writeObject(obj);
187 * Sets the system-wide JavaLayer hook.
189 static synchronized public void setHook(JavaLayerHook hook0)
194 static synchronized public JavaLayerHook getHook()
200 * Retrieves an InputStream for a named resource.
202 * @param name The name of the resource. This must be a simple
203 * name, and not a qualified package name.
205 * @return The InputStream for the named resource, or null if
206 * the resource has not been found. If a hook has been
207 * provided, its getResourceAsStream() method is called
208 * to retrieve the resource.
210 static synchronized public InputStream getResourceAsStream(String name)
212 InputStream is = null;
216 is = hook.getResourceAsStream(name);
218 //TODO java reflection
221 // Class cls = JavaLayerUtils.class;
222 // is = cls.getResourceAsStream(name);