org.jibx.runtime.impl
Class StreamWriterBase

java.lang.Object
  extended by org.jibx.runtime.impl.XMLWriterNamespaceBase
      extended by org.jibx.runtime.impl.XMLWriterBase
          extended by org.jibx.runtime.impl.StreamWriterBase
All Implemented Interfaces:
IExtensibleWriter, IXMLWriter
Direct Known Subclasses:
ISO88591StreamWriter, UTF8StreamWriter

public abstract class StreamWriterBase
extends XMLWriterBase

Base handler for marshalling text document to an output stream. This is designed for use with character encodings that use standard one-byte values for Unicode characters in the 0x20-0x7F range, which includes the most widely used encodings for XML documents. It needs to be subclassed with implementation methods specific to the encoding used.

Author:
Dennis M. Sosnoski

Field Summary
protected static byte[] AMP_ENTITY
           
static int DEFAULT_BUFFER_SIZE
          Default output buffer size.
protected static byte[] GT_ENTITY
           
protected static byte[] LT_CDATAEND
           
protected static byte[] LT_CDATASTART
           
protected static byte[] LT_ENTITY
           
private  StreamWriterBase m_baseWriter
          Original writer (only used when created using copy constructor, null otherwise).
protected  byte[] m_buffer
          Buffer for accumulating output bytes.
private  java.lang.String m_encodingName
          Name of encoding used for stream.
protected  byte[][][] m_extensionBytes
          Byte sequences for prefixes of extension namespaces in scope.
protected  int m_fillOffset
          Current offset in filling buffer.
private  boolean m_indent
          Indent tags for pretty-printed text.
private  int m_indentBase
          Base number of characters in indent sequence (end of line only).
private  int m_indentPerLevel
          Number of extra characters in indent sequence per level of nesting.
private  byte[] m_indentSequence
          Raw text for indentation sequences.
protected  byte[][] m_prefixBytes
          Byte sequences for prefixes of namespaces in scope.
private  java.io.OutputStream m_stream
          Stream for text output.
protected static byte[] QUOT_ENTITY
           
 
Fields inherited from class org.jibx.runtime.impl.XMLWriterNamespaceBase
m_prefixes, m_uris
 
Constructor Summary
  StreamWriterBase(StreamWriterBase base, java.lang.String[] uris)
          Copy constructor.
  StreamWriterBase(java.lang.String enc, java.lang.String[] uris)
          Constructor using default buffer size.
protected StreamWriterBase(java.lang.String enc, java.lang.String[] uris, byte[] buffer)
          Constructor with supplied buffer.
 
Method Summary
 void close()
          Close document output.
 void flush()
          Flush document output.
 java.lang.String getEncodingName()
          Get the name of the character encoding used by this writer.
 void indent()
          Request output indent.
 void indent(int bias)
          Request output indent.
protected  void makeSpace(int length)
          Make at least the requested number of bytes available in the output buffer.
 void popExtensionNamespaces()
          Remove extension namespace URIs.
 void pushExtensionNamespaces(java.lang.String[] uris)
          Append extension namespace URIs to those in mapping.
 void reset()
          Reset to initial state for reuse.
 void setIndentSpaces(int count, java.lang.String newline, char indent)
          Set nesting indentation.
 void setNamespaceUris(java.lang.String[] uris)
          Set namespace URIs.
 void setOutput(java.io.OutputStream outs)
          Set output stream.
protected  void undefineNamespace(int index)
          Report that namespace has been undefined.
protected  int writeEntity(byte[] bytes, int offset)
          Write entity bytes to output.
protected  void writePrefix(int index)
          Write namespace prefix to output.
 
Methods inherited from class org.jibx.runtime.impl.XMLWriterBase
addAttribute, closeEmptyTag, closeStartTag, endTag, flagContent, flagTextContent, startTagClosed, startTagNamespaces, startTagOpen, writeAttributeText, writeComment, writeDocType, writeEntityRef, writeMarkup, writeMarkup, writePI, writeXMLDecl
 
Methods inherited from class org.jibx.runtime.impl.XMLWriterNamespaceBase
decrementNesting, defineNamespace, getExtensionNamespaces, getNamespaceCount, getNamespacePrefix, getNamespaces, getNamespaceUri, getNestingDepth, getPrefixIndex, growArray, incrementNesting, internalSetUris, openNamespaces, shrinkArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.jibx.runtime.IExtensibleWriter
createChildWriter
 
Methods inherited from interface org.jibx.runtime.IXMLWriter
getExtensionNamespaces, getNamespaceCount, getNamespacePrefix, getNamespaces, getNamespaceUri, getNestingDepth, getPrefixIndex, openNamespaces, writeCData, writeTextContent
 

Field Detail

QUOT_ENTITY

protected static final byte[] QUOT_ENTITY

AMP_ENTITY

protected static final byte[] AMP_ENTITY

GT_ENTITY

protected static final byte[] GT_ENTITY

LT_ENTITY

protected static final byte[] LT_ENTITY

LT_CDATASTART

protected static final byte[] LT_CDATASTART

LT_CDATAEND

protected static final byte[] LT_CDATAEND

DEFAULT_BUFFER_SIZE

public static final int DEFAULT_BUFFER_SIZE
Default output buffer size.

See Also:
Constant Field Values

m_encodingName

private final java.lang.String m_encodingName
Name of encoding used for stream.


m_baseWriter

private final StreamWriterBase m_baseWriter
Original writer (only used when created using copy constructor, null otherwise).


m_stream

private java.io.OutputStream m_stream
Stream for text output.


m_buffer

protected byte[] m_buffer
Buffer for accumulating output bytes.


m_fillOffset

protected int m_fillOffset
Current offset in filling buffer.


m_prefixBytes

protected byte[][] m_prefixBytes
Byte sequences for prefixes of namespaces in scope.


m_extensionBytes

protected byte[][][] m_extensionBytes
Byte sequences for prefixes of extension namespaces in scope.


m_indent

private boolean m_indent
Indent tags for pretty-printed text.


m_indentBase

private int m_indentBase
Base number of characters in indent sequence (end of line only).


m_indentPerLevel

private int m_indentPerLevel
Number of extra characters in indent sequence per level of nesting.


m_indentSequence

private byte[] m_indentSequence
Raw text for indentation sequences.

Constructor Detail

StreamWriterBase

protected StreamWriterBase(java.lang.String enc,
                           java.lang.String[] uris,
                           byte[] buffer)
Constructor with supplied buffer.

Parameters:
enc - character encoding used for output to streams (upper case)
uris - ordered array of URIs for namespaces used in document (must be constant; the value in position 0 must always be the empty string "", and the value in position 1 must always be the XML namespace "http://www.w3.org/XML/1998/namespace")
buffer - output data buffer

StreamWriterBase

public StreamWriterBase(java.lang.String enc,
                        java.lang.String[] uris)
Constructor using default buffer size.

Parameters:
enc - character encoding used for output to streams (upper case)
uris - ordered array of URIs for namespaces used in document (must be constant; the value in position 0 must always be the empty string "", and the value in position 1 must always be the XML namespace "http://www.w3.org/XML/1998/namespace")

StreamWriterBase

public StreamWriterBase(StreamWriterBase base,
                        java.lang.String[] uris)
Copy constructor. This takes the stream and encoding information from a supplied instance, while setting a new array of namespace URIs. It's intended for use when invoking one binding from within another binding.

Parameters:
base - instance to be used as base for writer
uris - ordered array of URIs for namespaces used in document (see StreamWriterBase(String, String[]))
Method Detail

getEncodingName

public java.lang.String getEncodingName()
Get the name of the character encoding used by this writer.

Returns:
encoding

setOutput

public void setOutput(java.io.OutputStream outs)
Set output stream. If an output stream is currently open when this is called the existing stream is flushed and closed, with any errors ignored.

Parameters:
outs - stream for document data output

setNamespaceUris

public void setNamespaceUris(java.lang.String[] uris)
                      throws java.io.IOException
Set namespace URIs. This forces a reset of the writer, clearing any buffered output. It is intended to be used only for reconfiguring an existing writer for reuse.

Parameters:
uris - ordered array of URIs for namespaces used in document
Throws:
java.io.IOException

setIndentSpaces

public void setIndentSpaces(int count,
                            java.lang.String newline,
                            char indent)
Set nesting indentation. This is advisory only, and implementations of this interface are free to ignore it. The intent is to indicate that the generated output should use indenting to illustrate element nesting.

Parameters:
count - number of character to indent per level, or disable indentation if negative (zero means new line only)
newline - sequence of characters used for a line ending (null means use the single character '\n')
indent - whitespace character used for indentation

makeSpace

protected void makeSpace(int length)
                  throws java.io.IOException
Make at least the requested number of bytes available in the output buffer. If necessary, the output buffer will be replaced by a larger buffer.

Parameters:
length - number of bytes space to be made available
Throws:
java.io.IOException - if error writing to document

undefineNamespace

protected void undefineNamespace(int index)
Report that namespace has been undefined.

Specified by:
undefineNamespace in class XMLWriterNamespaceBase
Parameters:
index - namespace URI index number

writePrefix

protected void writePrefix(int index)
                    throws java.io.IOException
Write namespace prefix to output. This internal method is used to throw an exception when an undeclared prefix is used.

Specified by:
writePrefix in class XMLWriterBase
Parameters:
index - namespace URI index number
Throws:
java.io.IOException - if error writing to document

writeEntity

protected int writeEntity(byte[] bytes,
                          int offset)
Write entity bytes to output.

Parameters:
bytes - actual bytes to be written
offset - starting offset in buffer
Returns:
offset for next data byte in buffer

pushExtensionNamespaces

public void pushExtensionNamespaces(java.lang.String[] uris)
Append extension namespace URIs to those in mapping.

Specified by:
pushExtensionNamespaces in interface IXMLWriter
Overrides:
pushExtensionNamespaces in class XMLWriterNamespaceBase
Parameters:
uris - namespace URIs to extend those in mapping

popExtensionNamespaces

public void popExtensionNamespaces()
Remove extension namespace URIs. This removes the last set of extension namespaces pushed using pushExtensionNamespaces(java.lang.String[]).

Specified by:
popExtensionNamespaces in interface IXMLWriter
Overrides:
popExtensionNamespaces in class XMLWriterNamespaceBase

indent

public void indent(int bias)
            throws java.io.IOException
Request output indent. Output the line end sequence followed by the appropriate number of indent characters.

Specified by:
indent in class XMLWriterBase
Parameters:
bias - indent depth difference (positive or negative) from current element nesting depth
Throws:
java.io.IOException - on error writing to document

indent

public void indent()
            throws java.io.IOException
Request output indent. Output the line end sequence followed by the appropriate number of indent characters for the current nesting level.

Throws:
java.io.IOException - on error writing to document

flush

public void flush()
           throws java.io.IOException
Flush document output. Forces out all output generated to this point, unless using a chunking output mechanism.

Specified by:
flush in interface IXMLWriter
Specified by:
flush in class XMLWriterBase
Throws:
java.io.IOException - on error writing to document

close

public void close()
           throws java.io.IOException
Close document output. Completes writing of document output, including closing the output medium.

Specified by:
close in interface IXMLWriter
Specified by:
close in class XMLWriterBase
Throws:
java.io.IOException - on error writing to document

reset

public void reset()
Reset to initial state for reuse. This override of the base class method handles clearing the internal buffer when starting a new document.

Specified by:
reset in interface IXMLWriter
Overrides:
reset in class XMLWriterBase


Project Web Site