Package com.ctc.wstx.sw
Class RepairingNsStreamWriter
- java.lang.Object
-
- org.codehaus.stax2.ri.Stax2WriterImpl
-
- com.ctc.wstx.sw.BaseStreamWriter
-
- com.ctc.wstx.sw.TypedStreamWriter
-
- com.ctc.wstx.sw.BaseNsStreamWriter
-
- com.ctc.wstx.sw.RepairingNsStreamWriter
-
- All Implemented Interfaces:
OutputConfigFlags,javax.xml.stream.XMLStreamConstants,javax.xml.stream.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 ofXMLStreamWriter, 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 Modifier and Type Field Description protected java.lang.StringmAutomaticNsPrefixprotected int[]mAutoNsSeqSequence number used for generating dynamic namespace prefixes.protected java.lang.StringmSuggestedDefNsprotected java.util.HashMap<java.lang.String,java.lang.String>mSuggestedPrefixesMap 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, MAX_POOL_SIZE, 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_USE_DOUBLE_QUOTES_IN_XML_DECL, CFG_VALIDATE_ATTR, CFG_VALIDATE_CONTENT, CFG_VALIDATE_NAMES, CFG_VALIDATE_STRUCTURE
-
-
Constructor Summary
Constructors Constructor Description RepairingNsStreamWriter(XmlWriter xw, java.lang.String enc, WriterConfig cfg)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcopyStartElement(InputElementStack elemStack, AttributeCollector ac)Element copier method implementation suitable for use with namespace-aware writers in repairing mode.voiddoSetPrefix(java.lang.String prefix, java.lang.String uri)protected java.lang.StringfindElemPrefix(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.StringfindOrCreateAttrPrefix(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.StringgenerateElemPrefix(java.lang.String suggPrefix, java.lang.String nsURI, SimpleOutputElement elem)Method called afterfindElemPrefix(java.lang.String, com.ctc.wstx.sw.SimpleOutputElement)has returned null, to create and bind a namespace mapping for specified namespace.voidsetDefaultNamespace(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.private java.lang.StringvalidateElemPrefix(java.lang.String prefix, java.lang.String nsURI, SimpleOutputElement elem)java.lang.StringvalidateQNamePrefix(javax.xml.namespace.QName name)Method called before writing a QName via Typed Access API.voidwriteAttribute(java.lang.String nsURI, java.lang.String localName, java.lang.String value)voidwriteAttribute(java.lang.String prefix, java.lang.String nsURI, java.lang.String localName, java.lang.String value)voidwriteDefaultNamespace(java.lang.String nsURI)voidwriteNamespace(java.lang.String prefix, java.lang.String nsURI)voidwriteStartElement(javax.xml.stream.events.StartElement elem)Convenience method needed byXMLEventWriterimplementation, to use when writing a start element, and possibly its attributes and namespace declarations.protected voidwriteStartOrEmpty(java.lang.String localName, java.lang.String nsURI)protected voidwriteStartOrEmpty(java.lang.String suggPrefix, java.lang.String localName, java.lang.String nsURI)protected voidwriteTypedAttribute(java.lang.String prefix, java.lang.String nsURI, java.lang.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
-
-
-
-
Field Detail
-
mAutomaticNsPrefix
protected final java.lang.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 java.lang.String mSuggestedDefNs
-
mSuggestedPrefixes
protected java.util.HashMap<java.lang.String,java.lang.String> mSuggestedPrefixes
Map that contains URI-to-prefix entries that point out suggested prefixes for URIs. These are populated by calls toBaseNsStreamWriter.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, 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:
writeAttributein interfacejavax.xml.stream.XMLStreamWriter- Specified by:
writeAttributein classBaseNsStreamWriter- 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:
writeAttributein interfacejavax.xml.stream.XMLStreamWriter- Specified by:
writeAttributein classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
writeDefaultNamespace
public void writeDefaultNamespace(java.lang.String nsURI) throws javax.xml.stream.XMLStreamException- Specified by:
writeDefaultNamespacein interfacejavax.xml.stream.XMLStreamWriter- Specified by:
writeDefaultNamespacein classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
writeNamespace
public void writeNamespace(java.lang.String prefix, java.lang.String nsURI) throws javax.xml.stream.XMLStreamException- Specified by:
writeNamespacein interfacejavax.xml.stream.XMLStreamWriter- Specified by:
writeNamespacein classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
setDefaultNamespace
public void setDefaultNamespace(java.lang.String uri) throws javax.xml.stream.XMLStreamExceptionWith repairing writer, this is only taken as a suggestion as to how the caller would prefer prefixes to be mapped.- Specified by:
setDefaultNamespacein interfacejavax.xml.stream.XMLStreamWriter- Specified by:
setDefaultNamespacein classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
doSetPrefix
public void doSetPrefix(java.lang.String prefix, java.lang.String uri) throws javax.xml.stream.XMLStreamException- Specified by:
doSetPrefixin classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
writeStartElement
public void writeStartElement(javax.xml.stream.events.StartElement elem) throws javax.xml.stream.XMLStreamExceptionDescription copied from class:BaseStreamWriterConvenience method needed byXMLEventWriterimplementation, to use when writing a start element, and possibly its attributes and namespace declarations.- Specified by:
writeStartElementin classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
writeTypedAttribute
protected void writeTypedAttribute(java.lang.String prefix, java.lang.String nsURI, java.lang.String localName, org.codehaus.stax2.ri.typed.AsciiValueEncoder enc) throws javax.xml.stream.XMLStreamExceptionDescription copied from class:TypedStreamWriterMethod that will write attribute with value that is known not to require additional escaping.- Overrides:
writeTypedAttributein classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
writeStartOrEmpty
protected void writeStartOrEmpty(java.lang.String localName, java.lang.String nsURI) throws javax.xml.stream.XMLStreamException- Specified by:
writeStartOrEmptyin classBaseNsStreamWriter- 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:
writeStartOrEmptyin classBaseNsStreamWriter- Throws:
javax.xml.stream.XMLStreamException
-
copyStartElement
public final void copyStartElement(InputElementStack elemStack, AttributeCollector ac) 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 tosetPrefix,writeNamespaceandwriteStartElement; the order writers expect is bit different from the order in which element information is passed in.- Specified by:
copyStartElementin classBaseStreamWriter- Throws:
java.io.IOExceptionjavax.xml.stream.XMLStreamException
-
validateQNamePrefix
public java.lang.String validateQNamePrefix(javax.xml.namespace.QName name) throws javax.xml.stream.XMLStreamExceptionDescription copied from class:BaseStreamWriterMethod 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:
validateQNamePrefixin classBaseStreamWriter- Returns:
- Prefix to use when writing out given QName as an element or attribute value
- Throws:
javax.xml.stream.XMLStreamException
-
findElemPrefix
protected final java.lang.String findElemPrefix(java.lang.String nsURI, SimpleOutputElement elem) throws javax.xml.stream.XMLStreamExceptionMethod 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.XMLStreamExceptionMethod called afterfindElemPrefix(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.XMLStreamExceptionMethod 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 prefixelem- Currently open start element, on which the attribute will be added.- Throws:
javax.xml.stream.XMLStreamException
-
validateElemPrefix
private final java.lang.String validateElemPrefix(java.lang.String prefix, java.lang.String nsURI, SimpleOutputElement elem) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
-