0N/A/*
2362N/A * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
0N/A */
0N/A
0N/Aimport java.io.*;
0N/Aimport java.lang.reflect.Field;
0N/Aimport java.lang.reflect.Method;
0N/Aimport java.lang.reflect.Modifier;
0N/Aimport java.lang.reflect.InvocationTargetException;
0N/Aimport java.security.*;
0N/A
0N/Aclass XObjectInputStream extends AbstractObjectInputStream {
0N/A
0N/A XObjectInputStream(InputStream in)
0N/A throws IOException, StreamCorruptedException
0N/A {
0N/A super(in);
0N/A dis = new DataInputStream(in);
0N/A }
0N/A
0N/A final public void defaultReadObject()
0N/A throws IOException, ClassNotFoundException, NotActiveException
0N/A {
0N/A }
0N/A
0N/A final protected Object readObjectOverride()
0N/A throws OptionalDataException, ClassNotFoundException, IOException {
0N/A
0N/A Object readResult = null;
0N/A Object prevObject = currentObject;
0N/A Class prevDesc = currentClassDescriptor;
0N/A
0N/A boolean NotImplemented = true;
0N/A if (NotImplemented)
0N/A throw new IOException("readObjectOverride not implemented");
0N/A
0N/A try {
0N/A currentObject = null;
0N/A
0N/A //Read in class of object to currentDescriptor
0N/A String className = dis.readUTF();
0N/A currentClassDescriptor = Class.forName(className);
0N/A
0N/A try {
0N/A //currentObject = Allocate a new instance of the class
0N/A currentObject =
0N/A allocateNewObject(currentClassDescriptor,
0N/A currentClassDescriptor);
0N/A } catch (InstantiationException e) {
0N/A throw new InvalidClassException(currentClassDescriptor.getName(),
0N/A e.getMessage());
0N/A } catch (IllegalAccessException e) {
0N/A throw new InvalidClassException(currentClassDescriptor.getName(),
0N/A e.getMessage());
0N/A }
0N/A
0N/A //if currentDescriptor.isAssignable(Externalizable.class) {
0N/A // Object[] argList = {this};
0N/A // InvokeMethod(currentObject, readExternalMethod, argList);
0N/A //} else {
0N/A // Does currentDescriptor have a readObject method
0N/A // if it does
0N/A // invokeMethod(this, readObjectMethod, {this});
0N/A // else
0N/A // defaultReadObject();
0N/A //}
0N/A // check for replacement on currentObject.
0N/A // if toplevel readobject
0N/A // doObjectValidations.
0N/A
0N/A } finally {
0N/A readResult = currentObject;
0N/A currentObject = prevObject;
0N/A }
0N/A return readResult;
0N/A }
0N/A
0N/A public ObjectInputStream.GetField readFields()
0N/A throws IOException, ClassNotFoundException, NotActiveException {
0N/A throw new Error("not implememted");
0N/A }
0N/A
0N/A public synchronized void registerValidation(ObjectInputValidation obj,
0N/A int prio)
0N/A throws NotActiveException, InvalidObjectException {
0N/A }
0N/A
0N/A public int read() throws IOException {
0N/A return dis.read();
0N/A }
0N/A
0N/A public int read(byte[] data, int offset, int length) throws IOException {
0N/A return dis.read(data, offset, length);
0N/A }
0N/A
0N/A public int available() throws IOException {
0N/A return in.available();
0N/A }
0N/A
0N/A public boolean readBoolean() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A
0N/A public byte readByte() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public int readUnsignedByte() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public short readShort() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public int readUnsignedShort() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public char readChar() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public int readInt() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public long readLong() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public float readFloat() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public double readDouble() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public void readFully(byte[] data) throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public void readFully(byte[] data, int offset, int size) throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public int skipBytes(int len) throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public String readLine() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A public String readUTF() throws IOException {
0N/A throw new IOException("Not Implemented");
0N/A }
0N/A
0N/A public void close() throws IOException {
0N/A in.close();
0N/A }
0N/A /**********************************************************/
0N/A
0N/A /**
0N/A * Provide access to the persistent fields read from the input stream.
0N/A */
0N/A
0N/A public static class InternalGetField extends ObjectInputStream.GetField {
0N/A
0N/A /**
0N/A * Get the ObjectStreamClass that describes the fields in the stream.
0N/A */
0N/A public ObjectStreamClass getObjectStreamClass() {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A /**
0N/A * Return true if the named field is defaulted and has no value
0N/A * in this stream.
0N/A */
0N/A public boolean defaulted(String name)
0N/A throws IOException, IllegalArgumentException
0N/A {
0N/A throw new Error("not implemented");
0N/A //ObjectStreamField field = checkField(name, null);
0N/A }
0N/A
0N/A public boolean get(String name, boolean defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public char get(String name, char defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public byte get(String name, byte defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public short get(String name, short defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public int get(String name, int defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public long get(String name, long defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public float get(String name, float defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public double get(String name, double defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public Object get(String name, Object defvalue)
0N/A throws IOException, IllegalArgumentException {
0N/A throw new Error("not implemented");
0N/A }
0N/A
0N/A public void read(ObjectInputStream in)
0N/A throws IOException, ClassNotFoundException {
0N/A }
0N/A }
0N/A
0N/A private Object currentObject;
0N/A private Class currentClassDescriptor;
0N/A
0N/A
0N/A
0N/A /****************************************************************/
0N/A
0N/A /* CODE LIFTED FROM ObjectStreamClass constuctor.
0N/A * ObjectStreamClass.readObjectMethod is private.
0N/A *
0N/A * Look for the readObject method
0N/A * Set the accessible flag on it here. ObjectOutputStream
0N/A * will call it as necessary.
0N/A */
0N/A static public Method getReadObjectMethod(final Class cl) {
0N/A
0N/A Method readObjectMethod = (Method)
0N/A java.security.AccessController.doPrivileged
0N/A (new java.security.PrivilegedAction() {
0N/A public Object run() {
0N/A Method m = null;
0N/A try {
0N/A Class[] args = {ObjectInputStream.class};
0N/A m = cl.getDeclaredMethod("readObject", args);
0N/A int mods = m.getModifiers();
0N/A // Method must be private and non-static
0N/A if (!Modifier.isPrivate(mods) ||
0N/A Modifier.isStatic(mods)) {
0N/A m = null;
0N/A } else {
0N/A m.setAccessible(true);
0N/A }
0N/A } catch (NoSuchMethodException e) {
0N/A m = null;
0N/A }
0N/A return m;
0N/A }
0N/A });
0N/A return readObjectMethod;
0N/A }
0N/A
0N/A /*************************************************************/
0N/A
0N/A /* taken verbatim from ObjectInputStream. */
0N/A static private void invokeMethod(final Object obj, final Method m,
0N/A final Object[] argList)
0N/A throws IOException
0N/A {
0N/A try {
0N/A java.security.AccessController.doPrivileged
0N/A (new java.security.PrivilegedExceptionAction() {
0N/A public Object run() throws InvocationTargetException,
0N/A java.lang.IllegalAccessException {
0N/A m.invoke(obj, argList);
0N/A return null;
0N/A }
0N/A });
0N/A } catch (java.security.PrivilegedActionException e) {
0N/A Exception ex = e.getException();
0N/A if (ex instanceof InvocationTargetException) {
0N/A Throwable t =
0N/A ((InvocationTargetException)ex).getTargetException();
0N/A if (t instanceof IOException)
0N/A throw (IOException)t;
0N/A else if (t instanceof RuntimeException)
0N/A throw (RuntimeException) t;
0N/A else if (t instanceof Error)
0N/A throw (Error) t;
0N/A else
0N/A throw new Error("interal error");
0N/A } else {
0N/A // IllegalAccessException cannot happen
0N/A }
0N/A }
0N/A }
0N/A
0N/A protected boolean enableResolveObject(boolean enable)
0N/A throws SecurityException
0N/A {
0N/A throw new Error("To be implemented");
0N/A }
0N/A
0N/A private DataInputStream dis;
0N/A};