Class Stax2WriterAdapter

  • All Implemented Interfaces:
    javax.xml.stream.XMLStreamConstants, javax.xml.stream.XMLStreamWriter, TypedXMLStreamWriter, Validatable, XMLStreamWriter2

    public class Stax2WriterAdapter
    extends StreamWriterDelegate
    implements XMLStreamWriter2, javax.xml.stream.XMLStreamConstants
    This adapter implements parts of XMLStreamWriter2, the extended stream writer defined by Stax2 extension, by wrapping a vanilla Stax 1.0 XMLStreamReader implementation.

    Note: the implementation is incomplete as-is, since not all features needed are accessible via basic Stax 1.0 interface. As such, two main use cases for this wrapper are:

    • Serve as convenient base class for a complete implementation, which can use native accessors provided by the wrapped Stax implementation
    • To be used for tasks that make limited use of Stax2 API, such that missing parts are not needed
    • Field Detail

      • mEncoding

        protected java.lang.String mEncoding
        Encoding we have determined to be used, according to method calls (write start document etc.)
      • mNsRepairing

        protected final boolean mNsRepairing
    • Constructor Detail

      • Stax2WriterAdapter

        protected Stax2WriterAdapter​(javax.xml.stream.XMLStreamWriter sw)
    • Method Detail

      • wrapIfNecessary

        public static XMLStreamWriter2 wrapIfNecessary​(javax.xml.stream.XMLStreamWriter sw)
        Method that should be used to add dynamic support for XMLStreamWriter2. Method will check whether the stream reader passed happens to be a XMLStreamWriter2; and if it is, return it properly cast. If not, it will create necessary wrapper to support features needed by StaxMate, using vanilla Stax 1.0 interface.
      • writeBoolean

        public void writeBoolean​(boolean b)
                          throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a boolean value to the output as textual element content. The lexical representation of content is defined by the XML Schema boolean data type.
        Specified by:
        writeBoolean in interface TypedXMLStreamWriter
        Parameters:
        b - The boolean value to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeInt

        public void writeInt​(int value)
                      throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write an int value to the output as textual element content. The lexical representation of content is defined by the XML Schema integer data type.
        Specified by:
        writeInt in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeLong

        public void writeLong​(long value)
                       throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a long value to the output as textual element content. The lexical representation of content is defined by the XML Schema long data type.
        Specified by:
        writeLong in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeFloat

        public void writeFloat​(float value)
                        throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a float value to the output as textual element content. The lexical representation of content is defined by the XML Schema float data type.
        Specified by:
        writeFloat in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDouble

        public void writeDouble​(double value)
                         throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a double value to the output as textual element content. The lexical representation of content is defined by the XML Schema double data type.
        Specified by:
        writeDouble in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeInteger

        public void writeInteger​(java.math.BigInteger value)
                          throws javax.xml.stream.XMLStreamException
        Specified by:
        writeInteger in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDecimal

        public void writeDecimal​(java.math.BigDecimal value)
                          throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a decimal value to the output as textual element content. The lexical representation of content is defined by the XML Schema decimal data type.
        Specified by:
        writeDecimal in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeQName

        public void writeQName​(javax.xml.namespace.QName name)
                        throws javax.xml.stream.XMLStreamException
        Specified by:
        writeQName in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeIntArray

        public void writeIntArray​(int[] value,
                                  int from,
                                  int length)
                           throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter

        Write int array to the output. The lexical representation of a int array is defined by the following XML schema type:

            <xs:simpleType name="intArray">
               <xs:list itemType="xs:int"/>
            </xs:simpleType>
        whose lexical space is a list of space-separated ints. This method can be called multiple times to write the array in chunks.
        Specified by:
        writeIntArray in interface TypedXMLStreamWriter
        Parameters:
        value - The array from which to write the ints.
        from - The index in the array from which writing starts.
        length - The number of ints to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeLongArray

        public void writeLongArray​(long[] value,
                                   int from,
                                   int length)
                            throws javax.xml.stream.XMLStreamException
        Specified by:
        writeLongArray in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeFloatArray

        public void writeFloatArray​(float[] value,
                                    int from,
                                    int length)
                             throws javax.xml.stream.XMLStreamException
        Specified by:
        writeFloatArray in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDoubleArray

        public void writeDoubleArray​(double[] value,
                                     int from,
                                     int length)
                              throws javax.xml.stream.XMLStreamException
        Specified by:
        writeDoubleArray in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeBinary

        public void writeBinary​(Base64Variant v,
                                byte[] value,
                                int from,
                                int length)
                         throws javax.xml.stream.XMLStreamException
        Specified by:
        writeBinary in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeBinary

        public void writeBinary​(byte[] value,
                                int from,
                                int length)
                         throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter

        Write binary content as base64 encoded characters to the output. The lexical representation of a byte array is defined by the XML Schema base64Binary data type. This method can be called multiple times to write the array in chunks; but if so, callers should write output in chunks divisible by 3 (natural atomic unit of base64 output, which avoids padding) to maximize interoperability.

        Note: base64 variant defaults to Base64Variants.MIME.

        Specified by:
        writeBinary in interface TypedXMLStreamWriter
        Parameters:
        value - The array from which to write the bytes.
        from - The index in the array from which writing starts.
        length - The number of bytes to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeBooleanAttribute

        public void writeBooleanAttribute​(java.lang.String prefix,
                                          java.lang.String nsURI,
                                          java.lang.String localName,
                                          boolean b)
                                   throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write a boolean value to the output as attribute value. The lexical representation of content is defined by the XML Schema boolean data type.
        Specified by:
        writeBooleanAttribute in interface TypedXMLStreamWriter
        Parameters:
        prefix - The attribute's prefix. Null or "" if no prefix is to be used
        nsURI - The attribute's URI (can be either null or empty String for "no namespace")
        localName - The attribute's local name
        b - The boolean value to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeIntAttribute

        public void writeIntAttribute​(java.lang.String prefix,
                                      java.lang.String nsURI,
                                      java.lang.String localName,
                                      int value)
                               throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write an integer value to the output as attribute value. The lexical representation of content is defined by the XML Schema integer data type.
        Specified by:
        writeIntAttribute in interface TypedXMLStreamWriter
        Parameters:
        prefix - The attribute's prefix. Null or "" if no prefix is to be used
        nsURI - The attribute's URI (can be either null or empty String for "no namespace")
        localName - The attribute's local name
        value - The integer value to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeLongAttribute

        public void writeLongAttribute​(java.lang.String prefix,
                                       java.lang.String nsURI,
                                       java.lang.String localName,
                                       long value)
                                throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter
        Write an long value to the output as attribute value. The lexical representation of content is defined by the XML Schema long data type.
        Specified by:
        writeLongAttribute in interface TypedXMLStreamWriter
        Parameters:
        prefix - The attribute's prefix. Null or "" if no prefix is to be used
        nsURI - The attribute's URI (can be either null or empty String for "no namespace")
        localName - The attribute's local name
        value - The long value to write.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeFloatAttribute

        public void writeFloatAttribute​(java.lang.String prefix,
                                        java.lang.String nsURI,
                                        java.lang.String localName,
                                        float value)
                                 throws javax.xml.stream.XMLStreamException
        Specified by:
        writeFloatAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDoubleAttribute

        public void writeDoubleAttribute​(java.lang.String prefix,
                                         java.lang.String nsURI,
                                         java.lang.String localName,
                                         double value)
                                  throws javax.xml.stream.XMLStreamException
        Specified by:
        writeDoubleAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeIntegerAttribute

        public void writeIntegerAttribute​(java.lang.String prefix,
                                          java.lang.String nsURI,
                                          java.lang.String localName,
                                          java.math.BigInteger value)
                                   throws javax.xml.stream.XMLStreamException
        Specified by:
        writeIntegerAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDecimalAttribute

        public void writeDecimalAttribute​(java.lang.String prefix,
                                          java.lang.String nsURI,
                                          java.lang.String localName,
                                          java.math.BigDecimal value)
                                   throws javax.xml.stream.XMLStreamException
        Specified by:
        writeDecimalAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeQNameAttribute

        public void writeQNameAttribute​(java.lang.String prefix,
                                        java.lang.String nsURI,
                                        java.lang.String localName,
                                        javax.xml.namespace.QName name)
                                 throws javax.xml.stream.XMLStreamException
        Specified by:
        writeQNameAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeIntArrayAttribute

        public void writeIntArrayAttribute​(java.lang.String prefix,
                                           java.lang.String nsURI,
                                           java.lang.String localName,
                                           int[] value)
                                    throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter

        Write int array attribute. The lexical representation of a int array is defined by the following XML schema type:

            <xs:simpleType name="intArray">
               <xs:list itemType="xs:int"/>
            </xs:simpleType>
        whose lexical space is a list of space-separated ints.
        Specified by:
        writeIntArrayAttribute in interface TypedXMLStreamWriter
        Parameters:
        prefix - The attribute's prefix.
        nsURI - The attribute's URI.
        localName - The attribute's local name.
        value - The array from which to write the ints.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeLongArrayAttribute

        public void writeLongArrayAttribute​(java.lang.String prefix,
                                            java.lang.String nsURI,
                                            java.lang.String localName,
                                            long[] value)
                                     throws javax.xml.stream.XMLStreamException
        Specified by:
        writeLongArrayAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeFloatArrayAttribute

        public void writeFloatArrayAttribute​(java.lang.String prefix,
                                             java.lang.String nsURI,
                                             java.lang.String localName,
                                             float[] value)
                                      throws javax.xml.stream.XMLStreamException
        Specified by:
        writeFloatArrayAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDoubleArrayAttribute

        public void writeDoubleArrayAttribute​(java.lang.String prefix,
                                              java.lang.String nsURI,
                                              java.lang.String localName,
                                              double[] value)
                                       throws javax.xml.stream.XMLStreamException
        Specified by:
        writeDoubleArrayAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • writeBinaryAttribute

        public void writeBinaryAttribute​(java.lang.String prefix,
                                         java.lang.String nsURI,
                                         java.lang.String localName,
                                         byte[] value)
                                  throws javax.xml.stream.XMLStreamException
        Description copied from interface: TypedXMLStreamWriter

        Write a byte array attribute. The lexical representation of a byte array is defined by the XML Schema base64Binary data type.

        Note: base64 variant defaults to Base64Variants.MIME.

        Specified by:
        writeBinaryAttribute in interface TypedXMLStreamWriter
        Parameters:
        prefix - The attribute's prefix.
        nsURI - The attribute's URI.
        localName - The attribute's local name.
        value - The array from which to write the bytes.
        Throws:
        javax.xml.stream.XMLStreamException
      • writeBinaryAttribute

        public void writeBinaryAttribute​(Base64Variant v,
                                         java.lang.String prefix,
                                         java.lang.String nsURI,
                                         java.lang.String localName,
                                         byte[] value)
                                  throws javax.xml.stream.XMLStreamException
        Specified by:
        writeBinaryAttribute in interface TypedXMLStreamWriter
        Throws:
        javax.xml.stream.XMLStreamException
      • isPropertySupported

        public boolean isPropertySupported​(java.lang.String name)
        Description copied from interface: XMLStreamWriter2
        Method similar to XMLOutputFactory.isPropertySupported(java.lang.String), used to determine whether a property is supported by the Writer instance. This means that this method may return false for some properties that the output factory does support: specifically, it should only return true if the value is mutable on per-instance basis. False means that either the property is not recognized, or is not mutable via writer instance.
        Specified by:
        isPropertySupported in interface XMLStreamWriter2
      • setProperty

        public boolean setProperty​(java.lang.String name,
                                   java.lang.Object value)
        Description copied from interface: XMLStreamWriter2
        Method that can be used to set per-writer properties; a subset of properties one can set via matching XMLOutputFactory2 instance. Exactly which methods are mutable is implementation specific.
        Specified by:
        setProperty in interface XMLStreamWriter2
        Parameters:
        name - Name of the property to set
        value - Value to set property to.
        Returns:
        True, if the specified property was succesfully set to specified value; false if its value was not changed
      • getEncoding

        public java.lang.String getEncoding()
        Description copied from interface: XMLStreamWriter2
        Method that can be called to get information about encoding that this writer is using (or at least claims is using). That is, it returns name of encoding specified when (in order of priority):
        • Passed to one of factory methods of XMLOutputFactory
        • Passed to writeStartDocument method (explicitly or implicity; latter in cases where defaults are imposed by Stax specification)
        Specified by:
        getEncoding in interface XMLStreamWriter2
      • writeCData

        public void writeCData​(char[] text,
                               int start,
                               int len)
                        throws javax.xml.stream.XMLStreamException
        Specified by:
        writeCData in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeDTD

        public void writeDTD​(java.lang.String rootName,
                             java.lang.String systemId,
                             java.lang.String publicId,
                             java.lang.String internalSubset)
                      throws javax.xml.stream.XMLStreamException
        Specified by:
        writeDTD in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeFullEndElement

        public void writeFullEndElement()
                                 throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method similar to XMLStreamWriter.writeEndElement(), but that will always write the full end element, instead of empty element. This only matters for cases where the element itself has no content, and if writer is allowed to write empty elements when it encounters such start/end element write pairs.
        Specified by:
        writeFullEndElement in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeSpace

        public void writeSpace​(java.lang.String text)
                        throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that can be called to write whitespace-only content. If so, it is to be written as is (with no escaping), and does not contain non-whitespace characters (writer may validate this, and throw an exception if it does).

        This method is useful for things like outputting indentation.

        Specified by:
        writeSpace in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeSpace

        public void writeSpace​(char[] text,
                               int offset,
                               int length)
                        throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that can be called to write whitespace-only content. If so, it is to be written as is (with no escaping), and does not contain non-whitespace characters (writer may validate this, and throw an exception if it does).

        This method is useful for things like outputting indentation.

        Specified by:
        writeSpace in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeStartDocument

        public void writeStartDocument​(java.lang.String version,
                                       java.lang.String encoding,
                                       boolean standAlone)
                                throws javax.xml.stream.XMLStreamException
        Specified by:
        writeStartDocument in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeRaw

        public void writeRaw​(java.lang.String text)
                      throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that writes specified content as is, without encoding or deciphering it in any way. It will not update state of the writer (except by possibly flushing output of previous writes, like finishing a start element), nor be validated in any way. As such, care must be taken, if this method is used.

        Method is usually used when encapsulating output from another writer as a sub-tree, or when passing through XML fragments.

        NOTE: since text to be written may be anything, including markup, it can not be reliably validated. Because of this, validator(s) attached to the writer will NOT be informed about writes.

        Specified by:
        writeRaw in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeRaw

        public void writeRaw​(java.lang.String text,
                             int offset,
                             int len)
                      throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that writes specified content as is, without encoding or deciphering it in any way. It will not update state of the writer (except by possibly flushing output of previous writes, like finishing a start element), nor be validated in any way. As such, care must be taken, if this method is used.

        Method is usually used when encapsulating output from another writer as a sub-tree, or when passing through XML fragments.

        NOTE: since text to be written may be anything, including markup, it can not be reliably validated. Because of this, validator(s) attached to the writer will NOT be informed about writes.

        Specified by:
        writeRaw in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • writeRaw

        public void writeRaw​(char[] text,
                             int offset,
                             int length)
                      throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that writes specified content as is, without encoding or deciphering it in any way. It will not update state of the writer (except by possibly flushing output of previous writes, like finishing a start element), nor be validated in any way. As such, care must be taken, if this method is used.

        Method is usually used when encapsulating output from another writer as a sub-tree, or when passing through XML fragments.

        NOTE: since text to be written may be anything, including markup, it can not be reliably validated. Because of this, validator(s) attached to the writer will NOT be informed about writes.

        Specified by:
        writeRaw in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • copyEventFromReader

        public void copyEventFromReader​(XMLStreamReader2 sr,
                                        boolean preserveEventData)
                                 throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method that essentially copies event that the specified reader has just read. This can be both more convenient (no need to worry about details) and more efficient than separately calling access methods of the reader and write methods of the writer, since writer may know more about reader than the application (and may be able to use non-public methods)
        Specified by:
        copyEventFromReader in interface XMLStreamWriter2
        Parameters:
        sr - Reader to use for accessing event to copy
        preserveEventData - If true, writer is not allowed to change the state of the reader (so that all the data associated with the current event has to be preserved); if false, writer is allowed to use methods that may cause some data to be discarded. Setting this to false may improve the performance, since it may allow full no-copy streaming of data, especially textual contents.
        Throws:
        javax.xml.stream.XMLStreamException
      • closeCompletely

        public void closeCompletely()
                             throws javax.xml.stream.XMLStreamException
        Description copied from interface: XMLStreamWriter2
        Method similar to XMLStreamWriter.close(), except that this method also does close the underlying output destination (stream) if it has not yet been closed. It is specifically necessary to call this method if the parsing ends in an exception to ensure that the output destination does get properly closed, even if the stream writer would otherwise close it (as is the case for destinations it manages where calling application has no access)
        Specified by:
        closeCompletely in interface XMLStreamWriter2
        Throws:
        javax.xml.stream.XMLStreamException
      • validateAgainst

        public XMLValidator validateAgainst​(XMLValidationSchema schema)
                                     throws javax.xml.stream.XMLStreamException
        Description copied from interface: Validatable
        Method that will construct a XMLValidator instance from the given schema (unless a validator for that schema has already been added), initialize it if necessary, and make validatable object (reader, writer) call appropriate validation methods from this point on until the end of the document (that is, it's not scoped with sub-trees), or until validator is removed by an explicit call to Validatable.stopValidatingAgainst(org.codehaus.stax2.validation.XMLValidationSchema).

        Note that while this method can be called at any point in output processing, validator instances are not required to be able to handle addition at other points than right before outputting the root element.

        Specified by:
        validateAgainst in interface Validatable
        Returns:
        Validator instance constructed, if validator was added, or null if a validator for the schema has already been constructed.
        Throws:
        javax.xml.stream.XMLStreamException
      • stopValidatingAgainst

        public XMLValidator stopValidatingAgainst​(XMLValidator validator)
                                           throws javax.xml.stream.XMLStreamException
        Description copied from interface: Validatable
        Method that can be called by application to stop validating output using specified validator. The validator passed should be an earlier return value for a call to Validatable.validateAgainst(org.codehaus.stax2.validation.XMLValidationSchema).

        Note: the specified validator is compared for identity with validators in use, not for equality.

        Specified by:
        stopValidatingAgainst in interface Validatable
        Returns:
        Validator instance found (ie. argument validator) if it was being used for validating current document; null if not.
        Throws:
        javax.xml.stream.XMLStreamException
      • setValidationProblemHandler

        public ValidationProblemHandler setValidationProblemHandler​(ValidationProblemHandler h)
        Description copied from interface: Validatable
        Method that application can call to define a custom handler for validation problems encountered during validation process.
        Specified by:
        setValidationProblemHandler in interface Validatable
        Parameters:
        h - Handler to install, if non null; if null, indicates that the default (implementation-specific) handling should be used
        Returns:
        Previously set validation problem handler, if any; null if none was set
      • copyStartElement

        protected void copyStartElement​(javax.xml.stream.XMLStreamReader sr)
                                 throws javax.xml.stream.XMLStreamException
        Throws:
        javax.xml.stream.XMLStreamException
      • serializeQNameValue

        protected java.lang.String serializeQNameValue​(javax.xml.namespace.QName name)
                                                throws javax.xml.stream.XMLStreamException
        Method called to serialize given qualified name into valid String serialization, taking into account existing namespace bindings.
        Throws:
        javax.xml.stream.XMLStreamException