public class CodebaseAwareObjectInputStream
extends org.springframework.core.ConfigurableObjectInputStream
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!
RMIClassLoader,
RemoteInvocationSerializingExporter.createObjectInputStream(java.io.InputStream),
org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor#setCodebaseUrlbaseWireHandle, 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 and Description |
|---|
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.
|
| Modifier and Type | Method and Description |
|---|---|
protected java.lang.ClassLoader |
getFallbackClassLoader() |
protected java.lang.Class<?> |
resolveFallbackIfPossible(java.lang.String className,
java.lang.ClassNotFoundException ex) |
resolveClass, resolveProxyClassavailable, 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, skipBytespublic CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.String codebaseUrl)
throws java.io.IOException
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)java.io.IOExceptionObjectInputStream.ObjectInputStream(java.io.InputStream)public CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader,
java.lang.String codebaseUrl)
throws java.io.IOException
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)java.io.IOExceptionObjectInputStream.ObjectInputStream(java.io.InputStream)public CodebaseAwareObjectInputStream(java.io.InputStream in,
java.lang.ClassLoader classLoader,
boolean acceptProxyClasses)
throws java.io.IOException
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)java.io.IOExceptionObjectInputStream.ObjectInputStream(java.io.InputStream)protected java.lang.Class<?> resolveFallbackIfPossible(java.lang.String className,
java.lang.ClassNotFoundException ex)
throws java.io.IOException,
java.lang.ClassNotFoundException
resolveFallbackIfPossible in class org.springframework.core.ConfigurableObjectInputStreamjava.io.IOExceptionjava.lang.ClassNotFoundExceptionprotected java.lang.ClassLoader getFallbackClassLoader()
throws java.io.IOException
getFallbackClassLoader in class org.springframework.core.ConfigurableObjectInputStreamjava.io.IOException