Package org.apache.catalina.tribes.io
Class ReplicationStream
java.lang.Object
java.io.InputStream
java.io.ObjectInputStream
org.apache.catalina.tribes.io.ReplicationStream
- All Implemented Interfaces:
Closeable
,DataInput
,ObjectInput
,ObjectStreamConstants
,AutoCloseable
Custom subclass of
ObjectInputStream
that loads from the class loader for this web application. This
allows classes defined only with the web application to be found correctly.- Author:
- Craig R. McClanahan, Bip Thelin
-
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
ConstructorDescriptionReplicationStream
(InputStream stream, ClassLoader[] classLoaders) Construct a new instance of CustomObjectInputStream -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Class<?>
findExternalClass
(String name) Class<?>
findReplicationClass
(String name) Class<?>
resolveClass
(ObjectStreamClass classDesc) Load the local class equivalent of the specified stream class description, by using the class loader assigned to this Context.Class<?>
resolveClass
(String name) protected Class<?>
resolveProxyClass
(String[] interfaces) ObjectInputStream.resolveProxyClass has some funky way of using the incorrect class loader to resolve proxy classes, let's do it our way insteadMethods inherited from class java.io.ObjectInputStream
available, 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
-
ReplicationStream
Construct a new instance of CustomObjectInputStream- Parameters:
stream
- The input stream we will read fromclassLoaders
- The class loader array used to instantiate objects- Throws:
IOException
- if an input/output error occurs
-
-
Method Details
-
resolveClass
public Class<?> resolveClass(ObjectStreamClass classDesc) throws ClassNotFoundException, IOException Load the local class equivalent of the specified stream class description, by using the class loader assigned to this Context.- Overrides:
resolveClass
in classObjectInputStream
- Parameters:
classDesc
- Class description from the input stream- Throws:
ClassNotFoundException
- if this class cannot be foundIOException
- if an input/output error occurs
-
resolveClass
- Throws:
ClassNotFoundException
-
resolveProxyClass
protected Class<?> resolveProxyClass(String[] interfaces) throws IOException, ClassNotFoundException ObjectInputStream.resolveProxyClass has some funky way of using the incorrect class loader to resolve proxy classes, let's do it our way instead- Overrides:
resolveProxyClass
in classObjectInputStream
- Throws:
IOException
ClassNotFoundException
-
findReplicationClass
- Throws:
ClassNotFoundException
-
findExternalClass
- Throws:
ClassNotFoundException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceObjectInput
- Overrides:
close
in classObjectInputStream
- Throws:
IOException
-