Class InputElementStack

java.lang.Object
com.ctc.wstx.sr.InputElementStack
All Implemented Interfaces:
NamespaceContext, org.codehaus.stax2.AttributeInfo, org.codehaus.stax2.validation.ValidationContext

public final class InputElementStack extends Object implements org.codehaus.stax2.AttributeInfo, NamespaceContext, org.codehaus.stax2.validation.ValidationContext
Shared 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 Details

    • ID_ATTR_NONE

      static final int ID_ATTR_NONE
      See Also:
    • 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 String mLastLocalName
    • mLastPrefix

      protected String mLastPrefix
    • mLastNsURI

      protected String mLastNsURI
    • mLastName

      protected 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 Details

    • InputElementStack

      protected InputElementStack(ReaderConfig cfg, boolean nsAware)
  • Method Details

    • 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 XMLStreamException
      Throws:
      XMLStreamException
    • stopValidatingAgainst

      public org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst(org.codehaus.stax2.validation.XMLValidationSchema schema) throws XMLStreamException
      Throws:
      XMLStreamException
    • stopValidatingAgainst

      public org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst(org.codehaus.stax2.validation.XMLValidator validator) throws XMLStreamException
      Throws:
      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 of DTDValidatorBase or returns true for reallyValidating.

      !!! 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 by BasicStreamReader, to retrieve the attribute collector it needs for some direct access.
    • createNonTransientNsContext

      public BaseNsContext createNonTransientNsContext(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(String prefix, String localName) throws XMLStreamException
      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.
      Throws:
      XMLStreamException
    • pop

      public final boolean pop() throws XMLStreamException
      Method 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:
      XMLStreamException
    • resolveAndValidateElement

      public int resolveAndValidateElement() throws XMLStreamException
      Method 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:
      XMLStreamException
    • validateEndElement

      public int validateEndElement() throws XMLStreamException
      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.
      Returns:
      Validation state that should be effective for the parent element state
      Throws:
      XMLStreamException
    • getAttributeCount

      public final int getAttributeCount()
      Specified by:
      getAttributeCount in interface org.codehaus.stax2.AttributeInfo
      Specified by:
      getAttributeCount in interface org.codehaus.stax2.validation.ValidationContext
    • findAttributeIndex

      public final int findAttributeIndex(String nsURI, String localName)
      Specified by:
      findAttributeIndex in interface org.codehaus.stax2.AttributeInfo
      Specified by:
      findAttributeIndex in interface org.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:
      getIdAttributeIndex in interface org.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:
      getNotationAttributeIndex in interface org.codehaus.stax2.AttributeInfo
    • getNamespaceURI

      public final String getNamespaceURI(String prefix)
      Specified by:
      getNamespaceURI in interface NamespaceContext
      Specified by:
      getNamespaceURI in interface org.codehaus.stax2.validation.ValidationContext
    • getPrefix

      public final String getPrefix(String nsURI)
      Specified by:
      getPrefix in interface NamespaceContext
    • getPrefixes

      public final Iterator<String> getPrefixes(String nsURI)
      Specified by:
      getPrefixes in interface NamespaceContext
    • getXmlVersion

      public final String getXmlVersion()
      Specified by:
      getXmlVersion in interface org.codehaus.stax2.validation.ValidationContext
    • getAttributeLocalName

      public String getAttributeLocalName(int index)
      Specified by:
      getAttributeLocalName in interface org.codehaus.stax2.validation.ValidationContext
    • getAttributeNamespace

      public String getAttributeNamespace(int index)
      Specified by:
      getAttributeNamespace in interface org.codehaus.stax2.validation.ValidationContext
    • getAttributePrefix

      public String getAttributePrefix(int index)
      Specified by:
      getAttributePrefix in interface org.codehaus.stax2.validation.ValidationContext
    • getAttributeValue

      public String getAttributeValue(int index)
      Specified by:
      getAttributeValue in interface org.codehaus.stax2.validation.ValidationContext
    • getAttributeValue

      public String getAttributeValue(String nsURI, String localName)
      Specified by:
      getAttributeValue in interface org.codehaus.stax2.validation.ValidationContext
    • isNotationDeclared

      public boolean isNotationDeclared(String name)
      Specified by:
      isNotationDeclared in interface org.codehaus.stax2.validation.ValidationContext
    • isUnparsedEntityDeclared

      public boolean isUnparsedEntityDeclared(String name)
      Specified by:
      isUnparsedEntityDeclared in interface org.codehaus.stax2.validation.ValidationContext
    • getBaseUri

      public String getBaseUri()
      Specified by:
      getBaseUri in interface org.codehaus.stax2.validation.ValidationContext
    • getCurrentElementName

      public final QName getCurrentElementName()
      Specified by:
      getCurrentElementName in interface org.codehaus.stax2.validation.ValidationContext
    • getValidationLocation

      public Location getValidationLocation()
      Specified by:
      getValidationLocation in interface org.codehaus.stax2.validation.ValidationContext
    • reportProblem

      public void reportProblem(org.codehaus.stax2.validation.XMLValidationProblem problem) throws XMLStreamException
      Specified by:
      reportProblem in interface org.codehaus.stax2.validation.ValidationContext
      Throws:
      XMLStreamException
    • addDefaultAttribute

      public int addDefaultAttribute(String localName, String uri, String prefix, String value) throws XMLStreamException
      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.
      Specified by:
      addDefaultAttribute in interface org.codehaus.stax2.validation.ValidationContext
      Throws:
      XMLStreamException
    • isPrefixLocallyDeclared

      public boolean isPrefixLocallyDeclared(String internedPrefix)
    • addNsBinding

      public void addNsBinding(String prefix, 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 XMLStreamException
      Throws:
      XMLStreamException
    • validateText

      public final void validateText(String contents, boolean lastTextSegment) throws XMLStreamException
      Throws:
      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 String getDefaultNsURI()
    • getNsURI

      public final String getNsURI()
    • getPrefix

      public final String getPrefix()
    • getLocalName

      public final String getLocalName()
    • matches

      public final boolean matches(String prefix, String localName)
    • getTopElementDesc

      public final 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 String getLocalNsPrefix(int index)
    • getLocalNsURI

      public final String getLocalNsURI(int index)
    • throwIllegalIndex

      private void throwIllegalIndex(int index, int localCount)
    • getAttributeType

      public final String getAttributeType(int index)
      Specified by:
      getAttributeType in interface org.codehaus.stax2.validation.ValidationContext
      Returns:
      Schema (DTD, RNG, W3C Schema) based type of the attribute in specified index