org.springframework.remoting.rmi

## 类 CodebaseAwareObjectInputStream

- java.lang.Object
- - java.io.InputStream
  - - java.io.ObjectInputStream
    - - org.springframework.core.ConfigurableObjectInputStream
      - - org.springframework.remoting.rmi.CodebaseAwareObjectInputStream

- 所有已实现的接口:
    Closeable, DataInput, ObjectInput, ObjectStreamConstants, AutoCloseable

      public class CodebaseAwareObjectInputStream
      extends org.springframework.core.ConfigurableObjectInputStream

  Special ObjectInputStream subclass that falls back to a specified codebase to load classes from if not found locally. In contrast to standard RMI conventions for dynamic class download, it is the client that determines the codebase URL here, rather than the "java.rmi.server.codebase" system property on the server.

  Uses the JDK's RMIClassLoader to load classes from the specified codebase. The codebase can consist of multiple URLs, separated by spaces. Note that RMIClassLoader requires a SecurityManager to be set, like when using dynamic class download with standard RMI! (See the RMI documentation for details.)

  Despite residing in the RMI package, this class is not used for RmiClientInterceptor, which uses the standard RMI infrastructure instead and thus is only able to rely on RMI's standard dynamic class download via "java.rmi.server.codebase". CodebaseAwareObjectInputStream is used by HttpInvokerClientInterceptor (see the "codebaseUrl" property there).

  Thanks to Lionel Mestre for suggesting the option and providing a prototype!

  从以下版本开始:
    1.1.3
  作者:
    Juergen Hoeller
  另请参阅:
    `RMIClassLoader`, `RemoteInvocationSerializingExporter.createObjectInputStream(java.io.InputStream)`, `org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor#setCodebaseUrl`

- - ### 嵌套类概要

    - ### 从类继承的嵌套类/接口 java.io.ObjectInputStream

      `ObjectInputStream.GetField`

  - ### 字段概要

    - ### 从接口继承的字段 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`

  - ### 构造器概要

    构造器
    构造器和说明
    `CodebaseAwareObjectInputStream(InputStream in, ClassLoader classLoader, boolean acceptProxyClasses)` Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
    `CodebaseAwareObjectInputStream(InputStream in, ClassLoader classLoader, String codebaseUrl)` Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
    `CodebaseAwareObjectInputStream(InputStream in, String codebaseUrl)` Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected ClassLoader` | `getFallbackClassLoader()`
    `protected Class<?>` | `resolveFallbackIfPossible(String className, ClassNotFoundException ex)`

    - ### 从类继承的方法 org.springframework.core.ConfigurableObjectInputStream

      `resolveClass, resolveProxyClass`

    - ### 从类继承的方法 java.io.ObjectInputStream

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

    - ### 从类继承的方法 java.io.InputStream

      `mark, markSupported, read, reset, skip`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### 从接口继承的方法 java.io.ObjectInput

      `read, skip`

- - ### 构造器详细资料

    - #### CodebaseAwareObjectInputStream

          public CodebaseAwareObjectInputStream(InputStream in,
                                                String codebaseUrl)
                                         throws IOException

      Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
      参数:
        `in` - the InputStream to read from
        `codebaseUrl` - the codebase URL to load classes from if not found locally (can consist of multiple URLs, separated by spaces)
      抛出:
        `IOException`
      另请参阅:
        `ObjectInputStream.ObjectInputStream(java.io.InputStream)`

    - #### CodebaseAwareObjectInputStream

          public CodebaseAwareObjectInputStream(InputStream in,
                                                @Nullable
                                                ClassLoader classLoader,
                                                String codebaseUrl)
                                         throws IOException

      Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
      参数:
        `in` - the InputStream to read from
        `classLoader` - the ClassLoader to use for loading local classes (may be `null` to indicate RMI's default ClassLoader)
        `codebaseUrl` - the codebase URL to load classes from if not found locally (can consist of multiple URLs, separated by spaces)
      抛出:
        `IOException`
      另请参阅:
        `ObjectInputStream.ObjectInputStream(java.io.InputStream)`

    - #### CodebaseAwareObjectInputStream

          public CodebaseAwareObjectInputStream(InputStream in,
                                                @Nullable
                                                ClassLoader classLoader,
                                                boolean acceptProxyClasses)
                                         throws IOException

      Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
      参数:
        `in` - the InputStream to read from
        `classLoader` - the ClassLoader to use for loading local classes (may be `null` to indicate RMI's default ClassLoader)
        `acceptProxyClasses` - whether to accept deserialization of proxy classes (may be deactivated as a security measure)
      抛出:
        `IOException`
      另请参阅:
        `ObjectInputStream.ObjectInputStream(java.io.InputStream)`

  - ### 方法详细资料

    - #### resolveFallbackIfPossible

          protected Class<?> resolveFallbackIfPossible(String className,
                                                       ClassNotFoundException ex)
                                                throws IOException,
                                                       ClassNotFoundException

      覆盖:
        `resolveFallbackIfPossible` 在类中 `org.springframework.core.ConfigurableObjectInputStream`
      抛出:
        `IOException`
        `ClassNotFoundException`

    - #### getFallbackClassLoader

          protected ClassLoader getFallbackClassLoader()
                                                throws IOException

      覆盖:
        `getFallbackClassLoader` 在类中 `org.springframework.core.ConfigurableObjectInputStream`
      抛出:
        `IOException`