Package com.caucho.hessian.io
Class Hessian2Output
- java.lang.Object
-
- com.caucho.hessian.io.AbstractHessianOutput
-
- com.caucho.hessian.io.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 Summary
Fields Modifier and Type Field Description protected OutputStream_osstatic intSIZE-
Fields inherited from class com.caucho.hessian.io.AbstractHessianOutput
_serializerFactory
-
Fields inherited from interface com.caucho.hessian.io.Hessian2Constants
BC_BINARY, BC_BINARY_CHUNK, BC_BINARY_DIRECT, BC_BINARY_SHORT, BC_CLASS_DEF, BC_DATE, BC_DATE_MINUTE, BC_DOUBLE, BC_DOUBLE_BYTE, BC_DOUBLE_MILL, BC_DOUBLE_ONE, BC_DOUBLE_SHORT, BC_DOUBLE_ZERO, BC_END, BC_FALSE, BC_INT, BC_INT_BYTE_ZERO, BC_INT_SHORT_ZERO, BC_INT_ZERO, BC_LIST_DIRECT, BC_LIST_DIRECT_UNTYPED, BC_LIST_FIXED, BC_LIST_FIXED_UNTYPED, BC_LIST_VARIABLE, BC_LIST_VARIABLE_UNTYPED, BC_LONG, BC_LONG_BYTE_ZERO, BC_LONG_INT, BC_LONG_SHORT_ZERO, BC_LONG_ZERO, BC_MAP, BC_MAP_UNTYPED, BC_NULL, BC_OBJECT, BC_OBJECT_DEF, BC_OBJECT_DIRECT, BC_REF, BC_STRING, BC_STRING_CHUNK, BC_STRING_DIRECT, BC_STRING_SHORT, BC_TRUE, BINARY_DIRECT_MAX, BINARY_SHORT_MAX, INT_BYTE_MAX, INT_BYTE_MIN, INT_DIRECT_MAX, INT_DIRECT_MIN, INT_SHORT_MAX, INT_SHORT_MIN, LIST_DIRECT_MAX, LONG_BYTE_MAX, LONG_BYTE_MIN, LONG_DIRECT_MAX, LONG_DIRECT_MIN, LONG_SHORT_MAX, LONG_SHORT_MIN, OBJECT_DIRECT_MAX, P_PACKET, P_PACKET_CHUNK, P_PACKET_DIRECT, P_PACKET_SHORT, PACKET_DIRECT_MAX, PACKET_SHORT_MAX, STRING_DIRECT_MAX, STRING_SHORT_MAX
-
-
Constructor Summary
Constructors Constructor Description Hessian2Output()Creates a new Hessian output stream, initialized with an underlying output stream.Hessian2Output(OutputStream os)Creates a new Hessian output stream, initialized with an underlying output stream.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddRef(Object object)If the object has already been written, just write its ref.voidcall(String method, Object[] args)Writes a complete method call.voidclose()voidcompleteCall()Completes.voidcompleteEnvelope()Completes an envelope.voidcompleteMessage()Completes reading the messagevoidcompleteReply()Completes reading the replyvoidendPacket()voidflush()voidflushBuffer()voidfree()OutputStreamgetBytesOutputStream()Returns an output stream to write binary data.intgetRef(Object obj)voidinit(OutputStream os)Initialize the output with a new underlying stream.voidinitPacket(OutputStream os)booleanisCloseStreamOnClose()voidprintLenString(String v)Prints a string to the stream, encoded as UTF-8 with preceeding lengthvoidprintString(char[] v, int strOffset, int length)Prints a string to the stream, encoded as UTF-8voidprintString(String v)Prints a string to the stream, encoded as UTF-8voidprintString(String v, int strOffset, int length)Prints a string to the stream, encoded as UTF-8booleanremoveRef(Object obj)Removes a reference.booleanreplaceRef(Object oldRef, Object newRef)Replaces a reference from one object to another.voidreset()Resets all counters and referencesvoidresetReferences()Resets the references for streaming.voidsetCloseStreamOnClose(boolean isClose)booleansetUnshared(boolean isUnshared)Sets hessian to be "unshared", meaning it will not detect duplicate or circular references.voidstartCall()Writes the call tag.voidstartCall(String method, int length)Starts the method call.voidstartEnvelope(String method)Starts an envelope.voidstartMessage()Starts a packetvoidstartPacket()Starts a streaming packetvoidstartReply()Starts the replyvoidwriteBoolean(boolean value)Writes a boolean value to the stream.voidwriteByteBufferEnd(byte[] buffer, int offset, int length)Writes a byte buffer to the stream.voidwriteByteBufferPart(byte[] buffer, int offset, int length)Writes a byte buffer to the stream.voidwriteByteBufferStart()Writes a byte buffer to the stream.voidwriteBytes(byte[] buffer)Writes a byte array to the stream.voidwriteBytes(byte[] buffer, int offset, int length)Writes a byte array to the stream.voidwriteByteStream(InputStream is)Writes a full output stream.voidwriteClassFieldLength(int len)Writes the tail of the class definition to the stream.voidwriteDouble(double value)Writes a double value to the stream.voidwriteFault(String code, String message, Object detail)Writes a fault.voidwriteInt(int value)Writes an integer value to the stream.booleanwriteListBegin(int length, String type)Writes the list header to the stream.voidwriteListEnd()Writes the tail of the list to the stream for a variable-length list.voidwriteLong(long value)Writes a long value to the stream.voidwriteMapBegin(String type)Writes the map header to the stream.voidwriteMapEnd()Writes the tail of the map to the stream.voidwriteMethod(String method)Writes the method tag.voidwriteNull()Writes a null value to the stream.voidwriteObject(Object object)Writes any object to the output stream.intwriteObjectBegin(String type)Writes the object definitionvoidwriteObjectEnd()Writes the tail of the object definition to the stream.protected voidwriteRef(int value)Writes a reference.voidwriteStreamingObject(Object obj)Starts the streaming messagevoidwriteString(char[] buffer, int offset, int length)Writes a string value to the stream using UTF-8 encoding.voidwriteString(String value)Writes a string value to the stream using UTF-8 encoding.voidwriteUTCDate(long time)Writes a date to the stream.voidwriteVersion()-
Methods inherited from class com.caucho.hessian.io.AbstractHessianOutput
findSerializerFactory, getSerializerFactory, setSerializerFactory, writeHeader, writeReply
-
-
-
-
Field Detail
-
SIZE
public static final int SIZE
- See Also:
- Constant Field Values
-
_os
protected 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(OutputStream os)
Creates a new Hessian output stream, initialized with an underlying output stream.- Parameters:
os- the underlying output stream.
-
-
Method Detail
-
init
public void init(OutputStream os)
Description copied from class:AbstractHessianOutputInitialize the output with a new underlying stream.- Overrides:
initin classAbstractHessianOutput
-
initPacket
public void initPacket(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:
setUnsharedin classAbstractHessianOutput
-
call
public void call(String method, Object[] args) throws IOException
Writes a complete method call.- Overrides:
callin classAbstractHessianOutput- Throws:
IOException
-
startCall
public void startCall(String method, int length) throws IOException
Starts the method call. Clients would usestartCallinstead ofcallif they wanted finer control over writing the arguments, or needed to write headers.C string # method name int # arg count
- Specified by:
startCallin classAbstractHessianOutput- Parameters:
method- the method name to call.- Throws:
IOException
-
startCall
public void startCall() throws IOExceptionWrites the call tag. This would be followed by the method and the argumentsC
- Specified by:
startCallin classAbstractHessianOutput- Parameters:
method- the method name to call.- Throws:
IOException
-
startEnvelope
public void startEnvelope(String method) throws IOException
Starts an envelope.E major minor m b16 b8 method-name
- Parameters:
method- the method name to call.- Throws:
IOException
-
completeEnvelope
public void completeEnvelope() throws IOExceptionCompletes an envelope.A successful completion will have a single value:
Z
- Throws:
IOException
-
writeMethod
public void writeMethod(String method) throws IOException
Writes the method tag.string
- Specified by:
writeMethodin classAbstractHessianOutput- Parameters:
method- the method name to call.- Throws:
IOException
-
completeCall
public void completeCall() throws IOExceptionCompletes.z
- Specified by:
completeCallin classAbstractHessianOutput- Throws:
IOException
-
startReply
public void startReply() throws IOExceptionStarts the replyA successful completion will have a single value:
R
- Overrides:
startReplyin classAbstractHessianOutput- Throws:
IOException
-
writeVersion
public void writeVersion() throws IOException- Throws:
IOException
-
completeReply
public void completeReply() throws IOExceptionCompletes reading the replyA successful completion will have a single value:
z
- Overrides:
completeReplyin classAbstractHessianOutput- Throws:
IOException
-
startMessage
public void startMessage() throws IOExceptionStarts a packetA message contains several objects encapsulated by a length
p x02 x00
- Throws:
IOException
-
completeMessage
public void completeMessage() throws IOExceptionCompletes reading the messageA successful completion will have a single value:
z
- Throws:
IOException
-
writeFault
public void writeFault(String code, String message, Object detail) throws 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:
writeFaultin classAbstractHessianOutput- Parameters:
code- the fault code, a three digit- Throws:
IOException
-
writeObject
public void writeObject(Object object) throws IOException
Writes any object to the output stream.- Specified by:
writeObjectin classAbstractHessianOutput- Throws:
IOException
-
writeListBegin
public boolean writeListBegin(int length, String type) throws IOExceptionWrites the list header to the stream. List writers will callwriteListBeginfollowed by the list contents and then callwriteListEnd.list ::= V type value* Z ::= v type int value*- Specified by:
writeListBeginin classAbstractHessianOutput- Returns:
- true for variable lists, false for fixed lists
- Throws:
IOException
-
writeListEnd
public void writeListEnd() throws IOExceptionWrites the tail of the list to the stream for a variable-length list.- Specified by:
writeListEndin classAbstractHessianOutput- Throws:
IOException
-
writeMapBegin
public void writeMapBegin(String type) throws IOException
Writes the map header to the stream. Map writers will callwriteMapBeginfollowed by the map contents and then callwriteMapEnd.map ::= M type (
)* Z ::= H ( )* Z - Specified by:
writeMapBeginin classAbstractHessianOutput- Throws:
IOException
-
writeMapEnd
public void writeMapEnd() throws IOExceptionWrites the tail of the map to the stream.- Specified by:
writeMapEndin classAbstractHessianOutput- Throws:
IOException
-
writeObjectBegin
public int writeObjectBegin(String type) throws IOException
Writes the object definitionC <string> <int> <string>*
- Overrides:
writeObjectBeginin classAbstractHessianOutput- Returns:
- true if the object has already been defined.
- Throws:
IOException
-
writeClassFieldLength
public void writeClassFieldLength(int len) throws IOExceptionWrites the tail of the class definition to the stream.- Overrides:
writeClassFieldLengthin classAbstractHessianOutput- Throws:
IOException
-
writeObjectEnd
public void writeObjectEnd() throws IOExceptionWrites the tail of the object definition to the stream.- Overrides:
writeObjectEndin classAbstractHessianOutput- Throws:
IOException
-
writeBoolean
public void writeBoolean(boolean value) throws IOExceptionWrites a boolean value to the stream. The boolean will be written with the following syntax:T F
- Specified by:
writeBooleanin classAbstractHessianOutput- Parameters:
value- the boolean value to write.- Throws:
IOException
-
writeInt
public void writeInt(int value) throws IOExceptionWrites an integer value to the stream. The integer will be written with the following syntax:I b32 b24 b16 b8
- Specified by:
writeIntin classAbstractHessianOutput- Parameters:
value- the integer value to write.- Throws:
IOException
-
writeLong
public void writeLong(long value) throws IOExceptionWrites 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:
writeLongin classAbstractHessianOutput- Parameters:
value- the long value to write.- Throws:
IOException
-
writeDouble
public void writeDouble(double value) throws IOExceptionWrites 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:
writeDoublein classAbstractHessianOutput- Parameters:
value- the double value to write.- Throws:
IOException
-
writeUTCDate
public void writeUTCDate(long time) throws IOExceptionWrites a date to the stream.date ::= d b7 b6 b5 b4 b3 b2 b1 b0 ::= x65 b3 b2 b1 b0- Specified by:
writeUTCDatein classAbstractHessianOutput- Parameters:
time- the date in milliseconds from the epoch in UTC- Throws:
IOException
-
writeNull
public void writeNull() throws IOExceptionWrites a null value to the stream. The null will be written with the following syntaxN
- Specified by:
writeNullin classAbstractHessianOutput- Parameters:
value- the string value to write.- Throws:
IOException
-
writeString
public void writeString(String value) throws IOException
Writes a string value to the stream using UTF-8 encoding. The string will be written with the following syntax:If the value is null, it will be written asS b16 b8 string-value
N
- Specified by:
writeStringin classAbstractHessianOutput- Parameters:
value- the string value to write.- Throws:
IOException
-
writeString
public void writeString(char[] buffer, int offset, int length) throws IOExceptionWrites a string value to the stream using UTF-8 encoding. The string will be written with the following syntax:If the value is null, it will be written asS b16 b8 string-value
N
- Specified by:
writeStringin classAbstractHessianOutput- Parameters:
value- the string value to write.- Throws:
IOException
-
writeBytes
public void writeBytes(byte[] buffer) throws IOExceptionWrites a byte array to the stream. The array will be written with the following syntax:If the value is null, it will be written asB b16 b18 bytes
N
- Specified by:
writeBytesin classAbstractHessianOutput- Parameters:
value- the string value to write.- Throws:
IOException
-
writeBytes
public void writeBytes(byte[] buffer, int offset, int length) throws IOExceptionWrites a byte array to the stream. The array will be written with the following syntax:If the value is null, it will be written asB b16 b18 bytes
N
- Specified by:
writeBytesin classAbstractHessianOutput- Parameters:
value- the string value to write.- Throws:
IOException
-
writeByteBufferStart
public void writeByteBufferStart() throws IOExceptionWrites a byte buffer to the stream.- Specified by:
writeByteBufferStartin classAbstractHessianOutput- Throws:
IOException
-
writeByteBufferPart
public void writeByteBufferPart(byte[] buffer, int offset, int length) throws IOExceptionWrites a byte buffer to the stream.b b16 b18 bytes
- Specified by:
writeByteBufferPartin classAbstractHessianOutput- Throws:
IOException
-
writeByteBufferEnd
public void writeByteBufferEnd(byte[] buffer, int offset, int length) throws IOExceptionWrites a byte buffer to the stream.b b16 b18 bytes
- Specified by:
writeByteBufferEndin classAbstractHessianOutput- Throws:
IOException
-
getBytesOutputStream
public OutputStream getBytesOutputStream() throws IOException
Returns an output stream to write binary data.- Throws:
IOException
-
writeByteStream
public void writeByteStream(InputStream is) throws IOException
Writes a full output stream.- Overrides:
writeByteStreamin classAbstractHessianOutput- Throws:
IOException
-
writeRef
protected void writeRef(int value) throws IOExceptionWrites a reference.x51 <int>
- Specified by:
writeRefin classAbstractHessianOutput- Parameters:
value- the integer value to write.- Throws:
IOException
-
addRef
public boolean addRef(Object object) throws IOException
If the object has already been written, just write its ref.- Specified by:
addRefin classAbstractHessianOutput- Parameters:
object- the object to add as a reference.- Returns:
- true if we're writing a ref.
- Throws:
IOException
-
getRef
public int getRef(Object obj)
- Specified by:
getRefin classAbstractHessianOutput- Returns:
-
removeRef
public boolean removeRef(Object obj) throws IOException
Removes a reference.- Overrides:
removeRefin classAbstractHessianOutput- Throws:
IOException
-
replaceRef
public boolean replaceRef(Object oldRef, Object newRef) throws IOException
Replaces a reference from one object to another.- Specified by:
replaceRefin classAbstractHessianOutput- Throws:
IOException
-
writeStreamingObject
public void writeStreamingObject(Object obj) throws IOException
Starts the streaming messageA streaming message starts with 'P'
P x02 x00
- Throws:
IOException
-
startPacket
public void startPacket() throws IOExceptionStarts a streaming packetA 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:
IOException
-
endPacket
public void endPacket() throws IOException- Throws:
IOException
-
printLenString
public void printLenString(String v) throws IOException
Prints a string to the stream, encoded as UTF-8 with preceeding length- Parameters:
v- the string to print.- Throws:
IOException
-
printString
public void printString(String v) throws IOException
Prints a string to the stream, encoded as UTF-8- Parameters:
v- the string to print.- Throws:
IOException
-
printString
public void printString(String v, int strOffset, int length) throws IOException
Prints a string to the stream, encoded as UTF-8- Parameters:
v- the string to print.- Throws:
IOException
-
printString
public void printString(char[] v, int strOffset, int length) throws IOExceptionPrints a string to the stream, encoded as UTF-8- Parameters:
v- the string to print.- Throws:
IOException
-
flush
public final void flush() throws IOException- Overrides:
flushin classAbstractHessianOutput- Throws:
IOException
-
flushBuffer
public final void flushBuffer() throws IOException- Throws:
IOException
-
close
public void close() throws IOException- Overrides:
closein classAbstractHessianOutput- Throws:
IOException
-
free
public void free()
-
resetReferences
public void resetReferences()
Resets the references for streaming.- Overrides:
resetReferencesin classAbstractHessianOutput
-
reset
public void reset()
Resets all counters and references
-
-