Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| The Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.springframework.remoting.rmi
Class CodebaseAwareObjectInputStream

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

All Implemented Interfaces:
  Closeable, DataInput, ObjectInput, ObjectStreamConstants

    public class CodebaseAwareObjectInputStream

extends ObjectInputStream

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!

Since:
  1.1.3
Author:
  Juergen Hoeller
See Also:
  `RMIClassLoader`, `RemoteInvocationSerializingExporter.createObjectInputStream(java.io.InputStream)`, `HttpInvokerClientInterceptor.setCodebaseUrl(java.lang.String)`

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

Method Summary
`protected Class` | `resolveClass(ObjectStreamClass classDesc)` Overridden version delegates to super class first, falling back to the specified codebase if not found locally.
`protected Class` | `resolveProxyClass(String[] interfaces)` Overridden version delegates to super class first, falling back to the specified codebase if not found locally.

Methods inherited from class 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`

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

### CodebaseAwareObjectInputStream

    public CodebaseAwareObjectInputStream(InputStream in,
                                          String codebaseUrl)
                                   throws IOException

  Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.

  Parameters:
    `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)
  Throws:
    `IOException`
  See Also:
    `ObjectInputStream.ObjectInputStream(java.io.InputStream)`

### CodebaseAwareObjectInputStream

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

  Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.

  Parameters:
    `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)
  Throws:
    `IOException`
  See Also:
    `ObjectInputStream.ObjectInputStream(java.io.InputStream)`

Method Detail

### resolveClass

    protected Class resolveClass(ObjectStreamClass classDesc)
                          throws IOException,
                                 ClassNotFoundException

  Overridden version delegates to super class first, falling back to the specified codebase if not found locally.

  Overrides:
    `resolveClass` in class `ObjectInputStream`
  Throws:
    `IOException`
    `ClassNotFoundException`

### resolveProxyClass

    protected Class resolveProxyClass(String[] interfaces)
                               throws IOException,
                                      ClassNotFoundException

  Overridden version delegates to super class first, falling back to the specified codebase if not found locally.

  Overrides:
    `resolveProxyClass` in class `ObjectInputStream`
  Throws:
    `IOException`
    `ClassNotFoundException`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
| The Spring Framework
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2002-2008 The Spring Framework.