Package org.apache.commons.lang3
Class SerializationUtils.ClassLoaderAwareObjectInputStream
java.lang.Object
java.io.InputStream
java.io.ObjectInputStream
org.apache.commons.lang3.SerializationUtils.ClassLoaderAwareObjectInputStream
- All Implemented Interfaces:
Closeable
,DataInput
,ObjectInput
,ObjectStreamConstants
,AutoCloseable
- Enclosing class:
- SerializationUtils
Custom specialization of the standard JDK ObjectInputStream
that uses a custom ClassLoader
to resolve a class.
If the specified ClassLoader
is not able to resolve the class,
the context classloader of the current thread will be used.
This way, the standard deserialization work also in web-application
containers and application servers, no matter in which of the
ClassLoader
the particular class that encapsulates
serialization/deserialization lives.
For more in-depth information about the problem for which this class here is a workaround, see the JIRA issue LANG-626.
-
Nested Class Summary
Nested classes/interfaces inherited from class java.io.ObjectInputStream
ObjectInputStream.GetField
-
Field Summary
FieldsFields 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
ConstructorsConstructorDescriptionClassLoaderAwareObjectInputStream
(InputStream in, ClassLoader classLoader) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionprotected Class<?>
Overridden version that uses the parameterizedClassLoader
or theClassLoader
of the currentThread
to resolve the class.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, resolveProxyClass, 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
-
Field Details
-
primitiveTypes
-
classLoader
-
-
Constructor Details
-
ClassLoaderAwareObjectInputStream
ClassLoaderAwareObjectInputStream(InputStream in, ClassLoader classLoader) throws IOException Constructor.- Parameters:
in
- TheInputStream
.classLoader
- classloader to use- Throws:
IOException
- if an I/O error occurs while reading stream header.- See Also:
-
-
Method Details
-
resolveClass
Overridden version that uses the parameterizedClassLoader
or theClassLoader
of the currentThread
to resolve the class.- Overrides:
resolveClass
in classObjectInputStream
- Parameters:
desc
- An instance of classObjectStreamClass
.- Returns:
- A
Class
object corresponding todesc
. - Throws:
IOException
- Any of the usual Input/Output exceptions.ClassNotFoundException
- If class of a serialized object cannot be found.
-