Package org.jibx.runtime.impl
Class XMLWriterBase
java.lang.Object
org.jibx.runtime.impl.XMLWriterNamespaceBase
org.jibx.runtime.impl.XMLWriterBase
- All Implemented Interfaces:
IExtensibleWriter
,IXMLWriter
- Direct Known Subclasses:
GenericXMLWriter
,StreamWriterBase
Base implementation of XML writer interface. This provides common handling of
indentation and formatting that can be used for all forms of text output.
- Author:
- Dennis M. Sosnoski
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
Flag for first write done (used to skip indentation before first element).private boolean
Flag for current element has content.private boolean
Flag for current element has text content.Fields inherited from class org.jibx.runtime.impl.XMLWriterNamespaceBase
m_prefixes, m_uris
-
Constructor Summary
ConstructorsConstructorDescriptionXMLWriterBase
(String[] uris) Constructor.XMLWriterBase
(XMLWriterBase base, String[] uris) Copy constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addAttribute
(int index, String name, String value) Add attribute to current open start tag.abstract void
close()
Close document output.void
Close the current open start tag as an empty element.void
Close the current open start tag.void
Generate end tag.protected final void
Set up for writing any content to element.protected final void
Set up for writing text content to element.abstract void
flush()
Flush document output.protected abstract void
indent
(int bias) Request output indent with bias from current element nesting level.private void
Conditionally indent output only if not the first write.void
init()
Initialize writer.void
reset()
Reset to initial state for reuse.void
startTagClosed
(int index, String name) Generate closed start tag.void
startTagNamespaces
(int index, String name, int[] nums, String[] prefs) Generate start tag for element with namespaces.void
startTagOpen
(int index, String name) Generate open start tag.protected abstract void
writeAttributeText
(String text) Write attribute text to output.void
writeComment
(String text) Write comment to document.void
writeDocType
(String name, String sys, String pub, String subset) Write DOCTYPE declaration to document.void
writeEntityRef
(String name) Write entity reference to document.protected abstract void
writeMarkup
(char chr) Write markup character to output.protected abstract void
writeMarkup
(String text) Write markup text to output.void
Write processing instruction to document.protected abstract void
writePrefix
(int index) Write namespace prefix to output.void
writeXMLDecl
(String version, String encoding, String standalone) Write XML declaration to document.Methods inherited from class org.jibx.runtime.impl.XMLWriterNamespaceBase
decrementNesting, defineNamespace, getExtensionNamespaces, getNamespaceCount, getNamespacePrefix, getNamespaces, getNamespaceUri, getNestingDepth, getPrefixIndex, growArray, incrementNesting, internalNamespacePrefix, internalNamespaceUri, internalSetUris, openNamespaces, popExtensionNamespaces, popTranslationTable, pushExtensionNamespaces, pushTranslationTable, shrinkArray, translateNamespace, undefineNamespace
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, indent, openNamespaces, popExtensionNamespaces, popTranslationTable, pushExtensionNamespaces, pushTranslationTable, setIndentSpaces, writeCData, writeTextContent
-
Field Details
-
m_textSeen
private boolean m_textSeenFlag for current element has text content. -
m_contentSeen
private boolean m_contentSeenFlag for current element has content. -
m_afterFirst
private boolean m_afterFirstFlag for first write done (used to skip indentation before first element).
-
-
Constructor Details
-
XMLWriterBase
Constructor.- Parameters:
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")
-
XMLWriterBase
Copy constructor. This initializes the extension namespace information from an existing instance.- Parameters:
base
- existing instanceuris
- ordered array of URIs for namespaces used in document
-
-
Method Details
-
writeMarkup
Write markup text to output. Markup text can be written directly to the output without the need for any escaping, but still needs to be properly encoded.- Parameters:
text
- markup text to be written- Throws:
IOException
- if error writing to document
-
writeMarkup
Write markup character to output. Markup text can be written directly to the output without the need for any escaping, but still needs to be properly encoded.- Parameters:
chr
- markup character to be written- Throws:
IOException
- if error writing to document
-
writePrefix
Write namespace prefix to output. This internal method is used to throw an exception when an undeclared prefix is used.- Parameters:
index
- namespace URI index number- Throws:
IOException
- if error writing to document
-
writeAttributeText
Write attribute text to output. This needs to write the text with any appropriate escaping.- Parameters:
text
- attribute value text to be written- Throws:
IOException
- if error writing to document
-
indent
Request output indent with bias from current element nesting level. This is used internally for proper indenting in special cases.- Throws:
IOException
- on error writing to document
-
flagContent
Set up for writing any content to element. If the start tag for the element has not been closed, this will close it.- Throws:
IOException
- on error writing to document
-
flagTextContent
Set up for writing text content to element. If the start tag for the element has not been closed, this will close it.- Throws:
IOException
- on error writing to document
-
init
public void init()Initialize writer.- Specified by:
init
in interfaceIXMLWriter
-
writeXMLDecl
Write XML declaration to document. This can only be called before any other methods in the interface are called.- Specified by:
writeXMLDecl
in interfaceIXMLWriter
- Parameters:
version
- XML version textencoding
- text for encoding attribute (unspecified ifnull
)standalone
- text for standalone attribute (unspecified ifnull
)- Throws:
IOException
- on error writing to document
-
startTagOpen
Generate open start tag. This allows attributes to be added to the start tag, but must be followed by acloseStartTag()
call.- Specified by:
startTagOpen
in interfaceIXMLWriter
- Parameters:
index
- namespace URI index numbername
- unqualified element name- Throws:
IOException
- on error writing to document
-
startTagNamespaces
public void startTagNamespaces(int index, String name, int[] nums, String[] prefs) throws IOException Generate start tag for element with namespaces. This creates the actual start tag, along with any necessary namespace declarations. Previously active namespace declarations are not duplicated. The tag is left incomplete, allowing other attributes to be added.- Specified by:
startTagNamespaces
in interfaceIXMLWriter
- Parameters:
index
- namespace URI index numbername
- element namenums
- array of namespace indexes defined by this element (must be constant, reference is kept until end of element)prefs
- array of namespace prefixes mapped by this element (nonull
values, use "" for default namespace declaration)- Throws:
IOException
- on error writing to document
-
addAttribute
Add attribute to current open start tag. This is only valid after a call tostartTagOpen(int, java.lang.String)
orstartTagNamespaces(int, java.lang.String, int[], java.lang.String[])
and before the corresponding call tocloseStartTag()
.- Specified by:
addAttribute
in interfaceIXMLWriter
- Parameters:
index
- namespace URI index numbername
- unqualified attribute namevalue
- text value for attribute- Throws:
IOException
- on error writing to document
-
closeStartTag
Close the current open start tag. This is only valid after a call tostartTagOpen(int, java.lang.String)
.- Specified by:
closeStartTag
in interfaceIXMLWriter
- Throws:
IOException
- on error writing to document
-
closeEmptyTag
Close the current open start tag as an empty element. This is only valid after a call tostartTagOpen(int, java.lang.String)
.- Specified by:
closeEmptyTag
in interfaceIXMLWriter
- Throws:
IOException
- on error writing to document
-
indentAfterFirst
Conditionally indent output only if not the first write. This is used both to track the output state (useful to check that the XML declaration is only written at the start of the document) and to avoid an initial blank line in the case where an XML declaration is not written.- Throws:
IOException
- on write error
-
startTagClosed
Generate closed start tag. No attributes or namespaces can be added to a start tag written using this call.- Specified by:
startTagClosed
in interfaceIXMLWriter
- Parameters:
index
- namespace URI index numbername
- unqualified element name- Throws:
IOException
- on error writing to document
-
endTag
Generate end tag.- Specified by:
endTag
in interfaceIXMLWriter
- Parameters:
index
- namespace URI index numbername
- unqualified element name- Throws:
IOException
- on error writing to document
-
writeComment
Write comment to document.- Specified by:
writeComment
in interfaceIXMLWriter
- Parameters:
text
- comment text- Throws:
IOException
- on error writing to document
-
writeEntityRef
Write entity reference to document.- Specified by:
writeEntityRef
in interfaceIXMLWriter
- Parameters:
name
- entity name- Throws:
IOException
- on error writing to document
-
writeDocType
Write DOCTYPE declaration to document.- Specified by:
writeDocType
in interfaceIXMLWriter
- Parameters:
name
- root element namesys
- system ID (null
if none, must be non-null
for public ID to be used)pub
- public ID (null
if none)subset
- internal subset (null
if none)- Throws:
IOException
- on error writing to document
-
writePI
Write processing instruction to document.- Specified by:
writePI
in interfaceIXMLWriter
- Parameters:
target
- processing instruction target namedata
- processing instruction data- Throws:
IOException
- on error writing to document
-
flush
Flush document output. Subclasses must implement this method to force all buffered output to be written. To assure proper handling of an open start tag they should first callflagContent()
.- Specified by:
flush
in interfaceIXMLWriter
- Throws:
IOException
- on error writing to document
-
close
Close document output. Completes writing of document output, including closing the output medium.- Specified by:
close
in interfaceIXMLWriter
- Throws:
IOException
- on error writing to document
-
reset
public void reset()Reset to initial state for reuse. The writer is serially reusable, as long as this method is called to clear any retained state information between uses. It is automatically called when output is set.- Specified by:
reset
in interfaceIXMLWriter
- Overrides:
reset
in classXMLWriterNamespaceBase
-