static class SerializationUtils.ClassLoaderAwareObjectInputStream
extends java.io.ObjectInputStream
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.
Modifier and Type | Field and Description |
---|---|
private java.lang.ClassLoader |
classLoader |
private static java.util.Map<java.lang.String,java.lang.Class<?>> |
primitiveTypes |
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 and Description |
---|
ClassLoaderAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
protected java.lang.Class<?> |
resolveClass(java.io.ObjectStreamClass desc)
Overriden version that uses the parametrized
ClassLoader or the ClassLoader
of the current Thread to resolve the class. |
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, resolveProxyClass, skipBytes
private static final java.util.Map<java.lang.String,java.lang.Class<?>> primitiveTypes
private final java.lang.ClassLoader classLoader
public ClassLoaderAwareObjectInputStream(java.io.InputStream in, java.lang.ClassLoader classLoader) throws java.io.IOException
in
- The InputStream
.classLoader
- classloader to usejava.io.IOException
- if an I/O error occurs while reading stream header.ObjectInputStream
protected java.lang.Class<?> resolveClass(java.io.ObjectStreamClass desc) throws java.io.IOException, java.lang.ClassNotFoundException
ClassLoader
or the ClassLoader
of the current Thread
to resolve the class.resolveClass
in class java.io.ObjectInputStream
desc
- An instance of class ObjectStreamClass
.Class
object corresponding to desc
.java.io.IOException
- Any of the usual Input/Output exceptions.java.lang.ClassNotFoundException
- If class of a serialized object cannot be found.