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:
java.io.Closeable, java.io.DataInput, java.io.ObjectInput, java.io.ObjectStreamConstants
Direct Known Subclasses:
CodebaseAwareObjectInputStream

public class ConfigurableObjectInputStream
extends java.io.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
java.io.ObjectInputStream.GetField
 
Field Summary
private  boolean acceptProxyClasses
           
private  java.lang.ClassLoader classLoader
           
 
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(java.io.InputStream in, java.lang.ClassLoader classLoader)
          Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.
ConfigurableObjectInputStream(java.io.InputStream in, java.lang.ClassLoader classLoader, boolean acceptProxyClasses)
          Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.
 
Method Summary
protected  java.lang.ClassLoader getFallbackClassLoader()
          Return the fallback ClassLoader to use when no ClassLoader was specified and ObjectInputStream's own default ClassLoader failed.
protected  java.lang.Class resolveClass(java.io.ObjectStreamClass classDesc)
           
protected  java.lang.Class resolveFallbackIfPossible(java.lang.String className, java.lang.ClassNotFoundException ex)
          Resolve the given class name against a fallback class loader.
protected  java.lang.Class resolveProxyClass(java.lang.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
 

Field Detail

classLoader

private final java.lang.ClassLoader classLoader

acceptProxyClasses

private final boolean acceptProxyClasses
Constructor Detail

ConfigurableObjectInputStream

public ConfigurableObjectInputStream(java.io.InputStream in,
                                     java.lang.ClassLoader classLoader)
                              throws java.io.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:
java.io.IOException
See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)

ConfigurableObjectInputStream

public ConfigurableObjectInputStream(java.io.InputStream in,
                                     java.lang.ClassLoader classLoader,
                                     boolean acceptProxyClasses)
                              throws java.io.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
acceptProxyClasses - whether to accept deserialization of proxy classes (may be deactivated as a security measure)
Throws:
java.io.IOException
See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)
Method Detail

resolveClass

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

resolveProxyClass

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

resolveFallbackIfPossible

protected java.lang.Class resolveFallbackIfPossible(java.lang.String className,
                                                    java.lang.ClassNotFoundException ex)
                                             throws java.io.IOException,
                                                    java.lang.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:
java.io.IOException
java.lang.ClassNotFoundException

getFallbackClassLoader

protected java.lang.ClassLoader getFallbackClassLoader()
                                                throws java.io.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:
java.io.IOException