Apache Tomcat 6.0.43

org.apache.catalina.tribes.io
Class ReplicationStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.ObjectInputStream
          extended by org.apache.catalina.tribes.io.ReplicationStream
All Implemented Interfaces:
java.io.Closeable, java.io.DataInput, java.io.ObjectInput, java.io.ObjectStreamConstants

public final class ReplicationStream
extends java.io.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, Filip Hanik

Nested Class Summary
 
Nested classes/interfaces inherited from class java.io.ObjectInputStream
java.io.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
ReplicationStream(java.io.InputStream stream, java.lang.ClassLoader[] classLoaders)
          Construct a new instance of CustomObjectInputStream
 
Method Summary
 void close()
           
 java.lang.Class findExternalClass(java.lang.String name)
           
 java.lang.Class findReplicationClass(java.lang.String name)
           
 java.lang.Class resolveClass(java.io.ObjectStreamClass classDesc)
          Load the local class equivalent of the specified stream class description, by using the class loader assigned to this Context.
 java.lang.Class resolveClass(java.lang.String name)
           
protected  java.lang.Class<?> resolveProxyClass(java.lang.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(java.io.InputStream stream,
                         java.lang.ClassLoader[] classLoaders)
                  throws java.io.IOException
Construct a new instance of CustomObjectInputStream

Parameters:
stream - The input stream we will read from
classLoaders - The class loaders used to instantiate objects
Throws:
java.io.IOException - if an input/output error occurs
Method Detail

resolveClass

public java.lang.Class resolveClass(java.io.ObjectStreamClass classDesc)
                             throws java.lang.ClassNotFoundException,
                                    java.io.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 java.io.ObjectInputStream
Parameters:
classDesc - Class description from the input stream
Throws:
java.lang.ClassNotFoundException - if this class cannot be found
java.io.IOException - if an input/output error occurs

resolveClass

public java.lang.Class resolveClass(java.lang.String name)
                             throws java.lang.ClassNotFoundException,
                                    java.io.IOException
Throws:
java.lang.ClassNotFoundException
java.io.IOException

resolveProxyClass

protected java.lang.Class<?> resolveProxyClass(java.lang.String[] interfaces)
                                        throws java.io.IOException,
                                               java.lang.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 java.io.ObjectInputStream
Throws:
java.io.IOException
java.lang.ClassNotFoundException

findReplicationClass

public java.lang.Class findReplicationClass(java.lang.String name)
                                     throws java.lang.ClassNotFoundException,
                                            java.io.IOException
Throws:
java.lang.ClassNotFoundException
java.io.IOException

findExternalClass

public java.lang.Class findExternalClass(java.lang.String name)
                                  throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

close

public void close()
           throws java.io.IOException
Specified by:
close in interface java.io.Closeable
Specified by:
close in interface java.io.ObjectInput
Overrides:
close in class java.io.ObjectInputStream
Throws:
java.io.IOException

Apache Tomcat 6.0.43

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