qflib 0.98.1

de.qfs.lib.util
Class RelocatingObjectInputStream

java.lang.Object
  |
  +--java.io.InputStream
        |
        +--java.io.ObjectInputStream
              |
              +--de.qfs.lib.util.RelocatingObjectInputStream
All Implemented Interfaces:
java.io.DataInput, java.io.ObjectInput, java.io.ObjectStreamConstants

public class RelocatingObjectInputStream
extends java.io.ObjectInputStream

The RelocatingObjectInputStream is useful when a class has been moved to a different package and some serialized Objects of its type should be restored. Simply pass two arrays of Strings to the constructor, which map the names of old packages to new packages. The serialVersionUID of the old an new class must still match though.

Version:
$Revision: 1.5 $
Author:
Gregor Schmid

Inner classes inherited from class java.io.ObjectInputStream
java.io.ObjectInputStream.GetField
 
Fields inherited from interface java.io.ObjectStreamConstants
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_EXTERNALIZABLE, SC_SERIALIZABLE, SC_WRITE_METHOD, STREAM_MAGIC, STREAM_VERSION, SUBCLASS_IMPLEMENTATION_PERMISSION, SUBSTITUTION_PERMISSION, TC_ARRAY, TC_BASE, TC_BLOCKDATA, TC_BLOCKDATALONG, TC_CLASS, TC_CLASSDESC, TC_ENDBLOCKDATA, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
 
Constructor Summary
RelocatingObjectInputStream(java.io.InputStream in, java.lang.String[] from, java.lang.String[] to)
          Create a new RelocatingObjectInputStream.
 
Method Summary
protected  java.lang.Class resolveClass(java.io.ObjectStreamClass osc)
          Load the local class equivalent of the specified stream class description.
 
Methods inherited from class java.io.ObjectInputStream
available, close, defaultReadObject, enableResolveObject, read, read, readBoolean, readByte, readChar, readClassDescriptor, readDouble, readFields, readFloat, readFully, readFully, readInt, readLine, readLong, readObject, readObjectOverride, readShort, readStreamHeader, readUnsignedByte, readUnsignedShort, readUTF, registerValidation, resolveObject, resolveProxyClass, skipBytes
 
Methods inherited from class java.io.InputStream
mark, markSupported, read, reset, skip
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.io.ObjectInput
read, skip
 

Constructor Detail

RelocatingObjectInputStream

public RelocatingObjectInputStream(java.io.InputStream in,
                                   java.lang.String[] from,
                                   java.lang.String[] to)
                            throws java.io.IOException,
                                   java.io.StreamCorruptedException
Create a new RelocatingObjectInputStream. The arrays of package names must be of equal length. For each deserialized class the first name that matches the start of the class name will be replaced by the corresponding name from the second list.
Parameters:
in - The ObjectInputStream to extend.
from - Names of old packages.
to - Names of the new packages.
Throws:
java.io.IOException - If an exception occurred in the underlying stream.
java.io.StreamCorruptedException - If the version or magic number are incorrect.
Method Detail

resolveClass

protected java.lang.Class resolveClass(java.io.ObjectStreamClass osc)
                                throws java.io.IOException,
                                       java.lang.ClassNotFoundException
Load the local class equivalent of the specified stream class description. Subclasses may implement this method to allow classes to be fetched from an alternate source. The corresponding method in ObjectOutputStream is annotateClass. This method will be invoked only once for each unique class in the stream. This method can be implemented by subclasses to use an alternate loading mechanism but must return a Class object. Once returned, the serialVersionUID of the class is compared to the serialVersionUID of the serialized class. If there is a mismatch, the deserialization fails and an exception is raised. By default the class name is resolved relative to the class that called readObject.
Overrides:
resolveClass in class java.io.ObjectInputStream
Parameters:
osc - The ObjectStreamClass describing the class.
Returns:
The resolved class.
Throws:
java.io.IOException - If an I/O error occurs.
java.lang.ClassNotFoundException - If class of a serialized object cannot be found.

qflib 0.98.1