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

      public final class ReplicationStream
      extends 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

      `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, 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 and Description
    `ReplicationStream(InputStream stream, ClassLoader[] classLoaders)` Construct a new instance of CustomObjectInputStream

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `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 instead

    - ### Methods inherited from class java.io.ObjectInputStream

      `available, 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, skipBytes`

    - ### Methods inherited from class java.io.InputStream

      `mark, markSupported, read, reset, skip`

    - ### 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(InputStream stream,
                                   ClassLoader[] classLoaders)
                            throws 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:
        `IOException` - if an input/output error occurs

  - ### Method Detail

    - #### 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 class `ObjectInputStream`
      Parameters:
        `classDesc` - Class description from the input stream
      Throws:
        `ClassNotFoundException` - if this class cannot be found
        `IOException` - if an input/output error occurs

    - #### resolveClass

          public Class<?> resolveClass(String name)
                                throws ClassNotFoundException

      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 class `ObjectInputStream`
      Throws:
        `IOException`
        `ClassNotFoundException`

    - #### findReplicationClass

          public Class<?> findReplicationClass(String name)
                                        throws ClassNotFoundException

      Throws:
        `ClassNotFoundException`

    - #### findExternalClass

          public Class<?> findExternalClass(String name)
                                     throws ClassNotFoundException

      Throws:
        `ClassNotFoundException`

    - #### close

          public void close()
                     throws IOException

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `ObjectInput`
      Specified by:
        `close` in interface `AutoCloseable`
      Overrides:
        `close` in class `ObjectInputStream`
      Throws:
        `IOException`

Copyright © 2000-2022 Apache Software Foundation. All Rights Reserved.