Class 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.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.

    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int addDefaultAttribute​(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.
      void addNsBinding​(java.lang.String prefix, java.lang.String uri)
      Callback method called by the namespace default provider.
      protected org.codehaus.stax2.validation.XMLValidator addValidator​(org.codehaus.stax2.validation.XMLValidator vld)  
      protected void connectReporter​(InputProblemReporter rep)  
      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.
      int findAttributeIndex​(java.lang.String nsURI, java.lang.String localName)  
      AttributeCollector getAttrCollector()
      Method called by BasicStreamReader, to retrieve the attribute collector it needs for some direct access.
      int getAttributeCount()  
      java.lang.String getAttributeLocalName​(int index)  
      java.lang.String getAttributeNamespace​(int index)  
      java.lang.String getAttributePrefix​(int index)  
      java.lang.String getAttributeType​(int index)  
      java.lang.String getAttributeValue​(int index)  
      java.lang.String getAttributeValue​(java.lang.String nsURI, java.lang.String localName)  
      java.lang.String getBaseUri()  
      javax.xml.namespace.QName getCurrentElementName()  
      int getCurrentNsCount()  
      java.lang.String getDefaultNsURI()  
      int getDepth()  
      int getIdAttributeIndex()
      Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.
      java.lang.String getLocalName()  
      java.lang.String getLocalNsPrefix​(int index)  
      java.lang.String getLocalNsURI​(int index)  
      java.lang.String getNamespaceURI​(java.lang.String prefix)  
      int getNotationAttributeIndex()
      Default implementation just indicates it does not know of such attributes; this because that requires DTD information that only some implementations have.
      java.lang.String getNsURI()  
      java.lang.String getPrefix()  
      java.lang.String getPrefix​(java.lang.String nsURI)  
      java.util.Iterator<java.lang.String> getPrefixes​(java.lang.String nsURI)  
      java.lang.String getTopElementDesc()  
      int getTotalNsCount()  
      javax.xml.stream.Location getValidationLocation()  
      java.lang.String getXmlVersion()  
      boolean isEmpty()  
      boolean isNamespaceAware()  
      boolean isNotationDeclared​(java.lang.String name)  
      boolean isPrefixLocallyDeclared​(java.lang.String internedPrefix)  
      boolean isUnparsedEntityDeclared​(java.lang.String name)  
      boolean matches​(java.lang.String prefix, java.lang.String localName)  
      boolean pop()
      Method called by the stream reader to remove the topmost (start) element from the stack; called when an end element is encountered during parsing.
      void push​(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 boolean reallyValidating()
      This is a method called by the reader to ensure that we have at least one 'real' validator.
      void reportProblem​(org.codehaus.stax2.validation.XMLValidationProblem problem)  
      int resolveAndValidateElement()
      Method called to resolve element and attribute namespaces (in namespace-aware mode), and do optional validation using pluggable validator object.
      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).
      org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst​(org.codehaus.stax2.validation.XMLValidationSchema schema)  
      org.codehaus.stax2.validation.XMLValidator stopValidatingAgainst​(org.codehaus.stax2.validation.XMLValidator validator)  
      private void throwIllegalIndex​(int index, int localCount)  
      org.codehaus.stax2.validation.XMLValidator validateAgainst​(org.codehaus.stax2.validation.XMLValidationSchema schema)  
      int validateEndElement()
      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.
      void validateText​(TextBuffer tb, boolean lastTextSegment)  
      void validateText​(java.lang.String contents, boolean lastTextSegment)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • mNsAware

        protected final boolean mNsAware
      • 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

      • 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 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​(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.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:
        javax.xml.stream.XMLStreamException
      • pop

        public final boolean pop()
                          throws javax.xml.stream.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:
        javax.xml.stream.XMLStreamException
      • resolveAndValidateElement

        public int resolveAndValidateElement()
                                      throws javax.xml.stream.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:
        javax.xml.stream.XMLStreamException
      • validateEndElement

        public int validateEndElement()
                               throws javax.xml.stream.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:
        javax.xml.stream.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​(java.lang.String nsURI,
                                            java.lang.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 java.lang.String getNamespaceURI​(java.lang.String prefix)
        Specified by:
        getNamespaceURI in interface javax.xml.namespace.NamespaceContext
        Specified by:
        getNamespaceURI in interface org.codehaus.stax2.validation.ValidationContext
      • getPrefix

        public final java.lang.String getPrefix​(java.lang.String nsURI)
        Specified by:
        getPrefix in interface javax.xml.namespace.NamespaceContext
      • getPrefixes

        public final java.util.Iterator<java.lang.String> getPrefixes​(java.lang.String nsURI)
        Specified by:
        getPrefixes in interface javax.xml.namespace.NamespaceContext
      • getXmlVersion

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

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

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

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

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

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

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

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

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

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

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

        public void reportProblem​(org.codehaus.stax2.validation.XMLValidationProblem problem)
                           throws javax.xml.stream.XMLStreamException
        Specified by:
        reportProblem in interface org.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.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:
        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:
        getAttributeType in interface org.codehaus.stax2.validation.ValidationContext
        Returns:
        Schema (DTD, RNG, W3C Schema) based type of the attribute in specified index