Package org.springframework.core

# Class ConfigurableObjectInputStream

java.lang.Object
java.io.InputStream
java.io.ObjectInputStream
org.springframework.core.ConfigurableObjectInputStream

All Implemented Interfaces:
  `Closeable`, `DataInput`, `ObjectInput`, `ObjectStreamConstants`, `AutoCloseable`

public class ConfigurableObjectInputStream extends ObjectInputStream
Special `ObjectInputStream` subclass that resolves class names against a specific `ClassLoader`.

Since:
  2.5.5
Author:
  Juergen Hoeller
See Also:
  - `DefaultDeserializer`

## 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, SERIAL_FILTER_PERMISSION, 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

Constructors
Constructor
Description
`ConfigurableObjectInputStream(InputStream in, ClassLoader classLoader)`
Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.
`ConfigurableObjectInputStream(InputStream in, ClassLoader classLoader, boolean acceptProxyClasses)`
Create a new ConfigurableObjectInputStream for the given InputStream and ClassLoader.

## Method Summary

Modifier and Type
Method
Description
`protected ClassLoader`
`getFallbackClassLoader()`
Return the fallback ClassLoader to use when no ClassLoader was specified and ObjectInputStream's own default class loader 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, getObjectInputFilter, read, read, readBoolean, readByte, readChar, readClassDescriptor, readDouble, readFields, readFloat, readFully, readFully, readInt, readLine, readLong, readObject, readObjectOverride, readShort, readStreamHeader, readUnshared, readUnsignedByte, readUnsignedShort, readUTF, registerValidation, resolveObject, setObjectInputFilter, skipBytes`

### Methods inherited from class java.io.InputStream

`mark, markSupported, nullInputStream, read, readAllBytes, readNBytes, readNBytes, reset, skip, skipNBytes, transferTo`

### 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 Details

### ConfigurableObjectInputStream

public ConfigurableObjectInputStream(InputStream in, @Nullable 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(java.io.InputStream)`

### ConfigurableObjectInputStream

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

## Method Details

### 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

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

The default implementation simply returns `null`, indicating that no specific fallback is available.

Throws:
  `IOException`