javolution.xml.stream.XMLStreamWriter Maven / Gradle / Ivy
/*
* Javolution - Java(TM) Solution for Real-Time and Embedded Systems
* Copyright (C) 2012 - Javolution (http://javolution.org/)
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software is
* freely granted, provided that this notice is preserved.
*/
package javolution.xml.stream;
import java.lang.CharSequence;
/**
* This interface is similar to
* javax.xml.stream.XMLStreamWriter
; but it does not forces
* dynamic allocation when formatting (any {@link CharSequence CharSequence}
* can be used instead of {@link String}).
*
* Except for the speed (faster) and the added flexibility, the
* usage/behavior is about the same as its StAX counterpart.
*
* This writer does not require creating new String
objects
* during XML formatting. Attributes values can be held by a single/reusable
* {@link javolution.text.TextBuilder TextBuilder}
* (or StringBuilder
) instance to avoid adverse effects
* on memory footprint (heap), garbage collection and performance.
* [code]
* // Creates a new writer (potentially recycled).
* XMLOutputFactory factory = OSGiServices.getXMLOutputFactory();
* XMLStreamWriter writer = factory.createXMLStreamWriter(outputStream);
*
* TextBuilder tmp = new TextBuilder(); // To avoid creating new String instances.
* writer.writeStartDocument();
* writer.writeStartElement("Time");
* writer.writeAttribute("hour", tmp.clear().append(time.hour);
* writer.writeAttribute("minute", tmp.clear().append(time.minute);
* writer.writeAttribute("second", tmp.clear().append(time.second);
* writer.writeEndElement();
* writer.writeStartDocument();
*
* writer.close(); // Closes the writer (does not close underlying output stream).
* [/code]
*
* @author Jean-Marie Dautelle
* @version 6.0 December 12, 2012
*/
public interface XMLStreamWriter {
/**
* Writes a start tag to the output. All writeStartElement methods open a
* new scope in the internal namespace context. Writing the corresponding
* EndElement causes the scope to be closed.
*
* @param localName local name of the tag.
* @throws XMLStreamException
*/
void writeStartElement(CharSequence localName)
throws XMLStreamException;
/**
* Writes a start tag to the output.
*
* @param namespaceURI the namespaceURI of the prefix to use.
* @param localName local name of the tag.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeStartElement(CharSequence namespaceURI,
CharSequence localName) throws XMLStreamException;
/**
* Writes a start tag to the output.
*
* @param localName local name of the tag.
* @param prefix the prefix of the tag.
* @param namespaceURI the uri to bind the prefix to.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeStartElement(CharSequence prefix, CharSequence localName,
CharSequence namespaceURI) throws XMLStreamException;
/**
* Writes an empty element tag to the output.
*
* @param namespaceURI the uri to bind the tag to.
* @param localName local name of the tag.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeEmptyElement(CharSequence namespaceURI,
CharSequence localName) throws XMLStreamException;
/**
* Writes an empty element tag to the output.
*
* @param prefix the prefix of the tag.
* @param localName local name of the tag.
* @param namespaceURI the uri to bind the tag to.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeEmptyElement(CharSequence prefix, CharSequence localName,
CharSequence namespaceURI) throws XMLStreamException;
/**
* Writes an empty element tag to the output.
*
* @param localName local name of the tag.
* @throws XMLStreamException
*/
void writeEmptyElement(CharSequence localName)
throws XMLStreamException;
/**
* Writes an end tag to the output relying on the internal state of the
* writer to determine the prefix and local name of the event.
*
* @throws XMLStreamException
*/
void writeEndElement() throws XMLStreamException;
/**
* Closes any start tags and writes corresponding end tags.
*
* @throws XMLStreamException
*/
void writeEndDocument() throws XMLStreamException;
/**
* Close this writer and free any resources associated with the writer. This
* must not close the underlying output stream.
*
* @throws XMLStreamException
*/
void close() throws XMLStreamException;
/**
* Write any cached data to the underlying output mechanism.
*
* @throws XMLStreamException
*/
void flush() throws XMLStreamException;
/**
* Writes an attribute to the output stream without a prefix.
*
* @param localName the local name of the attribute.
* @param value the value of the attribute.
* @throws IllegalStateException if the current state does not allow
* attribute writing.
* @throws XMLStreamException
*/
void writeAttribute(CharSequence localName, CharSequence value)
throws XMLStreamException;
/**
* Writes an attribute to the output stream.
*
* @param prefix the prefix for this attribute.
* @param namespaceURI the uri of the prefix for this attribute
* @param localName the local name of the attribute.
* @param value the value of the attribute.
* @throws IllegalStateException if the current state does not allow
* attribute writing.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeAttribute(CharSequence prefix, CharSequence namespaceURI,
CharSequence localName, CharSequence value)
throws XMLStreamException;
/**
* Writes an attribute to the output stream.
*
* @param namespaceURI the uri of the prefix for this attribute.
* @param localName the local name of the attribute.
* @param value the value of the attribute.
* @throws IllegalStateException if the current state does not allow
* attribute writing.
* @throws XMLStreamException if the namespace URI has not been bound
* to a prefix and this writer does not {@link
* XMLOutputFactory#IS_REPAIRING_NAMESPACES repair namespaces}.
*/
void writeAttribute(CharSequence namespaceURI,
CharSequence localName, CharSequence value)
throws XMLStreamException;
/**
* Writes a namespace to the output stream. If the prefix argument to this
* method is the empty string, "xmlns", or null
this method
* will delegate to writeDefaultNamespace.
*
* @param prefix the prefix to bind this namespace to or null
* @param namespaceURI the uri to bind the prefix.
* @throws IllegalStateException if the current state does not allow
* namespace writing.
* @throws XMLStreamException
*/
void writeNamespace(CharSequence prefix, CharSequence namespaceURI)
throws XMLStreamException;
/**
* Writes the default namespace to the stream.
*
* @param namespaceURI the uri to bind the default namespace to or
* null
(to map the prefix to ""
URI)
* @throws IllegalStateException if the current state does not allow
* namespace writing.
* @throws XMLStreamException
*/
void writeDefaultNamespace(CharSequence namespaceURI)
throws XMLStreamException;
/**
* Writes an xml comment with the data enclosed.
*
* @param data the data contained in the comment or null
* @throws XMLStreamException
*/
void writeComment(CharSequence data) throws XMLStreamException;
/**
* Writes a processing instruction.
*
* @param target the target of the processing instruction.
* @throws XMLStreamException
*/
void writeProcessingInstruction(CharSequence target)
throws XMLStreamException;
/**
* Writes a processing instruction
*
* @param target the target of the processing instruction.
* @param data the data contained in the processing instruction.
* @throws XMLStreamException
*/
void writeProcessingInstruction(CharSequence target,
CharSequence data) throws XMLStreamException;
/**
* Writes a CData section.
*
* @param data the data contained in the CData Section.
* @throws XMLStreamException
*/
void writeCData(CharSequence data) throws XMLStreamException;
/**
* Writes a DTD section (representing the entire doctypedecl
* production from the XML 1.0 specification).
*
* @param dtd the DTD to be written.
* @throws XMLStreamException
*/
void writeDTD(CharSequence dtd) throws XMLStreamException;
/**
* Writes an entity reference
*
* @param name the name of the entity.
* @throws XMLStreamException
*/
void writeEntityRef(CharSequence name) throws XMLStreamException;
/**
* Writes the XML Declaration. Defaults the XML version to 1.0 and the
* encoding (if any) to the one specified when the instance is created
* using {@link XMLOutputFactory}.
*
* @throws XMLStreamException
*/
void writeStartDocument() throws XMLStreamException;
/**
* Writes the XML Declaration. Default the encoding (if any) to the one
* specified when the instance is created using {@link XMLOutputFactory}.
*
* @param version the version of the xml document or null
.
* @throws XMLStreamException
*/
void writeStartDocument(CharSequence version)
throws XMLStreamException;
/**
* Writes the XML Declaration. Note that the encoding parameter does not set
* the actual encoding of the underlying output. That must be set when the
* instance when the instance is created using {@link XMLOutputFactory}.
*
* @param encoding the encoding of the xml declaration or null
.
* @param version the version of the xml document or null
.
* @throws XMLStreamException
*/
void writeStartDocument(CharSequence encoding, CharSequence version)
throws XMLStreamException;
/**
* Writes text to the output.
*
* @param text the value to write or null
.
* @throws XMLStreamException
*/
void writeCharacters(CharSequence text) throws XMLStreamException;
/**
* Writes text to the output.
*
* @param text the value to write
* @param start the starting position in the array.
* @param length the number of characters to write.
* @throws XMLStreamException
*/
void writeCharacters(char[] text, int start, int length)
throws XMLStreamException;
/**
* Gets the prefix the specified uri is bound to.
*
* @param uri namespace URI
* @return the prefix for the URI or null
* @throws XMLStreamException
*/
CharSequence getPrefix(CharSequence uri) throws XMLStreamException;
/**
* Sets the prefix the uri is bound to. This prefix is bound in the scope of
* the current START_ELEMENT / END_ELEMENT pair. If this method is called
* before a START_ELEMENT has been written the prefix is bound in the root
* scope.
*
* @param prefix the prefix to bind to the uri.
* @param uri the uri to bind to the prefix or null
* @throws XMLStreamException
*/
void setPrefix(CharSequence prefix, CharSequence uri)
throws XMLStreamException;
/**
* Binds a URI to the default namespace. This URI is bound in the scope of
* the current START_ELEMENT / END_ELEMENT pair. If this method is called
* before a START_ELEMENT has been written the uri is bound in the root
* scope.
*
* @param uri the uri to bind to the default namespace or null
.
* @throws XMLStreamException
*/
void setDefaultNamespace(CharSequence uri) throws XMLStreamException;
/**
* Gets the value of a feature/property from the underlying implementation.
*
* @param name the name of the property.
* @return the value of the property.
* @throws IllegalArgumentException if the property is not supported.
*/
Object getProperty(String name) throws IllegalArgumentException;
}