com.ctc.wstx.sw
Class RepairingNsStreamWriter

java.lang.Object
  extended by org.codehaus.stax2.ri.Stax2WriterImpl
      extended by com.ctc.wstx.sw.BaseStreamWriter
          extended by com.ctc.wstx.sw.TypedStreamWriter
              extended by com.ctc.wstx.sw.BaseNsStreamWriter
                  extended by com.ctc.wstx.sw.RepairingNsStreamWriter
All Implemented Interfaces:
OutputConfigFlags, XMLStreamConstants, XMLStreamWriter, org.codehaus.stax2.typed.TypedXMLStreamWriter, org.codehaus.stax2.validation.Validatable, org.codehaus.stax2.validation.ValidationContext, org.codehaus.stax2.XMLStreamWriter2

public final 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
protected  String mAutomaticNsPrefix
           
protected  int[] mAutoNsSeq
          Sequence number used for generating dynamic namespace prefixes.
protected  String mSuggestedDefNs
           
protected  HashMap mSuggestedPrefixes
          Map that contains URI-to-prefix entries that point out suggested prefixes for URIs.
 
Fields inherited from class com.ctc.wstx.sw.BaseNsStreamWriter
ERR_NSDECL_WRONG_STATE, mAutomaticNS, mCurrElem, mEmptyElementHandler, mOutputElemPool, mPoolSize, mRootNsContext, sPrefixXml, sPrefixXmlns
 
Fields inherited from class com.ctc.wstx.sw.TypedStreamWriter
mValueEncoderFactory
 
Fields inherited from class com.ctc.wstx.sw.BaseStreamWriter
ATTR_MIN_ARRAYCOPY, CHAR_SPACE, DEFAULT_COPYBUFFER_LEN, mAnyOutput, mCfgAutomaticEmptyElems, mCfgCDataAsText, mCfgCopyDefaultAttrs, mCheckAttrs, mCheckStructure, mConfig, mCopyBuffer, mDtdRootElem, mEmptyElement, mEncoding, MIN_ARRAYCOPY, mReturnNullForDefaultNamespace, mStartElementOpen, mState, mValidator, mVldContent, mVldProbHandler, mWriter, mXml11, STATE_EPILOG, STATE_PROLOG, STATE_TREE
 
Fields inherited from interface com.ctc.wstx.cfg.OutputConfigFlags
CFG_ADD_SPACE_AFTER_EMPTY_ELEM, CFG_AUTO_CLOSE_OUTPUT, CFG_AUTOMATIC_EMPTY_ELEMENTS, CFG_AUTOMATIC_END_ELEMENTS, 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
 
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
 
Constructor Summary
RepairingNsStreamWriter(XmlWriter xw, String enc, WriterConfig cfg)
           
 
Method Summary
 void copyStartElement(InputElementStack elemStack, AttributeCollector ac)
          Element copier method implementation suitable for use with namespace-aware writers in repairing mode.
 void doSetPrefix(String prefix, String uri)
           
protected  String findElemPrefix(String nsURI, SimpleOutputElement elem)
          Method called to find an existing prefix for the given namespace, if any exists in the scope.
protected  String findOrCreateAttrPrefix(String suggPrefix, 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  String generateElemPrefix(String suggPrefix, 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(String uri)
          With repairing writer, this is only taken as a suggestion as to how the caller would prefer prefixes to be mapped.
 String validateQNamePrefix(QName name)
          Method called before writing a QName via Typed Access API.
 void writeAttribute(String nsURI, String localName, String value)
           
 void writeAttribute(String prefix, String nsURI, String localName, String value)
           
 void writeDefaultNamespace(String nsURI)
           
 void writeNamespace(String prefix, String nsURI)
           
 void writeStartElement(StartElement elem)
          Convenience method needed by XMLEventWriter implementation, to use when writing a start element, and possibly its attributes and namespace declarations.
protected  void writeStartOrEmpty(String localName, String nsURI)
           
protected  void writeStartOrEmpty(String suggPrefix, String localName, String nsURI)
           
protected  void writeTypedAttribute(String prefix, String nsURI, String localName, org.codehaus.stax2.ri.typed.AsciiValueEncoder enc)
          Method that will write attribute with value that is known not to require additional escaping.
 
Methods inherited from class com.ctc.wstx.sw.BaseNsStreamWriter
checkStartElement, closeStartElement, doWriteAttr, 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.TypedStreamWriter
valueEncoderFactory, writeBinary, writeBinary, writeBinaryAttribute, writeBinaryAttribute, writeBoolean, writeBooleanAttribute, writeDecimal, writeDecimalAttribute, writeDouble, writeDoubleArray, writeDoubleArrayAttribute, writeDoubleAttribute, writeFloat, writeFloatArray, writeFloatArrayAttribute, writeFloatAttribute, writeInt, writeIntArray, writeIntArrayAttribute, writeIntAttribute, writeInteger, writeIntegerAttribute, writeLong, writeLongArray, writeLongArrayAttribute, writeLongAttribute, writeQName, writeQNameAttribute, writeTypedElement
 
Methods inherited from class com.ctc.wstx.sw.BaseStreamWriter
addDefaultAttribute, close, closeCompletely, copyEventFromReader, doReportProblem, doReportProblem, doWriteStartDocument, findAttributeIndex, flush, getAttributeCount, getAttributeLocalName, getAttributeNamespace, getAttributePrefix, getAttributeType, getAttributeValue, getAttributeValue, getBaseUri, getCopyBuffer, getCopyBuffer, 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, writeSpace, writeSpace, writeStartDocument, writeStartDocument, writeStartDocument, writeStartDocument
 
Methods inherited from class org.codehaus.stax2.ri.Stax2WriterImpl
copyStartElement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

mAutomaticNsPrefix

protected final String mAutomaticNsPrefix

mAutoNsSeq

protected int[] mAutoNsSeq
Sequence number used for generating dynamic namespace prefixes. Array used as a wrapper to allow for easy sharing of the sequence number.


mSuggestedDefNs

protected String mSuggestedDefNs

mSuggestedPrefixes

protected HashMap mSuggestedPrefixes
Map that contains URI-to-prefix entries that point out suggested prefixes for URIs. These are populated by calls to BaseNsStreamWriter.setPrefix(java.lang.String, java.lang.String), and they are only used as hints for binding; if there are conflicts, repairing writer can just use some other prefix.

Constructor Detail

RepairingNsStreamWriter

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

writeAttribute

public void writeAttribute(String nsURI,
                           String localName,
                           String value)
                    throws XMLStreamException
Specified by:
writeAttribute in interface XMLStreamWriter
Specified by:
writeAttribute in class BaseNsStreamWriter
Throws:
XMLStreamException

writeAttribute

public void writeAttribute(String prefix,
                           String nsURI,
                           String localName,
                           String value)
                    throws XMLStreamException
Specified by:
writeAttribute in interface XMLStreamWriter
Specified by:
writeAttribute in class BaseNsStreamWriter
Throws:
XMLStreamException

writeDefaultNamespace

public void writeDefaultNamespace(String nsURI)
                           throws XMLStreamException
Specified by:
writeDefaultNamespace in interface XMLStreamWriter
Specified by:
writeDefaultNamespace in class BaseNsStreamWriter
Throws:
XMLStreamException

writeNamespace

public void writeNamespace(String prefix,
                           String nsURI)
                    throws XMLStreamException
Specified by:
writeNamespace in interface XMLStreamWriter
Specified by:
writeNamespace in class BaseNsStreamWriter
Throws:
XMLStreamException

setDefaultNamespace

public void setDefaultNamespace(String uri)
                         throws 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 XMLStreamWriter
Specified by:
setDefaultNamespace in class BaseNsStreamWriter
Throws:
XMLStreamException

doSetPrefix

public void doSetPrefix(String prefix,
                        String uri)
                 throws XMLStreamException
Specified by:
doSetPrefix in class BaseNsStreamWriter
Throws:
XMLStreamException

writeStartElement

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

Specified by:
writeStartElement in class BaseNsStreamWriter
Throws:
XMLStreamException

writeTypedAttribute

protected void writeTypedAttribute(String prefix,
                                   String nsURI,
                                   String localName,
                                   org.codehaus.stax2.ri.typed.AsciiValueEncoder enc)
                            throws XMLStreamException
Description copied from class: TypedStreamWriter
Method that will write attribute with value that is known not to require additional escaping.

Overrides:
writeTypedAttribute in class BaseNsStreamWriter
Throws:
XMLStreamException

writeStartOrEmpty

protected void writeStartOrEmpty(String localName,
                                 String nsURI)
                          throws XMLStreamException
Specified by:
writeStartOrEmpty in class BaseNsStreamWriter
Throws:
XMLStreamException

writeStartOrEmpty

protected void writeStartOrEmpty(String suggPrefix,
                                 String localName,
                                 String nsURI)
                          throws XMLStreamException
Specified by:
writeStartOrEmpty in class BaseNsStreamWriter
Throws:
XMLStreamException

copyStartElement

public final void copyStartElement(InputElementStack elemStack,
                                   AttributeCollector ac)
                            throws IOException,
                                   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:
IOException
XMLStreamException

validateQNamePrefix

public String validateQNamePrefix(QName name)
                           throws XMLStreamException
Description copied from class: BaseStreamWriter
Method called before writing a QName via Typed Access API. In namespace-repairing mode it should take appropriate actions to ensure that the given namespace URI is bound to a namespace and return whatever it maps to. In non-repairing work no additional work is to be done and methods

Specified by:
validateQNamePrefix in class BaseStreamWriter
Returns:
Prefix to use when writing out given QName as an element or attribute value
Throws:
XMLStreamException

findElemPrefix

protected final String findElemPrefix(String nsURI,
                                      SimpleOutputElement elem)
                               throws 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:
XMLStreamException

generateElemPrefix

protected final String generateElemPrefix(String suggPrefix,
                                          String nsURI,
                                          SimpleOutputElement elem)
                                   throws 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:
XMLStreamException

findOrCreateAttrPrefix

protected final String findOrCreateAttrPrefix(String suggPrefix,
                                              String nsURI,
                                              SimpleOutputElement elem)
                                       throws 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:
XMLStreamException


Copyright © 2011 Codehaus. All Rights Reserved.