Package net.jini.io

Class MarshalOutputStream

All Implemented Interfaces:
Closeable, DataOutput, Flushable, ObjectOutput, ObjectStreamConstants, AutoCloseable, ObjectStreamContext

public class MarshalOutputStream extends ObjectOutputStream implements ObjectStreamContext
An extension of ObjectOutputStream that implements the dynamic class loading semantics of Java(TM) Remote Method Invocation (Java RMI) argument and result marshalling (using RMIClassLoader). A MarshalOutputStream writes data that is intended to be written by a corresponding MarshalInputStream.

MarshalOutputStream implements the output side of the dynamic class loading semantics by overriding annotateClass and annotateProxyClass to annotate class descriptors in the stream with codebase strings obtained using RMIClassLoader.getClassAnnotation.

MarshalOutputStream writes class annotations to its own stream; a subclass may override the writeAnnotation method to write the class annotations to a different location.

MarshalOutputStream does not modify the stream protocol version of its instances' superclass state (see ObjectOutputStream.useProtocolVersion).

Since:
2.0
Author:
Sun Microsystems, Inc.
  • Constructor Details

    • MarshalOutputStream

      public MarshalOutputStream(OutputStream out, Collection context) throws IOException
      Creates a new MarshalOutputStream that writes marshalled data to the specified underlying OutputStream.

      This constructor passes out to the superclass constructor that has an OutputStream parameter.

      context will be used as the return value of the created stream's getObjectStreamContext method.

      Parameters:
      out - the output stream to write marshalled data to
      context - the collection of context information objects to be returned by this stream's getObjectStreamContext method
      Throws:
      IOException - if the superclass's constructor throws an IOException
      SecurityException - if the superclass's constructor throws a SecurityException
      NullPointerException - if out or context is null
  • Method Details

    • getObjectStreamContext

      public Collection getObjectStreamContext()
      Returns the collection of context information objects that was passed to this stream's constructor.
      Specified by:
      getObjectStreamContext in interface ObjectStreamContext
      Returns:
      a collection of this stream's context objects
    • annotateClass

      protected void annotateClass(Class cl) throws IOException
      Annotates the stream descriptor for the class cl.

      MarshalOutputStream implements this method as follows:

      This method invokes RMIClassLoader.getClassAnnotation with cl to get the appropriate class annotation string value (possibly null), and then it invokes this stream's writeAnnotation method with that string to record the annotation.

      Overrides:
      annotateClass in class ObjectOutputStream
      Parameters:
      cl - the class to annotate
      Throws:
      IOException - if writeAnnotation throws an IOException
      NullPointerException - if cl is null
    • annotateProxyClass

      protected void annotateProxyClass(Class cl) throws IOException
      Annotates the stream descriptor for the proxy class cl.

      MarshalOutputStream implements this method as follows:

      This method invokes RMIClassLoader.getClassAnnotation with cl to get the appropriate class annotation string value (possibly null), and then it invokes this stream's writeAnnotation method with that string to record the annotation.

      Overrides:
      annotateProxyClass in class ObjectOutputStream
      Parameters:
      cl - the proxy class to annotate
      Throws:
      IOException - if writeAnnotation throws an IOException
      NullPointerException - if cl is null
    • writeAnnotation

      protected void writeAnnotation(String annotation) throws IOException
      Writes a class annotation string value (possibly null) to be read by a corresponding MarshalInputStream implementation.

      MarshalOutputStream implements this method to just write the annotation value to this stream using writeObject.

      A subclass can override this method to write the annotation to a different location.

      Parameters:
      annotation - the class annotation string value (possibly null) to write
      Throws:
      IOException - if I/O exception occurs writing the annotation