org.springframework.core
Class ConfigurableObjectInputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.ObjectInputStream
          extended by org.springframework.core.ConfigurableObjectInputStream
All Implemented Interfaces:
Closeable, DataInput, ObjectInput, ObjectStreamConstants
Direct Known Subclasses:
CodebaseAwareObjectInputStream

public class ConfigurableObjectInputStream
extends ObjectInputStream

Special ObjectInputStream subclass that resolves class names against a specific ClassLoader. Serves as base class for CodebaseAwareObjectInputStream.

Since:
2.5.5
Author:
Juergen Hoeller

Nested Class Summary
 
Nested classes/interfaces inherited from class java.io.ObjectInputStream
ObjectInputStream.GetField
 
Field Summary
 
Fields inherited from interface java.io.ObjectStreamConstants
baseWireHandle, PROTOCOL_VERSION_1, PROTOCOL_VERSION_2, SC_BLOCK_DATA, SC_ENUM, 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_ENUM, TC_EXCEPTION, TC_LONGSTRING, TC_MAX, TC_NULL, TC_OBJECT, TC_PROXYCLASSDESC, TC_REFERENCE, TC_RESET, TC_STRING
 
Constructor Summary
ConfigurableObjectInputStream(InputStream in, ClassLoader classLoader)
          Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.
 
Method Summary
protected  ClassLoader getFallbackClassLoader()
          Return the fallback ClassLoader to use when no ClassLoader was specified and ObjectInputStream's own default ClassLoader failed.
protected  Class resolveClass(ObjectStreamClass classDesc)
           
protected  Class resolveFallbackIfPossible(String className, ClassNotFoundException ex)
          Resolve the given class name against a fallback class loader.
protected  Class resolveProxyClass(String[] interfaces)
           
 
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, readUnshared, readUnsignedByte, readUnsignedShort, readUTF, registerValidation, resolveObject, 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

ConfigurableObjectInputStream

public ConfigurableObjectInputStream(InputStream in,
                                     ClassLoader classLoader)
                              throws IOException
Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.

Parameters:
in - the InputStream to read from
classLoader - the ClassLoader to use for loading local classes
Throws:
IOException
See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)
Method Detail

resolveClass

protected Class resolveClass(ObjectStreamClass classDesc)
                      throws IOException,
                             ClassNotFoundException
Overrides:
resolveClass in class ObjectInputStream
Throws:
IOException
ClassNotFoundException

resolveProxyClass

protected Class resolveProxyClass(String[] interfaces)
                           throws IOException,
                                  ClassNotFoundException
Overrides:
resolveProxyClass in class ObjectInputStream
Throws:
IOException
ClassNotFoundException

resolveFallbackIfPossible

protected Class resolveFallbackIfPossible(String className,
                                          ClassNotFoundException ex)
                                   throws IOException,
                                          ClassNotFoundException
Resolve the given class name against a fallback class loader.

The default implementation simply rethrows the original exception, since there is no fallback available.

Parameters:
className - the class name to resolve
ex - the original exception thrown when attempting to load the class
Returns:
the newly resolved class (never null)
Throws:
IOException
ClassNotFoundException

getFallbackClassLoader

protected ClassLoader getFallbackClassLoader()
                                      throws IOException
Return the fallback ClassLoader to use when no ClassLoader was specified and ObjectInputStream's own default ClassLoader failed.

The default implementation simply returns null.

Throws:
IOException