org.springframework.remoting.rmi
Class CodebaseAwareObjectInputStream
java.lang.Object
java.io.InputStream
java.io.ObjectInputStream
org.springframework.core.ConfigurableObjectInputStream
org.springframework.remoting.rmi.CodebaseAwareObjectInputStream
- All Implemented Interfaces:
- java.io.Closeable, java.io.DataInput, java.io.ObjectInput, java.io.ObjectStreamConstants
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!
- Since:
- 1.1.3
- Author:
- Juergen Hoeller
- See Also:
RMIClassLoader
,
RemoteInvocationSerializingExporter.createObjectInputStream(java.io.InputStream)
,
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor#setCodebaseUrl
Nested classes/interfaces inherited from class java.io.ObjectInputStream |
java.io.ObjectInputStream.GetField |
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(java.io.InputStream in,
java.lang.ClassLoader classLoader,
boolean acceptProxyClasses)
Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase. |
CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader,
java.lang.String codebaseUrl)
Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase. |
CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.String codebaseUrl)
Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase. |
Methods inherited from class org.springframework.core.ConfigurableObjectInputStream |
resolveClass, resolveProxyClass |
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 |
CodebaseAwareObjectInputStream
public CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.String codebaseUrl)
throws java.io.IOException
- Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
- Parameters:
in
- the InputStream to read fromcodebaseUrl
- the codebase URL to load classes from if not found locally
(can consist of multiple URLs, separated by spaces)
- Throws:
java.io.IOException
- See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)
CodebaseAwareObjectInputStream
public CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader,
java.lang.String codebaseUrl)
throws java.io.IOException
- Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
- Parameters:
in
- the InputStream to read fromclassLoader
- 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:
java.io.IOException
- See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)
CodebaseAwareObjectInputStream
public CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader,
boolean acceptProxyClasses)
throws java.io.IOException
- Create a new CodebaseAwareObjectInputStream for the given InputStream and codebase.
- Parameters:
in
- the InputStream to read fromclassLoader
- 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)
- Throws:
java.io.IOException
- See Also:
ObjectInputStream.ObjectInputStream(java.io.InputStream)
resolveFallbackIfPossible
protected java.lang.Class resolveFallbackIfPossible(java.lang.String className,
java.lang.ClassNotFoundException ex)
throws java.io.IOException,
java.lang.ClassNotFoundException
- Overrides:
resolveFallbackIfPossible
in class org.springframework.core.ConfigurableObjectInputStream
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
getFallbackClassLoader
protected java.lang.ClassLoader getFallbackClassLoader()
throws java.io.IOException
- Overrides:
getFallbackClassLoader
in class org.springframework.core.ConfigurableObjectInputStream
- Throws:
java.io.IOException