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

`java.io.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
`ReplicationStream​(java.io.InputStream stream, java.lang.ClassLoader[] classLoaders)` Construct a new instance of CustomObjectInputStream

### Method Summary

All Methods Instance Methods Concrete Methods
`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`

### 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 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 from
  `classLoaders` - 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 class `java.io.ObjectInputStream`
Parameters:
  `classDesc` - Class description from the input stream
Throws:
  `java.lang.ClassNotFoundException` - if this class cannot be found
  `java.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 class `java.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 interface `java.lang.AutoCloseable`
Specified by:
  `close` in interface `java.io.Closeable`
Specified by:
  `close` in interface `java.io.ObjectInput`
Overrides:
  `close` in class `java.io.ObjectInputStream`
Throws:
  `java.io.IOException`