All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.xmlbeans.XmlTokenSource Maven / Gradle / Ivy

/*   Copyright 2004 The Apache Software Foundation
 *
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at\\
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package org.apache.xmlbeans;

import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.ext.LexicalHandler;

import javax.xml.stream.XMLStreamReader;
import java.io.*;

/**
 * Represents a holder of XML that can return an {@link XmlCursor}
 * or copy itself to various media such as
 * {@link Writer Writers} or {@link File Files}.
 * Both {@link XmlObject}
 * (and thus all XML Beans) and {@link XmlCursor} are
 * XmlTokenSource implementations.
 *
 * @see XmlObject
 * @see XmlCursor
 */
public interface XmlTokenSource {
    /**
     * Returns the synchronization object for the document.  If concurrent
     * multithreaded access to a document is required, the access should should
     * be protected by synchronizing on this monitor() object.  There is one
     * monitor per XML document tree.
     */
    Object monitor();

    /**
     * Returns the XmlDocumentProperties object for the document this token
     * source is associated with.
     */
    XmlDocumentProperties documentProperties();

    /**
     * Returns a new XML cursor.
     * 

* A cursor provides random access to all the tokens in the XML * data, plus the ability to extract strongly-typed XmlObjects * for the data. If the data is not read-only, the XML cursor * also allows modifications to the data. *

* Using a cursor for the first time typically forces the XML * document into memory. */ XmlCursor newCursor(); /** * Returns a new XMLStreamReader. *

* The stream starts at the current begin-tag or begin-document * position and ends at the matching end-tag or end-document. *

* This is a fail-fast stream, so if the underlying data is changed * while the stream is being read, the stream throws a * ConcurrentModificationException. */ XMLStreamReader newXMLStreamReader(); /** * Returns standard XML text. *

* The text returned represents the document contents starting at * the current begin-tag or begin-document and ending at the matching * end-tag or end-document. This is same content as newReader, but * it is returned as a single string. *

* Throws an IllegalStateException if the XmlTokenSource is not * positioned at begin-tag or begin-document (e.g., if it is at * an attribute). *

* Note that this method does not produce XML with the XML declaration, * including the encoding information. To save the XML declaration with * the XML, see {@link #save(OutputStream)} or {@link #save(OutputStream, XmlOptions)}. */ String xmlText(); /** * Returns a new stream containing standard XML text, encoded * according to the given encoding. *

* The byte stream contains contents starting at the current * begin-tag or begin-document and ending at the matching * end-tag or end-document. The specified encoding is used * and also emitted in a PI at the beginning of the stream. *

* This is a fail-fast stream, so if the underlying data is changed * while the stream is being read, the stream throws a * ConcurrentModificationException. *

* Throws an IllegalStateException if the XmlTokenSource is not * positioned at begin-tag or begin-document (e.g., if it is at * an attribute). */ InputStream newInputStream(); /** * Returns a new character reader containing XML text. *

* The contents of the reader represents the document contents * starting at the current begin-tag or begin-document and ending at * the matching end-tag or end-document. No encoding annotation * will be made in the text itself. *

* This is a fail-fast reader, so if the underlying data is changed * while the reader is being read, the reader throws a * ConcurrentModificationException. *

* Throws an IllegalStateException if the XmlTokenSource is not * positioned at begin-tag or begin-document (e.g., if it is at * an attribute). */ Reader newReader(); /** * Returns a W3C DOM Node containing the XML * represented by this source. This is a copy of the XML, it is * not a live with the underlying store of this token source. * If this is the document node, then a Document is returned, else * a DocumentFragment is returned. */ Node newDomNode(); /** * Returns a W3C DOM Node containing the XML represented by this source. * This is a live DOM node, not a copy. Any changes made through this node * are immediately reflected in the document associated with this token * source. Depending on the kind of token this XmlTokenSource represents, * an appropriate node will be returned. */ Node getDomNode(); /** * Writes the XML represented by this source to the given SAX content and * lexical handlers. * Note that this method does not save the XML declaration, including the encoding information. * To save the XML declaration with the XML, see {@link #save(OutputStream)}, * {@link #save(OutputStream, XmlOptions)}, {@link #save(File)} or {@link #save(File, XmlOptions)}. */ void save(ContentHandler ch, LexicalHandler lh) throws SAXException; /** * Writes the XML represented by this source to the given File. * This method will save the XML declaration, including encoding information, * with the XML. */ void save(File file) throws IOException; /** * Writes the XML represented by this source to the given output stream. * This method will save the XML declaration, including encoding information, * with the XML. */ void save(OutputStream os) throws IOException; /** * Writes the XML represented by this source to the given output. * Note that this method does not save the XML declaration, including the encoding information. * To save the XML declaration with the XML, see {@link #save(OutputStream)}, * {@link #save(OutputStream, XmlOptions)}, {@link #save(File)} or {@link #save(File, XmlOptions)}. */ void save(Writer w) throws IOException; /** * Returns a new XMLStreamReader. *

* The stream starts at the current begin-tag or begin-document * position and ends at the matching end-tag or end-document. *

* This is a fail-fast stream, so if the underlying data is changed * while the stream is being read, the stream throws a * ConcurrentModificationException. *

* Throws an IllegalStateException if the XmlTokenSource is not * positioned at begin-tag or begin-document (e.g., if it is at * an attribute). * *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Method overview
To specify thisUse this method
The character encoding to use when converting the character * data in the XML to bytess.{@link XmlOptions#setCharacterEncoding}
Prefix-to-namespace mappings that should be assumed * when saving this XML. This is useful when the resulting * XML will be part of a larger XML document, ensuring that this * inner document will take advantage of namespaces defined in * the outer document.{@link XmlOptions#setSaveImplicitNamespaces}
Suggested namespace prefixes to use when saving. Used only * when a namespace attribute needs to be synthesized.{@link XmlOptions#setSaveSuggestedPrefixes}
That namespace attributes should occur first in elements when * the XML is saved. By default, they occur last.{@link XmlOptions#setSaveNamespacesFirst}
The XML should be pretty printed when saved. Note that this * should only be used for debugging.{@link XmlOptions#setSavePrettyPrint}
The number of spaces to use when indenting for pretty printing. * The default is 2.{@link XmlOptions#setSavePrettyPrintIndent}
The additional number of spaces indented from the left * for pretty printed XML.{@link XmlOptions#setSavePrettyPrintOffset}
To minimize the number of namespace attributes generated for the * saved XML. Note that this can reduce performance significantly.{@link XmlOptions#setSaveAggressiveNamespaces}
To reduce the size of the saved document * by allowing the use of the default namespace. Note that this can * potentially change the semantic meaning of the XML if unprefixed QNames are * present as the value of an attribute or element.{@link XmlOptions#setUseDefaultNamespace}
To filter out processing instructions with the specified target name.{@link XmlOptions#setSaveFilterProcinst}
Change the QName of the synthesized root element when saving. This * replaces "xml-fragment" with "fragment" in the namespace * http://www.openuri.org/fragment{@link XmlOptions#setSaveUseOpenFrag}
Saving should begin on the element's contents.{@link XmlOptions#setSaveInner}
Saving should begin on the element, rather than its contents.{@link XmlOptions#setSaveOuter}
To rename the document element, or to specify the document element * for this XML.{@link XmlOptions#setSaveSyntheticDocumentElement}
* * @param options Any of the described options. Options map may be null. * @return A new validating XMLStreamReader. * @see XmlOptions */ XMLStreamReader newXMLStreamReader(XmlOptions options); /** * Just like xmlText() but with options. * Options map may be null. *

* Note that this method does not produce XML with the XML declaration, * including the encoding information. To save the XML declaration with * the XML, see {@link #save(OutputStream)} or {@link #save(OutputStream, XmlOptions)}. * * @see XmlOptions */ String xmlText(XmlOptions options); /** * Just like newInputStream(String encoding) but with options. * Options map may be null. * * @see XmlOptions */ InputStream newInputStream(XmlOptions options); /** * Just like newReader() but with options. * Options map may be null. * * @see XmlOptions */ Reader newReader(XmlOptions options); /** * Just like newDomNode() but with options. * Options map may be null. * * @see XmlOptions */ Node newDomNode(XmlOptions options); /** * Writes the XML represented by this source to the given SAX content and * lexical handlers. * Note that this method does not save the XML declaration, including the encoding information. * To save the XML declaration with the XML, see {@link #save(OutputStream)}, * {@link #save(OutputStream, XmlOptions)}, {@link #save(File)} or {@link #save(File, XmlOptions)}. */ void save(ContentHandler ch, LexicalHandler lh, XmlOptions options) throws SAXException; /** * Writes the XML represented by this source to the given File. * This method will save the XML declaration, including encoding information, * with the XML. */ void save(File file, XmlOptions options) throws IOException; /** * Writes the XML represented by this source to the given output stream. * This method will save the XML declaration, including encoding information, * with the XML. */ void save(OutputStream os, XmlOptions options) throws IOException; /** * Writes the XML represented by this source to the given output. * Note that this method does not save the XML declaration, including the encoding information. * To save the XML declaration with the XML, see {@link #save(OutputStream)}, * {@link #save(OutputStream, XmlOptions)}, {@link #save(File)} or {@link #save(File, XmlOptions)}. */ void save(Writer w, XmlOptions options) throws IOException; /** * Prints to stdout the state of the document in which this token source is positioned. * This is very implementation specific and may change at any time. Dump can be useful * for debugging purposes. It is very different from the save methods which produce * XML text which only approximates the actual state of the document. */ void dump(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy