Class Hessian2Output

  • All Implemented Interfaces:
    Hessian2Constants
    Direct Known Subclasses:
    HessianSerializerOutput

    public class Hessian2Output
    extends AbstractHessianOutput
    implements Hessian2Constants
    Output stream for Hessian 2 requests.

    Since HessianOutput does not depend on any classes other than in the JDK, it can be extracted independently into a smaller package.

    HessianOutput is unbuffered, so any client needs to provide its own buffering.

     OutputStream os = ...; // from http connection
     Hessian2Output out = new Hessian2Output(os);
     String value;
    
     out.startCall("hello", 1); // start hello call
     out.writeString("arg1");   // write a string argument
     out.completeCall();        // complete the call
     
    • Field Detail

      • _os

        protected java.io.OutputStream _os
    • Constructor Detail

      • Hessian2Output

        public Hessian2Output()
        Creates a new Hessian output stream, initialized with an underlying output stream.
        Parameters:
        os - the underlying output stream.
      • Hessian2Output

        public Hessian2Output​(java.io.OutputStream os)
        Creates a new Hessian output stream, initialized with an underlying output stream.
        Parameters:
        os - the underlying output stream.
    • Method Detail

      • initPacket

        public void initPacket​(java.io.OutputStream os)
      • setCloseStreamOnClose

        public void setCloseStreamOnClose​(boolean isClose)
      • isCloseStreamOnClose

        public boolean isCloseStreamOnClose()
      • setUnshared

        public boolean setUnshared​(boolean isUnshared)
        Sets hessian to be "unshared", meaning it will not detect duplicate or circular references.
        Overrides:
        setUnshared in class AbstractHessianOutput
      • call

        public void call​(java.lang.String method,
                         java.lang.Object[] args)
                  throws java.io.IOException
        Writes a complete method call.
        Overrides:
        call in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • startCall

        public void startCall​(java.lang.String method,
                              int length)
                       throws java.io.IOException
        Starts the method call. Clients would use startCall instead of call if they wanted finer control over writing the arguments, or needed to write headers.
         C
         string # method name
         int    # arg count
         
        Specified by:
        startCall in class AbstractHessianOutput
        Parameters:
        method - the method name to call.
        Throws:
        java.io.IOException
      • startCall

        public void startCall()
                       throws java.io.IOException
        Writes the call tag. This would be followed by the method and the arguments
         C
         
        Specified by:
        startCall in class AbstractHessianOutput
        Parameters:
        method - the method name to call.
        Throws:
        java.io.IOException
      • startEnvelope

        public void startEnvelope​(java.lang.String method)
                           throws java.io.IOException
        Starts an envelope.
         E major minor
         m b16 b8 method-name
         
        Parameters:
        method - the method name to call.
        Throws:
        java.io.IOException
      • completeEnvelope

        public void completeEnvelope()
                              throws java.io.IOException
        Completes an envelope.

        A successful completion will have a single value:

         Z
         
        Throws:
        java.io.IOException
      • writeMethod

        public void writeMethod​(java.lang.String method)
                         throws java.io.IOException
        Writes the method tag.
         string
         
        Specified by:
        writeMethod in class AbstractHessianOutput
        Parameters:
        method - the method name to call.
        Throws:
        java.io.IOException
      • completeCall

        public void completeCall()
                          throws java.io.IOException
        Completes.
         z
         
        Specified by:
        completeCall in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • startReply

        public void startReply()
                        throws java.io.IOException
        Starts the reply

        A successful completion will have a single value:

         R
         
        Overrides:
        startReply in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeVersion

        public void writeVersion()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • completeReply

        public void completeReply()
                           throws java.io.IOException
        Completes reading the reply

        A successful completion will have a single value:

         z
         
        Overrides:
        completeReply in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • startMessage

        public void startMessage()
                          throws java.io.IOException
        Starts a packet

        A message contains several objects encapsulated by a length

         p x02 x00
         
        Throws:
        java.io.IOException
      • completeMessage

        public void completeMessage()
                             throws java.io.IOException
        Completes reading the message

        A successful completion will have a single value:

         z
         
        Throws:
        java.io.IOException
      • writeFault

        public void writeFault​(java.lang.String code,
                               java.lang.String message,
                               java.lang.Object detail)
                        throws java.io.IOException
        Writes a fault. The fault will be written as a descriptive string followed by an object:
         F map
         
         F H
         \x04code
         \x10the fault code
        
         \x07message
         \x11the fault message
        
         \x06detail
         M\xnnjavax.ejb.FinderException
             ...
         Z
         Z
         
        Overrides:
        writeFault in class AbstractHessianOutput
        Parameters:
        code - the fault code, a three digit
        Throws:
        java.io.IOException
      • writeObject

        public void writeObject​(java.lang.Object object)
                         throws java.io.IOException
        Writes any object to the output stream.
        Specified by:
        writeObject in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeListBegin

        public boolean writeListBegin​(int length,
                                      java.lang.String type)
                               throws java.io.IOException
        Writes the list header to the stream. List writers will call writeListBegin followed by the list contents and then call writeListEnd.
         list ::= V type value* Z
              ::= v type int value*
         
        Specified by:
        writeListBegin in class AbstractHessianOutput
        Returns:
        true for variable lists, false for fixed lists
        Throws:
        java.io.IOException
      • writeListEnd

        public void writeListEnd()
                          throws java.io.IOException
        Writes the tail of the list to the stream for a variable-length list.
        Specified by:
        writeListEnd in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeMapBegin

        public void writeMapBegin​(java.lang.String type)
                           throws java.io.IOException
        Writes the map header to the stream. Map writers will call writeMapBegin followed by the map contents and then call writeMapEnd.
         map ::= M type ( )* Z
             ::= H ( )* Z
         
        Specified by:
        writeMapBegin in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeMapEnd

        public void writeMapEnd()
                         throws java.io.IOException
        Writes the tail of the map to the stream.
        Specified by:
        writeMapEnd in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeObjectBegin

        public int writeObjectBegin​(java.lang.String type)
                             throws java.io.IOException
        Writes the object definition
         C <string> <int> <string>*
         
        Overrides:
        writeObjectBegin in class AbstractHessianOutput
        Returns:
        true if the object has already been defined.
        Throws:
        java.io.IOException
      • writeClassFieldLength

        public void writeClassFieldLength​(int len)
                                   throws java.io.IOException
        Writes the tail of the class definition to the stream.
        Overrides:
        writeClassFieldLength in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeObjectEnd

        public void writeObjectEnd()
                            throws java.io.IOException
        Writes the tail of the object definition to the stream.
        Overrides:
        writeObjectEnd in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeBoolean

        public void writeBoolean​(boolean value)
                          throws java.io.IOException
        Writes a boolean value to the stream. The boolean will be written with the following syntax:
         T
         F
         
        Specified by:
        writeBoolean in class AbstractHessianOutput
        Parameters:
        value - the boolean value to write.
        Throws:
        java.io.IOException
      • writeInt

        public void writeInt​(int value)
                      throws java.io.IOException
        Writes an integer value to the stream. The integer will be written with the following syntax:
         I b32 b24 b16 b8
         
        Specified by:
        writeInt in class AbstractHessianOutput
        Parameters:
        value - the integer value to write.
        Throws:
        java.io.IOException
      • writeLong

        public void writeLong​(long value)
                       throws java.io.IOException
        Writes a long value to the stream. The long will be written with the following syntax:
         L b64 b56 b48 b40 b32 b24 b16 b8
         
        Specified by:
        writeLong in class AbstractHessianOutput
        Parameters:
        value - the long value to write.
        Throws:
        java.io.IOException
      • writeDouble

        public void writeDouble​(double value)
                         throws java.io.IOException
        Writes a double value to the stream. The double will be written with the following syntax:
         D b64 b56 b48 b40 b32 b24 b16 b8
         
        Specified by:
        writeDouble in class AbstractHessianOutput
        Parameters:
        value - the double value to write.
        Throws:
        java.io.IOException
      • writeUTCDate

        public void writeUTCDate​(long time)
                          throws java.io.IOException
        Writes a date to the stream.
         date ::= d   b7 b6 b5 b4 b3 b2 b1 b0
              ::= x65 b3 b2 b1 b0
         
        Specified by:
        writeUTCDate in class AbstractHessianOutput
        Parameters:
        time - the date in milliseconds from the epoch in UTC
        Throws:
        java.io.IOException
      • writeNull

        public void writeNull()
                       throws java.io.IOException
        Writes a null value to the stream. The null will be written with the following syntax
         N
         
        Specified by:
        writeNull in class AbstractHessianOutput
        Parameters:
        value - the string value to write.
        Throws:
        java.io.IOException
      • writeString

        public void writeString​(java.lang.String value)
                         throws java.io.IOException
        Writes a string value to the stream using UTF-8 encoding. The string will be written with the following syntax:
         S b16 b8 string-value
         
        If the value is null, it will be written as
         N
         
        Specified by:
        writeString in class AbstractHessianOutput
        Parameters:
        value - the string value to write.
        Throws:
        java.io.IOException
      • writeString

        public void writeString​(char[] buffer,
                                int offset,
                                int length)
                         throws java.io.IOException
        Writes a string value to the stream using UTF-8 encoding. The string will be written with the following syntax:
         S b16 b8 string-value
         
        If the value is null, it will be written as
         N
         
        Specified by:
        writeString in class AbstractHessianOutput
        Parameters:
        value - the string value to write.
        Throws:
        java.io.IOException
      • writeBytes

        public void writeBytes​(byte[] buffer)
                        throws java.io.IOException
        Writes a byte array to the stream. The array will be written with the following syntax:
         B b16 b18 bytes
         
        If the value is null, it will be written as
         N
         
        Specified by:
        writeBytes in class AbstractHessianOutput
        Parameters:
        value - the string value to write.
        Throws:
        java.io.IOException
      • writeBytes

        public void writeBytes​(byte[] buffer,
                               int offset,
                               int length)
                        throws java.io.IOException
        Writes a byte array to the stream. The array will be written with the following syntax:
         B b16 b18 bytes
         
        If the value is null, it will be written as
         N
         
        Specified by:
        writeBytes in class AbstractHessianOutput
        Parameters:
        value - the string value to write.
        Throws:
        java.io.IOException
      • writeByteBufferStart

        public void writeByteBufferStart()
                                  throws java.io.IOException
        Writes a byte buffer to the stream.
         
        Specified by:
        writeByteBufferStart in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeByteBufferPart

        public void writeByteBufferPart​(byte[] buffer,
                                        int offset,
                                        int length)
                                 throws java.io.IOException
        Writes a byte buffer to the stream.
         b b16 b18 bytes
         
        Specified by:
        writeByteBufferPart in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeByteBufferEnd

        public void writeByteBufferEnd​(byte[] buffer,
                                       int offset,
                                       int length)
                                throws java.io.IOException
        Writes a byte buffer to the stream.
         b b16 b18 bytes
         
        Specified by:
        writeByteBufferEnd in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • getBytesOutputStream

        public java.io.OutputStream getBytesOutputStream()
                                                  throws java.io.IOException
        Returns an output stream to write binary data.
        Throws:
        java.io.IOException
      • writeByteStream

        public void writeByteStream​(java.io.InputStream is)
                             throws java.io.IOException
        Writes a full output stream.
        Overrides:
        writeByteStream in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeRef

        protected void writeRef​(int value)
                         throws java.io.IOException
        Writes a reference.
         x51 <int>
         
        Specified by:
        writeRef in class AbstractHessianOutput
        Parameters:
        value - the integer value to write.
        Throws:
        java.io.IOException
      • addRef

        public boolean addRef​(java.lang.Object object)
                       throws java.io.IOException
        If the object has already been written, just write its ref.
        Specified by:
        addRef in class AbstractHessianOutput
        Parameters:
        object - the object to add as a reference.
        Returns:
        true if we're writing a ref.
        Throws:
        java.io.IOException
      • removeRef

        public boolean removeRef​(java.lang.Object obj)
                          throws java.io.IOException
        Removes a reference.
        Overrides:
        removeRef in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • replaceRef

        public boolean replaceRef​(java.lang.Object oldRef,
                                  java.lang.Object newRef)
                           throws java.io.IOException
        Replaces a reference from one object to another.
        Specified by:
        replaceRef in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • writeStreamingObject

        public void writeStreamingObject​(java.lang.Object obj)
                                  throws java.io.IOException
        Starts the streaming message

        A streaming message starts with 'P'

         P x02 x00
         
        Throws:
        java.io.IOException
      • startPacket

        public void startPacket()
                         throws java.io.IOException
        Starts a streaming packet

        A streaming contains a set of chunks, ending with a zero chunk. Each chunk is a length followed by data where the length is encoded by (b1xxxxxxxx)* b0xxxxxxxx

        Throws:
        java.io.IOException
      • endPacket

        public void endPacket()
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • printLenString

        public void printLenString​(java.lang.String v)
                            throws java.io.IOException
        Prints a string to the stream, encoded as UTF-8 with preceeding length
        Parameters:
        v - the string to print.
        Throws:
        java.io.IOException
      • printString

        public void printString​(java.lang.String v)
                         throws java.io.IOException
        Prints a string to the stream, encoded as UTF-8
        Parameters:
        v - the string to print.
        Throws:
        java.io.IOException
      • printString

        public void printString​(java.lang.String v,
                                int strOffset,
                                int length)
                         throws java.io.IOException
        Prints a string to the stream, encoded as UTF-8
        Parameters:
        v - the string to print.
        Throws:
        java.io.IOException
      • printString

        public void printString​(char[] v,
                                int strOffset,
                                int length)
                         throws java.io.IOException
        Prints a string to the stream, encoded as UTF-8
        Parameters:
        v - the string to print.
        Throws:
        java.io.IOException
      • flush

        public final void flush()
                         throws java.io.IOException
        Overrides:
        flush in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • flushBuffer

        public final void flushBuffer()
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • close

        public void close()
                   throws java.io.IOException
        Overrides:
        close in class AbstractHessianOutput
        Throws:
        java.io.IOException
      • free

        public void free()
      • reset

        public void reset()
        Resets all counters and references