org.codehaus.plexus.util.xml.pull

Class MXSerializer

Implemented Interfaces:
XmlSerializer

public class MXSerializer
extends java.lang.Object
implements XmlSerializer

Implementation of XmlSerializer interface from XmlPull V1 API. This implementation is optimzied for performance and low memory footprint.

Implemented features:

Implemented properties:

Field Summary

private static int
BUF_LEN
protected String
FEATURE_NAMES_INTERNED
protected String
FEATURE_SERIALIZER_ATTVALUE_USE_APOSTROPHE
protected static String
PROPERTY_LOCATION
protected String
PROPERTY_SERIALIZER_INDENTATION
protected String
PROPERTY_SERIALIZER_LINE_SEPARATOR
private static boolean
TRACE_SIZING
protected static String
XMLNS_URI
protected static String
XML_URI
protected boolean
attributeUseApostrophe
protected int
autoDeclaredPrefixes
protected char[]
buf
private boolean
checkNamesInterned
protected int
depth
protected boolean
doIndent
protected String[]
elName
protected String[]
elNamespace
protected int[]
elNamespaceCount
protected boolean
finished
protected char[]
indentationBuf
protected int
indentationJump
protected String
indentationString
protected String
lineSeparator
protected String
location
protected int
maxIndentLevel
protected boolean
namesInterned
protected int
namespaceEnd
protected String[]
namespacePrefix
protected String[]
namespaceUri
protected int
offsetNewLine
protected Writer
out
protected boolean
pastRoot
protected static String[]
precomputedPrefixes
protected boolean
seenBracket
protected boolean
seenBracketBracket
protected boolean
seenTag
protected boolean
setPrefixCalled
protected boolean
startTagIncomplete
protected boolean
writeIndentation
protected boolean
writeLineSepartor

Method Summary

private static void
addPrintable(StringBuffer retval, char ch)
XmlSerializer
attribute(String namespace, String name, String value)
Write an attribute.
void
cdsect(String text)
private void
checkInterning(String name)
protected void
closeStartTag()
void
comment(String text)
void
docdecl(String text)
void
endDocument()
Finish writing.
XmlSerializer
endTag(String namespace, String name)
Write end tag.
protected void
ensureElementsCapacity()
protected void
ensureNamespacesCapacity()
void
entityRef(String text)
void
flush()
Write all pending output to the stream.
private String
generatePrefix(String namespace)
int
getDepth()
Returns the current depth of the element.
boolean
getFeature(String name)
Return the current value of the feature with given name.
private String
getLocation()
String
getName()
Returns the name of the current element as set by startTag().
String
getNamespace()
Returns the namespace URI of the current element as set by startTag().
String
getPrefix(String namespace, boolean generatePrefix)
Return namespace that corresponds to given prefix If there is no prefix bound to this namespace return null but if generatePrefix is false then return generated prefix.
Object
getProperty(String name)
Look up the value of a property.
Writer
getWriter()
void
ignorableWhitespace(String text)
protected String
lookupOrDeclarePrefix(String namespace)
protected static String
printable(String s)
simple utility method -- good for debugging
protected static String
printable(char ch)
void
processingInstruction(String text)
protected void
rebuildIndentationBuf()
For maximum efficiency when writing indents the required output is pre-computed This is internal function that recomputes buffer after user requested chnages.
protected void
reset()
void
setFeature(String name, boolean state)
Set feature identified by name (recommended to be URI for uniqueness).
void
setOutput(OutputStream os, String encoding)
Set to use binary output stream with given encoding.
void
setOutput(Writer writer)
Set the output to the given writer.
void
setPrefix(String prefix, String namespace)
Binds the given prefix to the given namespace.
void
setProperty(String name, Object value)
Set the value of a property.
void
startDocument(String encoding, Boolean standalone)
Write <?xml declaration with encoding (if encoding not null) and standalone flag (if standalone not null) This method can only be called just after setOutput.
XmlSerializer
startTag(String namespace, String name)
Writes a start tag with the given namespace and name.
XmlSerializer
text(String text)
Writes text, where special XML chars are escaped automatically
XmlSerializer
text(char[] buf, int start, int len)
Writes text, where special XML chars are escaped automatically
protected void
writeAttributeValue(String value, Writer out)
protected void
writeElementContent(String text, Writer out)
protected void
writeElementContent(char[] buf, int off, int len, Writer out)
protected void
writeIndent()
private void
writeNamespaceDeclarations()

Field Details

BUF_LEN

private static final int BUF_LEN

FEATURE_NAMES_INTERNED

protected final String FEATURE_NAMES_INTERNED

FEATURE_SERIALIZER_ATTVALUE_USE_APOSTROPHE

protected final String FEATURE_SERIALIZER_ATTVALUE_USE_APOSTROPHE

PROPERTY_LOCATION

protected static final String PROPERTY_LOCATION

PROPERTY_SERIALIZER_INDENTATION

protected final String PROPERTY_SERIALIZER_INDENTATION

PROPERTY_SERIALIZER_LINE_SEPARATOR

protected final String PROPERTY_SERIALIZER_LINE_SEPARATOR

TRACE_SIZING

private static final boolean TRACE_SIZING
Field Value:
false

XMLNS_URI

protected static final String XMLNS_URI

XML_URI

protected static final String XML_URI

attributeUseApostrophe

protected boolean attributeUseApostrophe

autoDeclaredPrefixes

protected int autoDeclaredPrefixes

buf

protected char[] buf

checkNamesInterned

private boolean checkNamesInterned

depth

protected int depth

doIndent

protected boolean doIndent

elName

protected String[] elName

elNamespace

protected String[] elNamespace

elNamespaceCount

protected int[] elNamespaceCount

finished

protected boolean finished

indentationBuf

protected char[] indentationBuf

indentationJump

protected int indentationJump

indentationString

protected String indentationString

lineSeparator

protected String lineSeparator

location

protected String location

maxIndentLevel

protected int maxIndentLevel

namesInterned

protected boolean namesInterned

namespaceEnd

protected int namespaceEnd

namespacePrefix

protected String[] namespacePrefix

namespaceUri

protected String[] namespaceUri

offsetNewLine

protected int offsetNewLine

out

protected Writer out

pastRoot

protected boolean pastRoot

precomputedPrefixes

protected static final String[] precomputedPrefixes

seenBracket

protected boolean seenBracket

seenBracketBracket

protected boolean seenBracketBracket

seenTag

protected boolean seenTag

setPrefixCalled

protected boolean setPrefixCalled

startTagIncomplete

protected boolean startTagIncomplete

writeIndentation

protected boolean writeIndentation

writeLineSepartor

protected boolean writeLineSepartor

Method Details

addPrintable

private static void addPrintable(StringBuffer retval,
                                 char ch)

attribute

public XmlSerializer attribute(String namespace,
                               String name,
                               String value)
            throws IOException
Write an attribute. Calls to attribute() MUST follow a call to startTag() immediately. If there is no prefix defined for the given namespace, a prefix will be defined automatically. If namespace is null or empty string no namespace prefix is printed but just name.
Specified by:
attribute in interface XmlSerializer

cdsect

public void cdsect(String text)
            throws IOException
Specified by:
cdsect in interface XmlSerializer

checkInterning

private void checkInterning(String name)

closeStartTag

protected void closeStartTag()
            throws IOException

comment

public void comment(String text)
            throws IOException
Specified by:
comment in interface XmlSerializer

docdecl

public void docdecl(String text)
            throws IOException
Specified by:
docdecl in interface XmlSerializer

endDocument

public void endDocument()
            throws IOException
Finish writing. All unclosed start tags will be closed and output will be flushed. After calling this method no more output can be serialized until next call to setOutput()
Specified by:
endDocument in interface XmlSerializer

endTag

public XmlSerializer endTag(String namespace,
                            String name)
            throws IOException
Write end tag. Repetition of namespace and name is just for avoiding errors.

Background: in kXML endTag had no arguments, and non matching tags were very difficult to find... If namespace is null no namespace prefix is printed but just name. If namespace is empty string then serialzier will make sure that default empty namespace is declared (in XML 1.0 xmlns='').

Specified by:
endTag in interface XmlSerializer

ensureElementsCapacity

protected void ensureElementsCapacity()

ensureNamespacesCapacity

protected void ensureNamespacesCapacity()

entityRef

public void entityRef(String text)
            throws IOException
Specified by:
entityRef in interface XmlSerializer

flush

public void flush()
            throws IOException
Write all pending output to the stream. If method startTag() or attribute() was called then start tag is closed (final >) before flush() is called on underlying output stream.

NOTE: if there is need to close start tag (so no more attribute() calls are allowed) but without flushinging output call method text() with empty string (text("")).

Specified by:
flush in interface XmlSerializer

generatePrefix

private String generatePrefix(String namespace)

getDepth

public int getDepth()
Returns the current depth of the element. Outside the root element, the depth is 0. The depth is incremented by 1 when startTag() is called. The depth is decremented after the call to endTag() event was observed.
 <!-- outside -->     0
 <root>               1
   sometext                 1
     <foobar>         2
     </foobar>        2
 </root>              1
 <!-- outside -->     0
 
Specified by:
getDepth in interface XmlSerializer

getFeature

public boolean getFeature(String name)
            throws IllegalArgumentException
Return the current value of the feature with given name.

NOTE: unknown properties are always returned as null

Specified by:
getFeature in interface XmlSerializer
Parameters:
name - The name of feature to be retrieved.
Returns:
The value of named feature.

getLocation

private String getLocation()

getName

public String getName()
Returns the name of the current element as set by startTag(). It can only be null before first call to startTag() or when last endTag() is called to close first startTag().
Specified by:
getName in interface XmlSerializer
Returns:
namespace set by startTag() that is currently in scope

getNamespace

public String getNamespace()
Returns the namespace URI of the current element as set by startTag().

NOTE: that measn in particaulr that:

  • if there was startTag("", ...) then getNamespace() returns ""
  • if there was startTag(null, ...) then getNamespace() returns null
Specified by:
getNamespace in interface XmlSerializer
Returns:
namespace set by startTag() that is currently in scope

getPrefix

public String getPrefix(String namespace,
                        boolean generatePrefix)
Specified by:
getPrefix in interface XmlSerializer

getProperty

public Object getProperty(String name)
            throws IllegalArgumentException
Look up the value of a property. The property name is any fully-qualified URI. I

NOTE: unknown properties are always returned as null

Specified by:
getProperty in interface XmlSerializer
Parameters:
name - The name of property to be retrieved.
Returns:
The value of named property.

getWriter

public Writer getWriter()

ignorableWhitespace

public void ignorableWhitespace(String text)
            throws IOException
Specified by:
ignorableWhitespace in interface XmlSerializer

lookupOrDeclarePrefix

protected String lookupOrDeclarePrefix(String namespace)

printable

protected static final String printable(String s)
simple utility method -- good for debugging

printable

protected static final String printable(char ch)

processingInstruction

public void processingInstruction(String text)
            throws IOException
Specified by:
processingInstruction in interface XmlSerializer

rebuildIndentationBuf

protected void rebuildIndentationBuf()
For maximum efficiency when writing indents the required output is pre-computed This is internal function that recomputes buffer after user requested chnages.

reset

protected void reset()

setFeature

public void setFeature(String name,
                       boolean state)
            throws IllegalArgumentException,
                   IllegalStateException
Specified by:
setFeature in interface XmlSerializer

setOutput

public void setOutput(OutputStream os,
                      String encoding)
            throws IOException
Set to use binary output stream with given encoding.
Specified by:
setOutput in interface XmlSerializer

setOutput

public void setOutput(Writer writer)
Set the output to the given writer.

WARNING no information about encoding is available!

Specified by:
setOutput in interface XmlSerializer

setPrefix

public void setPrefix(String prefix,
                      String namespace)
            throws IOException
Specified by:
setPrefix in interface XmlSerializer
Parameters:
prefix - must be not null (or IllegalArgumentException is thrown)
namespace - must be not null

setProperty

public void setProperty(String name,
                        Object value)
            throws IllegalArgumentException,
                   IllegalStateException
Specified by:
setProperty in interface XmlSerializer

startDocument

public void startDocument(String encoding,
                          Boolean standalone)
            throws IOException
Write <?xml declaration with encoding (if encoding not null) and standalone flag (if standalone not null) This method can only be called just after setOutput.
Specified by:
startDocument in interface XmlSerializer

startTag

public XmlSerializer startTag(String namespace,
                              String name)
            throws IOException
Writes a start tag with the given namespace and name. If there is no prefix defined for the given namespace, a prefix will be defined automatically. The explicit prefixes for namespaces can be established by calling setPrefix() immediately before this method. If namespace is null no namespace prefix is printed but just name. If namespace is empty string then serialzier will make sure that default empty namespace is declared (in XML 1.0 xmlns='') or throw IllegalStateException if default namespace is already bound to non-empty string.
Specified by:
startTag in interface XmlSerializer

text

public XmlSerializer text(String text)
            throws IOException
Writes text, where special XML chars are escaped automatically
Specified by:
text in interface XmlSerializer

text

public XmlSerializer text(char[] buf,
                          int start,
                          int len)
            throws IOException
Writes text, where special XML chars are escaped automatically
Specified by:
text in interface XmlSerializer

writeAttributeValue

protected void writeAttributeValue(String value,
                                   Writer out)
            throws IOException

writeElementContent

protected void writeElementContent(String text,
                                   Writer out)
            throws IOException

writeElementContent

protected void writeElementContent(char[] buf,
                                   int off,
                                   int len,
                                   Writer out)
            throws IOException

writeIndent

protected void writeIndent()
            throws IOException

writeNamespaceDeclarations

private void writeNamespaceDeclarations()
            throws IOException