com.ctc.wstx.sw
Class RepairingNsStreamWriter

java.lang.Object
  extended by com.ctc.wstx.sw.BaseStreamWriter
      extended by com.ctc.wstx.sw.BaseNsStreamWriter
          extended by com.ctc.wstx.sw.RepairingNsStreamWriter
All Implemented Interfaces:
OutputConfigFlags, javax.xml.stream.XMLStreamConstants, javax.xml.stream.XMLStreamWriter, Validatable, ValidationContext, XMLStreamWriter2

public class RepairingNsStreamWriter
extends BaseNsStreamWriter

Namespace-aware implementation of XMLStreamWriter, that does namespace repairing, ie resolves possible conflicts between prefixes (add new bindings as necessary), as well as automatically creates namespace declarations as necessary.


Field Summary
 
Fields inherited from class com.ctc.wstx.sw.BaseNsStreamWriter
ERR_NSDECL_WRONG_STATE, mAutomaticNS, mCurrElem, mOutputElemPool, mPoolSize, mRootNsContext, sPrefixXml, sPrefixXmlns
 
Fields inherited from class com.ctc.wstx.sw.BaseStreamWriter
ATTR_MIN_ARRAYCOPY, CHAR_SPACE, DEFAULT_COPYBUFFER_LEN, mAnyOutput, mAttrCollector, mCfgAutomaticEmptyElems, mCfgCDataAsText, mCfgCopyDefaultAttrs, mCheckAttrs, mCheckStructure, mConfig, mCopyBuffer, mDtdRootElem, mEmptyElement, mEncoding, MIN_ARRAYCOPY, mInputElemStack, mLastReader, mLastReaderImpl, mStartElementOpen, mState, mValidator, mVldContent, mVldProbHandler, mWriter, mXml11, NO_NS_URI, NO_PREFIX, STATE_EPILOG, STATE_PROLOG, STATE_TREE
 
Fields inherited from interface javax.xml.stream.XMLStreamConstants
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
 
Fields inherited from interface com.ctc.wstx.cfg.OutputConfigFlags
CFG_AUTOMATIC_EMPTY_ELEMS, CFG_AUTOMATIC_NS, CFG_COPY_DEFAULT_ATTRS, CFG_ENABLE_NS, CFG_ESCAPE_CR, CFG_FIX_CONTENT, CFG_OUTPUT_CDATA_AS_TEXT, CFG_VALIDATE_ATTR, CFG_VALIDATE_CONTENT, CFG_VALIDATE_NAMES, CFG_VALIDATE_STRUCTURE
 
Constructor Summary
RepairingNsStreamWriter(XmlWriter xw, java.lang.String enc, WriterConfig cfg)
           
 
Method Summary
 void copyStartElement(InputElementStack elemStack, AttributeCollector attrCollector)
          Element copier method implementation suitable for use with namespace-aware writers in repairing mode.
 void doSetPrefix(java.lang.String prefix, java.lang.String uri)
           
protected  java.lang.String findElemPrefix(java.lang.String nsURI, SimpleOutputElement elem)
          Method called to find an existing prefix for the given namespace, if any exists in the scope.
protected  java.lang.String findOrCreateAttrPrefix(java.lang.String suggPrefix, java.lang.String nsURI, SimpleOutputElement elem)
          Method called to somehow find a prefix for given namespace, to be used for a new start element; either use an existing one, or generate a new one.
protected  java.lang.String generateElemPrefix(java.lang.String suggPrefix, java.lang.String nsURI, SimpleOutputElement elem)
          Method called after findElemPrefix(java.lang.String, com.ctc.wstx.sw.SimpleOutputElement) has returned null, to create and bind a namespace mapping for specified namespace.
 void setDefaultNamespace(java.lang.String uri)
          With repairing writer, this is only taken as a suggestion as to how the caller would prefer prefixes to be mapped.
 void writeAttribute(java.lang.String nsURI, java.lang.String localName, java.lang.String value)
           
 void writeAttribute(java.lang.String prefix, java.lang.String nsURI, java.lang.String localName, java.lang.String value)
           
 void writeDefaultNamespace(java.lang.String nsURI)
           
 void writeNamespace(java.lang.String prefix, java.lang.String nsURI)
           
 void writeStartElement(javax.xml.stream.events.StartElement elem)
          Convenience method needed by WstxEventWriter, to use when writing a start element, and possibly its attributes and namespace declarations.
protected  void writeStartOrEmpty(java.lang.String localName, java.lang.String nsURI)
           
protected  void writeStartOrEmpty(java.lang.String suggPrefix, java.lang.String localName, java.lang.String nsURI)
           
 
Methods inherited from class com.ctc.wstx.sw.BaseNsStreamWriter
checkStartElement, closeStartElement, doWriteAttr, doWriteDefaultNs, doWriteEndTag, doWriteNamespace, doWriteStartTag, doWriteStartTag, getCurrentElementName, getNamespaceContext, getNamespaceURI, getPrefix, getTopElementDesc, setNamespaceContext, setPrefix, writeAttribute, writeEmptyElement, writeEmptyElement, writeEmptyElement, writeEndElement, writeEndElement, writeFullEndElement, writeStartElement, writeStartElement, writeStartElement
 
Methods inherited from class com.ctc.wstx.sw.BaseStreamWriter
addDefaultAttribute, close, copyEventFromReader, doReportProblem, doWriteStartDocument, findAttributeIndex, flush, getAttributeCount, getAttributeLocalName, getAttributeNamespace, getAttributePrefix, getAttributeValue, getAttributeValue, getBaseUri, getEncoding, getLocation, getProperty, getValidationLocation, getXmlVersion, inPrologOrEpilog, isNotationDeclared, isPropertySupported, isUnparsedEntityDeclared, isValidating, reportIllegalArg, reportIllegalMethod, reportInvalidContent, reportNwfAttr, reportNwfAttr, reportNwfContent, reportNwfContent, reportNwfStructure, reportNwfStructure, reportProblem, reportValidationProblem, reportValidationProblem, reportValidationProblem, reportValidationProblem, reportValidationProblem, reportValidationProblem, setProperty, setValidationProblemHandler, stopValidatingAgainst, stopValidatingAgainst, throwFromIOE, throwOutputError, throwOutputError, toString, validateAgainst, verifyRootElement, verifyWriteCData, verifyWriteDTD, wrapAsRawWriter, wrapAsTextWriter, writeCData, writeCData, writeCharacters, writeCharacters, writeCharacters, writeComment, writeDTD, writeDTD, writeDTD, writeEndDocument, writeEntityRef, writeProcessingInstruction, writeProcessingInstruction, writeRaw, writeRaw, writeRaw, writeStartDocument, writeStartDocument, writeStartDocument, writeStartDocument
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RepairingNsStreamWriter

public RepairingNsStreamWriter(XmlWriter xw,
                               java.lang.String enc,
                               WriterConfig cfg)
Method Detail

writeAttribute

public void writeAttribute(java.lang.String nsURI,
                           java.lang.String localName,
                           java.lang.String value)
                    throws javax.xml.stream.XMLStreamException
Specified by:
writeAttribute in interface javax.xml.stream.XMLStreamWriter
Specified by:
writeAttribute in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeAttribute

public void writeAttribute(java.lang.String prefix,
                           java.lang.String nsURI,
                           java.lang.String localName,
                           java.lang.String value)
                    throws javax.xml.stream.XMLStreamException
Specified by:
writeAttribute in interface javax.xml.stream.XMLStreamWriter
Specified by:
writeAttribute in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeDefaultNamespace

public void writeDefaultNamespace(java.lang.String nsURI)
                           throws javax.xml.stream.XMLStreamException
Specified by:
writeDefaultNamespace in interface javax.xml.stream.XMLStreamWriter
Specified by:
writeDefaultNamespace in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeNamespace

public void writeNamespace(java.lang.String prefix,
                           java.lang.String nsURI)
                    throws javax.xml.stream.XMLStreamException
Specified by:
writeNamespace in interface javax.xml.stream.XMLStreamWriter
Specified by:
writeNamespace in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

setDefaultNamespace

public void setDefaultNamespace(java.lang.String uri)
                         throws javax.xml.stream.XMLStreamException
With repairing writer, this is only taken as a suggestion as to how the caller would prefer prefixes to be mapped.

Specified by:
setDefaultNamespace in interface javax.xml.stream.XMLStreamWriter
Specified by:
setDefaultNamespace in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

doSetPrefix

public void doSetPrefix(java.lang.String prefix,
                        java.lang.String uri)
                 throws javax.xml.stream.XMLStreamException
Specified by:
doSetPrefix in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeStartElement

public void writeStartElement(javax.xml.stream.events.StartElement elem)
                       throws javax.xml.stream.XMLStreamException
Description copied from class: BaseStreamWriter
Convenience method needed by WstxEventWriter, to use when writing a start element, and possibly its attributes and namespace declarations.

Specified by:
writeStartElement in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeStartOrEmpty

protected void writeStartOrEmpty(java.lang.String localName,
                                 java.lang.String nsURI)
                          throws javax.xml.stream.XMLStreamException
Specified by:
writeStartOrEmpty in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

writeStartOrEmpty

protected void writeStartOrEmpty(java.lang.String suggPrefix,
                                 java.lang.String localName,
                                 java.lang.String nsURI)
                          throws javax.xml.stream.XMLStreamException
Specified by:
writeStartOrEmpty in class BaseNsStreamWriter
Throws:
javax.xml.stream.XMLStreamException

copyStartElement

public final void copyStartElement(InputElementStack elemStack,
                                   AttributeCollector attrCollector)
                            throws java.io.IOException,
                                   javax.xml.stream.XMLStreamException
Element copier method implementation suitable for use with namespace-aware writers in repairing mode. The trickiest thing is having to properly order calls to setPrefix, writeNamespace and writeStartElement; the order writers expect is bit different from the order in which element information is passed in.

Specified by:
copyStartElement in class BaseStreamWriter
Throws:
java.io.IOException
javax.xml.stream.XMLStreamException

findElemPrefix

protected final java.lang.String findElemPrefix(java.lang.String nsURI,
                                                SimpleOutputElement elem)
                                         throws javax.xml.stream.XMLStreamException
Method called to find an existing prefix for the given namespace, if any exists in the scope. If one is found, it's returned (including "" for the current default namespace); if not, null is returned.

Parameters:
nsURI - URI of namespace for which we need a prefix
Throws:
javax.xml.stream.XMLStreamException

generateElemPrefix

protected final java.lang.String generateElemPrefix(java.lang.String suggPrefix,
                                                    java.lang.String nsURI,
                                                    SimpleOutputElement elem)
                                             throws javax.xml.stream.XMLStreamException
Method called after findElemPrefix(java.lang.String, com.ctc.wstx.sw.SimpleOutputElement) has returned null, to create and bind a namespace mapping for specified namespace.

Throws:
javax.xml.stream.XMLStreamException

findOrCreateAttrPrefix

protected final java.lang.String findOrCreateAttrPrefix(java.lang.String suggPrefix,
                                                        java.lang.String nsURI,
                                                        SimpleOutputElement elem)
                                                 throws javax.xml.stream.XMLStreamException
Method called to somehow find a prefix for given namespace, to be used for a new start element; either use an existing one, or generate a new one. If a new mapping needs to be generated, it will also be automatically bound, and necessary namespace declaration output.

Parameters:
suggPrefix - Suggested prefix to bind, if any; may be null to indicate "no preference"
nsURI - URI of namespace for which we need a prefix
elem - Currently open start element, on which the attribute will be added.
Throws:
javax.xml.stream.XMLStreamException