Package com.ctc.wstx.sr
Class InputElementStack
- java.lang.Object
-
- com.ctc.wstx.sr.InputElementStack
-
- All Implemented Interfaces:
javax.xml.namespace.NamespaceContext,org.codehaus.stax2.AttributeInfo,org.codehaus.stax2.validation.ValidationContext
public final class InputElementStack extends java.lang.Object implements org.codehaus.stax2.AttributeInfo, javax.xml.namespace.NamespaceContext, org.codehaus.stax2.validation.ValidationContextShared base class that defines API stream reader uses to communicate with the element stack implementation, independent of whether it's operating in namespace-aware or non-namespace modes. Element stack class is used for storing nesting information about open elements, and for namespace-aware mode, also information about namespaces active (including default namespace), during parsing of XML input.This class also implements
NamespaceContext, since it has all the information necessary, so parser can just return element stack instance as necesary.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static intID_ATTR_NONEprotected AttributeCollectormAttrCollectorprotected ReaderConfigmConfigprotected ElementmCurrElementCurrently open element, if any; null outside root element.protected intmDepthprotected ElementmFreeElementprotected intmIdAttrIndexIndex of the attribute with type of ID, if known (most likely due to Xml:id support); -1 if not available, or no ID attribute for current element.protected java.lang.StringmLastLocalNameprotected javax.xml.namespace.QNamemLastNameprotected BaseNsContextmLastNsContextLast potentially shareable NamespaceContext created by this stack.protected java.lang.StringmLastNsURIprotected java.lang.StringmLastPrefixprotected booleanmMayHaveNsDefaultsprotected StringVectormNamespacesVector that contains all currently active namespaces; one String for prefix, another for matching URI.protected booleanmNsAwareprotected NsDefaultProvidermNsDefaultProviderObject that will need to be consulted about namespace bindings, since it has some knowledge about default namespace declarations (has default attribute value expansion).protected InputProblemReportermReporterprotected longmTotalElementsprotected org.codehaus.stax2.validation.XMLValidatormValidatorOptional validator object that will get called if set, and that can validate xml content.
-
Constructor Summary
Constructors Modifier Constructor Description protectedInputElementStack(ReaderConfig cfg, boolean nsAware)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intaddDefaultAttribute(java.lang.String localName, java.lang.String uri, java.lang.String prefix, java.lang.String value)Method called by actual validator instances when attributes with default values have no explicit values for the element; if so, default value needs to be added as if it was parsed from the element.voidaddNsBinding(java.lang.String prefix, java.lang.String uri)Callback method called by the namespace default provider.protected org.codehaus.stax2.validation.XMLValidatoraddValidator(org.codehaus.stax2.validation.XMLValidator vld)protected voidconnectReporter(InputProblemReporter rep)BaseNsContextcreateNonTransientNsContext(javax.xml.stream.Location loc)Method called to construct a non-transient NamespaceContext instance; generally needed when creating events to return from event-based iterators.intfindAttributeIndex(java.lang.String nsURI, java.lang.String localName)AttributeCollectorgetAttrCollector()Method called byBasicStreamReader, to retrieve the attribute collector it needs for some direct access.intgetAttributeCount()java.lang.StringgetAttributeLocalName(int index)java.lang.StringgetAttributeNamespace(int index)java.lang.StringgetAttributePrefix(int index)java.lang.StringgetAttributeType(int index)java.lang.StringgetAttributeValue(int index)java.lang.StringgetAttributeValue(java.lang.String nsURI, java.lang.String localName)java.lang.StringgetBaseUri()javax.xml.namespace.QNamegetCurrentElementName()intgetCurrentNsCount()java.lang.StringgetDefaultNsURI()intgetDepth()intgetIdAttributeIndex()Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.java.lang.StringgetLocalName()java.lang.StringgetLocalNsPrefix(int index)java.lang.StringgetLocalNsURI(int index)java.lang.StringgetNamespaceURI(java.lang.String prefix)intgetNotationAttributeIndex()Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.java.lang.StringgetNsURI()java.lang.StringgetPrefix()java.lang.StringgetPrefix(java.lang.String nsURI)java.util.Iterator<java.lang.String>getPrefixes(java.lang.String nsURI)java.lang.StringgetTopElementDesc()intgetTotalNsCount()javax.xml.stream.LocationgetValidationLocation()java.lang.StringgetXmlVersion()booleanisEmpty()booleanisNamespaceAware()booleanisNotationDeclared(java.lang.String name)booleanisPrefixLocallyDeclared(java.lang.String internedPrefix)booleanisUnparsedEntityDeclared(java.lang.String name)booleanmatches(java.lang.String prefix, java.lang.String localName)booleanpop()Method called by the stream reader to remove the topmost (start) element from the stack; called when an end element is encountered during parsing.voidpush(java.lang.String prefix, java.lang.String localName)Method called by the stream reader to add new (start) element into the stack in namespace-aware mode; called when a start element is encountered during parsing, but only in ns-aware mode.protected booleanreallyValidating()This is a method called by the reader to ensure that we have at least one 'real' validator.voidreportProblem(org.codehaus.stax2.validation.XMLValidationProblem problem)intresolveAndValidateElement()Method called to resolve element and attribute namespaces (in namespace-aware mode), and do optional validation using pluggable validator object.protected voidsetAutomaticDTDValidator(org.codehaus.stax2.validation.XMLValidator validator, NsDefaultProvider nsDefs)Method called to connect the automatically handled DTD validator (one detected from DOCTYPE, loaded and completely handled by the stream reader without application calling validation methods).org.codehaus.stax2.validation.XMLValidatorstopValidatingAgainst(org.codehaus.stax2.validation.XMLValidationSchema schema)org.codehaus.stax2.validation.XMLValidatorstopValidatingAgainst(org.codehaus.stax2.validation.XMLValidator validator)private voidthrowIllegalIndex(int index, int localCount)org.codehaus.stax2.validation.XMLValidatorvalidateAgainst(org.codehaus.stax2.validation.XMLValidationSchema schema)intvalidateEndElement()Method called after parsing (but before returning) end element, to allow for pluggable validators to verify correctness of the content model for the closing element.voidvalidateText(TextBuffer tb, boolean lastTextSegment)voidvalidateText(java.lang.String contents, boolean lastTextSegment)
-
-
-
Field Detail
-
ID_ATTR_NONE
static final int ID_ATTR_NONE
- See Also:
- Constant Field Values
-
mNsAware
protected final boolean mNsAware
-
mAttrCollector
protected final AttributeCollector mAttrCollector
-
mConfig
protected final ReaderConfig mConfig
-
mReporter
protected InputProblemReporter mReporter
-
mNsDefaultProvider
protected NsDefaultProvider mNsDefaultProvider
Object that will need to be consulted about namespace bindings, since it has some knowledge about default namespace declarations (has default attribute value expansion).
-
mDepth
protected int mDepth
-
mTotalElements
protected long mTotalElements
-
mNamespaces
protected final StringVector mNamespaces
Vector that contains all currently active namespaces; one String for prefix, another for matching URI. Does also include default name spaces (at most one per level).
-
mCurrElement
protected Element mCurrElement
Currently open element, if any; null outside root element.
-
mMayHaveNsDefaults
protected boolean mMayHaveNsDefaults
-
mValidator
protected org.codehaus.stax2.validation.XMLValidator mValidator
Optional validator object that will get called if set, and that can validate xml content. Note that it is possible that this is set to a proxy object that calls multiple validators in sequence.
-
mIdAttrIndex
protected int mIdAttrIndex
Index of the attribute with type of ID, if known (most likely due to Xml:id support); -1 if not available, or no ID attribute for current element.
-
mLastLocalName
protected java.lang.String mLastLocalName
-
mLastPrefix
protected java.lang.String mLastPrefix
-
mLastNsURI
protected java.lang.String mLastNsURI
-
mLastName
protected javax.xml.namespace.QName mLastName
-
mLastNsContext
protected BaseNsContext mLastNsContext
Last potentially shareable NamespaceContext created by this stack. This reference is cleared each time bindings change (either due to a start element with new bindings, or due to the matching end element that closes scope of such binding(s)).
-
mFreeElement
protected Element mFreeElement
-
-
Constructor Detail
-
InputElementStack
protected InputElementStack(ReaderConfig cfg, boolean nsAware)
-
-
Method Detail
-
connectReporter
protected void connectReporter(InputProblemReporter rep)
-
addValidator
protected org.codehaus.stax2.validation.XMLValidator addValidator(org.codehaus.stax2.validation.XMLValidator vld)
-
setAutomaticDTDValidator
protected void setAutomaticDTDValidator(org.codehaus.stax2.validation.XMLValidator validator, NsDefaultProvider nsDefs)Method called to connect the automatically handled DTD validator (one detected from DOCTYPE, loaded and completely handled by the stream reader without application calling validation methods). Handled separately, since its behaviour is potentially different from that of explicitly added validators.
-
validateAgainst
public org.codehaus.stax2.validation.XMLValidator validateAgainst(org.codehaus.stax2.validation.XMLValidationSchema schema) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
stopValidatingAgainst
public org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst(org.codehaus.stax2.validation.XMLValidationSchema schema) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
stopValidatingAgainst
public org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst(org.codehaus.stax2.validation.XMLValidator validator) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
reallyValidating
protected boolean reallyValidating()
This is a method called by the reader to ensure that we have at least one 'real' validator. This is only needed to ensure that validation problems that the reader can detect (illegal textual content) can be reported as validity errors. Since the validator API does not have a good way to cleanly deal with such a possibility, the check is rather fragile, but should work for now: essentially we need at least one validator object that either is not a sub-class ofDTDValidatorBaseor returns true forreallyValidating.!!! TODO: remove need for this method (and method itself) with Woodstox 4.0, by adding necessary support in Stax2 XMLValidator interface.
-
getAttrCollector
public final AttributeCollector getAttrCollector()
Method called byBasicStreamReader, to retrieve the attribute collector it needs for some direct access.
-
createNonTransientNsContext
public BaseNsContext createNonTransientNsContext(javax.xml.stream.Location loc)
Method called to construct a non-transient NamespaceContext instance; generally needed when creating events to return from event-based iterators.
-
push
public final void push(java.lang.String prefix, java.lang.String localName) throws javax.xml.stream.XMLStreamExceptionMethod called by the stream reader to add new (start) element into the stack in namespace-aware mode; called when a start element is encountered during parsing, but only in ns-aware mode.- Throws:
javax.xml.stream.XMLStreamException
-
pop
public final boolean pop() throws javax.xml.stream.XMLStreamExceptionMethod called by the stream reader to remove the topmost (start) element from the stack; called when an end element is encountered during parsing.- Returns:
- True if stack has more elements; false if not (that is, root element closed)
- Throws:
javax.xml.stream.XMLStreamException
-
resolveAndValidateElement
public int resolveAndValidateElement() throws javax.xml.stream.XMLStreamExceptionMethod called to resolve element and attribute namespaces (in namespace-aware mode), and do optional validation using pluggable validator object.- Returns:
- Text content validation state that should be effective for the fully resolved element context
- Throws:
javax.xml.stream.XMLStreamException
-
validateEndElement
public int validateEndElement() throws javax.xml.stream.XMLStreamExceptionMethod called after parsing (but before returning) end element, to allow for pluggable validators to verify correctness of the content model for the closing element.- Returns:
- Validation state that should be effective for the parent element state
- Throws:
javax.xml.stream.XMLStreamException
-
getAttributeCount
public final int getAttributeCount()
- Specified by:
getAttributeCountin interfaceorg.codehaus.stax2.AttributeInfo- Specified by:
getAttributeCountin interfaceorg.codehaus.stax2.validation.ValidationContext
-
findAttributeIndex
public final int findAttributeIndex(java.lang.String nsURI, java.lang.String localName)- Specified by:
findAttributeIndexin interfaceorg.codehaus.stax2.AttributeInfo- Specified by:
findAttributeIndexin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getIdAttributeIndex
public final int getIdAttributeIndex()
Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.- Specified by:
getIdAttributeIndexin interfaceorg.codehaus.stax2.AttributeInfo
-
getNotationAttributeIndex
public final int getNotationAttributeIndex()
Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.- Specified by:
getNotationAttributeIndexin interfaceorg.codehaus.stax2.AttributeInfo
-
getNamespaceURI
public final java.lang.String getNamespaceURI(java.lang.String prefix)
- Specified by:
getNamespaceURIin interfacejavax.xml.namespace.NamespaceContext- Specified by:
getNamespaceURIin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getPrefix
public final java.lang.String getPrefix(java.lang.String nsURI)
- Specified by:
getPrefixin interfacejavax.xml.namespace.NamespaceContext
-
getPrefixes
public final java.util.Iterator<java.lang.String> getPrefixes(java.lang.String nsURI)
- Specified by:
getPrefixesin interfacejavax.xml.namespace.NamespaceContext
-
getXmlVersion
public final java.lang.String getXmlVersion()
- Specified by:
getXmlVersionin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getAttributeLocalName
public java.lang.String getAttributeLocalName(int index)
- Specified by:
getAttributeLocalNamein interfaceorg.codehaus.stax2.validation.ValidationContext
-
getAttributeNamespace
public java.lang.String getAttributeNamespace(int index)
- Specified by:
getAttributeNamespacein interfaceorg.codehaus.stax2.validation.ValidationContext
-
getAttributePrefix
public java.lang.String getAttributePrefix(int index)
- Specified by:
getAttributePrefixin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getAttributeValue
public java.lang.String getAttributeValue(int index)
- Specified by:
getAttributeValuein interfaceorg.codehaus.stax2.validation.ValidationContext
-
getAttributeValue
public java.lang.String getAttributeValue(java.lang.String nsURI, java.lang.String localName)- Specified by:
getAttributeValuein interfaceorg.codehaus.stax2.validation.ValidationContext
-
isNotationDeclared
public boolean isNotationDeclared(java.lang.String name)
- Specified by:
isNotationDeclaredin interfaceorg.codehaus.stax2.validation.ValidationContext
-
isUnparsedEntityDeclared
public boolean isUnparsedEntityDeclared(java.lang.String name)
- Specified by:
isUnparsedEntityDeclaredin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getBaseUri
public java.lang.String getBaseUri()
- Specified by:
getBaseUriin interfaceorg.codehaus.stax2.validation.ValidationContext
-
getCurrentElementName
public final javax.xml.namespace.QName getCurrentElementName()
- Specified by:
getCurrentElementNamein interfaceorg.codehaus.stax2.validation.ValidationContext
-
getValidationLocation
public javax.xml.stream.Location getValidationLocation()
- Specified by:
getValidationLocationin interfaceorg.codehaus.stax2.validation.ValidationContext
-
reportProblem
public void reportProblem(org.codehaus.stax2.validation.XMLValidationProblem problem) throws javax.xml.stream.XMLStreamException- Specified by:
reportProblemin interfaceorg.codehaus.stax2.validation.ValidationContext- Throws:
javax.xml.stream.XMLStreamException
-
addDefaultAttribute
public int addDefaultAttribute(java.lang.String localName, java.lang.String uri, java.lang.String prefix, java.lang.String value) throws javax.xml.stream.XMLStreamExceptionMethod called by actual validator instances when attributes with default values have no explicit values for the element; if so, default value needs to be added as if it was parsed from the element.- Specified by:
addDefaultAttributein interfaceorg.codehaus.stax2.validation.ValidationContext- Throws:
javax.xml.stream.XMLStreamException
-
isPrefixLocallyDeclared
public boolean isPrefixLocallyDeclared(java.lang.String internedPrefix)
-
addNsBinding
public void addNsBinding(java.lang.String prefix, java.lang.String uri)Callback method called by the namespace default provider. At this point we can trust it to only call this method with somewhat valid arguments (no dups etc).
-
validateText
public final void validateText(TextBuffer tb, boolean lastTextSegment) throws javax.xml.stream.XMLStreamException
- Throws:
javax.xml.stream.XMLStreamException
-
validateText
public final void validateText(java.lang.String contents, boolean lastTextSegment) throws javax.xml.stream.XMLStreamException- Throws:
javax.xml.stream.XMLStreamException
-
isNamespaceAware
public final boolean isNamespaceAware()
-
isEmpty
public final boolean isEmpty()
-
getDepth
public final int getDepth()
- Returns:
- Number of open elements in the stack; 0 when parser is in prolog/epilog, 1 inside root element and so on.
-
getDefaultNsURI
public final java.lang.String getDefaultNsURI()
-
getNsURI
public final java.lang.String getNsURI()
-
getPrefix
public final java.lang.String getPrefix()
-
getLocalName
public final java.lang.String getLocalName()
-
matches
public final boolean matches(java.lang.String prefix, java.lang.String localName)
-
getTopElementDesc
public final java.lang.String getTopElementDesc()
-
getTotalNsCount
public final int getTotalNsCount()
- Returns:
- Number of active prefix/namespace mappings for current scope, including mappings from enclosing elements.
-
getCurrentNsCount
public final int getCurrentNsCount()
- Returns:
- Number of active prefix/namespace mappings for current scope, NOT including mappings from enclosing elements.
-
getLocalNsPrefix
public final java.lang.String getLocalNsPrefix(int index)
-
getLocalNsURI
public final java.lang.String getLocalNsURI(int index)
-
throwIllegalIndex
private void throwIllegalIndex(int index, int localCount)
-
getAttributeType
public final java.lang.String getAttributeType(int index)
- Specified by:
getAttributeTypein interfaceorg.codehaus.stax2.validation.ValidationContext- Returns:
- Schema (DTD, RNG, W3C Schema) based type of the attribute in specified index
-
-