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:
java.io.Closeable
,java.io.DataInput
,java.io.ObjectInput
,java.io.ObjectStreamConstants
,java.lang.AutoCloseable
public final class ReplicationStream extends java.io.ObjectInputStream
Custom subclass ofObjectInputStream
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
-
-
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 ReplicationStream(java.io.InputStream stream, java.lang.ClassLoader[] classLoaders)
Construct a new instance of CustomObjectInputStream
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
close()
java.lang.Class<?>
findExternalClass(java.lang.String name)
java.lang.Class<?>
findReplicationClass(java.lang.String name)
java.lang.Class<?>
resolveClass(java.io.ObjectStreamClass classDesc)
Load the local class equivalent of the specified stream class description, by using the class loader assigned to this Context.java.lang.Class<?>
resolveClass(java.lang.String name)
protected java.lang.Class<?>
resolveProxyClass(java.lang.String[] interfaces)
ObjectInputStream.resolveProxyClass has some funky way of using the incorrect class loader to resolve proxy classes, let's do it our way instead-
Methods 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, transferTo
-
-
-
-
Constructor Detail
-
ReplicationStream
public ReplicationStream(java.io.InputStream stream, java.lang.ClassLoader[] classLoaders) throws java.io.IOException
Construct a new instance of CustomObjectInputStream- Parameters:
stream
- The input stream we will read fromclassLoaders
- The class loader array used to instantiate objects- Throws:
java.io.IOException
- if an input/output error occurs
-
-
Method Detail
-
resolveClass
public java.lang.Class<?> resolveClass(java.io.ObjectStreamClass classDesc) throws java.lang.ClassNotFoundException, java.io.IOException
Load the local class equivalent of the specified stream class description, by using the class loader assigned to this Context.- Overrides:
resolveClass
in classjava.io.ObjectInputStream
- Parameters:
classDesc
- Class description from the input stream- Throws:
java.lang.ClassNotFoundException
- if this class cannot be foundjava.io.IOException
- if an input/output error occurs
-
resolveClass
public java.lang.Class<?> resolveClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
resolveProxyClass
protected java.lang.Class<?> resolveProxyClass(java.lang.String[] interfaces) throws java.io.IOException, java.lang.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 classjava.io.ObjectInputStream
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
-
findReplicationClass
public java.lang.Class<?> findReplicationClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
findExternalClass
public java.lang.Class<?> findExternalClass(java.lang.String name) throws java.lang.ClassNotFoundException
- Throws:
java.lang.ClassNotFoundException
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in interfacejava.io.ObjectInput
- Overrides:
close
in classjava.io.ObjectInputStream
- Throws:
java.io.IOException
-
-