Class NamespaceContexHelper

  • All Implemented Interfaces:
    java.lang.Iterable<org.jvnet.staxex.NamespaceContextEx.Binding>, javax.xml.namespace.NamespaceContext, org.jvnet.staxex.NamespaceContextEx

    public final class NamespaceContexHelper
    extends java.lang.Object
    implements org.jvnet.staxex.NamespaceContextEx
    A helper class for managing the declaration of namespaces.

    A namespace is declared on a namespace context. Namespace contexts are pushed on and popped off the namespace context stack.

    A declared namespace will be in scope iff the context that it was declared on has not been popped off the stack.

    When instantiated the namespace stack consists of the root namespace context, which contains, by default, the "xml" and "xmlns" declarations. Namespaces may be declarations may be declared on the root context. The root context cannot be popped but can be reset to contain just the "xml" and "xmlns" declarations.

    Implementation note: determining the prefix from a namespace URI (or vice versa) is efficient when there are few namespace declarations i.e. what is considered to be the case for namespace declarations in 'average' XML documents. The look up of a namespace URI given a prefix is performed in O(n) time. The look up of a prefix given a namespace URI is performed in O(2n) time.

    The implementation does not scale when there are many namespace declarations. TODO: Use a hash map when there are many namespace declarations.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  NamespaceContexHelper.NamespaceBindingImpl  
      • Nested classes/interfaces inherited from interface org.jvnet.staxex.NamespaceContextEx

        org.jvnet.staxex.NamespaceContextEx.Binding
    • Constructor Summary

      Constructors 
      Constructor Description
      NamespaceContexHelper()
      Create a new NamespaceContexHelper.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void declareDefaultNamespace​(java.lang.String namespaceURI)
      Declare a default namespace.
      void declareNamespace​(java.lang.String prefix, java.lang.String namespaceURI)
      Declare a namespace.
      java.lang.String getNamespaceURI​(java.lang.String prefix)  
      java.lang.String getPrefix​(java.lang.String namespaceURI)  
      java.util.Iterator getPrefixes​(java.lang.String namespaceURI)  
      java.util.Iterator<org.jvnet.staxex.NamespaceContextEx.Binding> iterator()  
      void popContext()
      Pop the namespace context off the stack.
      void pushContext()
      Push a namespace context on the stack.
      void resetContexts()
      Reset namespace contexts.
      private void resizeContexts()  
      private void resizeNamespaces()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      • Methods inherited from interface java.lang.Iterable

        forEach, spliterator
    • Field Detail

      • DEFAULT_SIZE

        private static int DEFAULT_SIZE
      • prefixes

        private java.lang.String[] prefixes
      • namespaceURIs

        private java.lang.String[] namespaceURIs
      • namespacePosition

        private int namespacePosition
      • contexts

        private int[] contexts
      • contextPosition

        private int contextPosition
    • Constructor Detail

      • NamespaceContexHelper

        public NamespaceContexHelper()
        Create a new NamespaceContexHelper.
    • Method Detail

      • getNamespaceURI

        public java.lang.String getNamespaceURI​(java.lang.String prefix)
        Specified by:
        getNamespaceURI in interface javax.xml.namespace.NamespaceContext
      • getPrefix

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

        public java.util.Iterator getPrefixes​(java.lang.String namespaceURI)
        Specified by:
        getPrefixes in interface javax.xml.namespace.NamespaceContext
      • iterator

        public java.util.Iterator<org.jvnet.staxex.NamespaceContextEx.Binding> iterator()
        Specified by:
        iterator in interface java.lang.Iterable<org.jvnet.staxex.NamespaceContextEx.Binding>
        Specified by:
        iterator in interface org.jvnet.staxex.NamespaceContextEx
      • declareDefaultNamespace

        public void declareDefaultNamespace​(java.lang.String namespaceURI)
        Declare a default namespace.

        Parameters:
        namespaceURI - the namespace URI to declare, may be null.
      • declareNamespace

        public void declareNamespace​(java.lang.String prefix,
                                     java.lang.String namespaceURI)
        Declare a namespace.

        The namespace will be declared on the current namespace context.

        The namespace can be removed by popping the current namespace context, or, if the declaration occured in the root context, by reseting the namespace context.

        A default namespace can be declared by passing "" as the value of the prefix parameter. A namespace may be undeclared by passing null as the value of the namespaceURI parameter.

        Parameters:
        prefix - the namespace prefix to declare, may not be null.
        namespaceURI - the namespace URI to declare, may be null.
      • resizeNamespaces

        private void resizeNamespaces()
      • pushContext

        public void pushContext()
        Push a namespace context on the stack.
      • resizeContexts

        private void resizeContexts()
      • popContext

        public void popContext()
        Pop the namespace context off the stack.

        Namespaces declared within the context (to be popped) will be removed and no longer be in scope.

      • resetContexts

        public void resetContexts()
        Reset namespace contexts.

        Pop all namespace contexts and reset the root context.