You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2012/09/10 09:58:19 UTC

svn commit: r1382677 - in /webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom: AttrImpl.java DocumentFragmentImpl.java DocumentImpl.java ElementImpl.java LeafNode.java NodeImpl.java

Author: veithen
Date: Mon Sep 10 07:58:19 2012
New Revision: 1382677

URL: http://svn.apache.org/viewvc?rev=1382677&view=rev
Log:
AXIOM-423: Refactored the lookupNamespaceURI code to make it more object oriented.

Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/LeafNode.java
    webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/AttrImpl.java Mon Sep 10 07:58:19 2012
@@ -492,4 +492,9 @@ public class AttrImpl extends RootNode i
     public final Node getNextSibling() {
         return null;
     }
+
+    public final String lookupNamespaceURI(String specifiedPrefix) {
+        Element ownerElement = getOwnerElement();
+        return ownerElement == null ? null : ownerElement.lookupNamespaceURI(specifiedPrefix);
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java Mon Sep 10 07:58:19 2012
@@ -121,4 +121,8 @@ public class DocumentFragmentImpl extend
     public void removeChildren() {
         OMContainerHelper.removeChildren(this);
     }
+
+    public final String lookupNamespaceURI(String specifiedPrefix) {
+        return null;
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java Mon Sep 10 07:58:19 2012
@@ -622,4 +622,10 @@ public class DocumentImpl extends RootNo
     public final void removeChildren() {
         OMContainerHelper.removeChildren(this);
     }
+
+    public final String lookupNamespaceURI(String specifiedPrefix) {
+        Element documentElement = getDocumentElement();
+        return documentElement == null ? null
+                : documentElement.lookupNamespaceURI(specifiedPrefix);
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Mon Sep 10 07:58:19 2012
@@ -44,6 +44,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.w3c.dom.Attr;
 import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
@@ -1198,4 +1199,41 @@ public class ElementImpl extends ParentN
     public final void removeChildren() {
         OMContainerHelper.removeChildren(this);
     }
+
+    public final String lookupNamespaceURI(String specifiedPrefix) {
+        String namespace = this.getNamespaceURI();
+        String prefix = this.getPrefix();
+        // First check for namespaces implicitly defined by the namespace prefix/URI of the element
+        // TODO: although the namespace != null condition conforms to the specs, it is likely incorrect; see XERCESJ-1586
+        if (namespace != null
+                && (prefix == null && specifiedPrefix == null
+                        || prefix != null && prefix.equals(specifiedPrefix))) {
+            return namespace;
+        }
+        // looking in attributes
+        if (this.hasAttributes()) {
+            NamedNodeMap map = this.getAttributes();
+            int length = map.getLength();
+            for (int i = 0; i < length; i++) {
+                Node attr = map.item(i);
+                namespace = attr.getNamespaceURI();
+                if (namespace != null && namespace.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
+                    // At this point we know that either the prefix of the attribute is null and
+                    // the local name is "xmlns" or the prefix is "xmlns" and the local name is the
+                    // namespace prefix declared by the namespace declaration. We check that constraint
+                    // when the attribute is created.
+                    String attrPrefix = attr.getPrefix();
+                    if ((specifiedPrefix == null && attrPrefix == null)
+                            || (specifiedPrefix != null && attrPrefix != null
+                                    && attr.getLocalName().equals(specifiedPrefix))) {
+                        String value = attr.getNodeValue();
+                        return value.length() > 0 ? value : null;
+                    }
+                }
+            }
+        }
+        // looking in ancestor
+        ParentNode parent = parentNode();
+        return parent == null || parent instanceof Document ? null : parent.lookupNamespaceURI(specifiedPrefix);
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/LeafNode.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/LeafNode.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/LeafNode.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/LeafNode.java Mon Sep 10 07:58:19 2012
@@ -27,6 +27,7 @@ import org.apache.axiom.om.impl.common.I
 import org.apache.axiom.om.impl.common.IParentNode;
 import org.apache.axiom.om.impl.common.OMNodeHelper;
 import org.w3c.dom.DOMException;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -133,4 +134,12 @@ public abstract class LeafNode extends N
     public final IParentNode getIParentNode() {
         return parentNode();
     }
+
+    public final String lookupNamespaceURI(String specifiedPrefix) {
+        ParentNode parent = parentNode();
+        // Note: according to the DOM specs, we need to delegate the lookup if the parent
+        // is an element or an entity reference. However, since we don't support entity
+        // references fully, we only check for elements.
+        return parent instanceof Element ? parent.lookupNamespaceURI(specifiedPrefix) : null;
+    }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=1382677&r1=1382676&r2=1382677&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Mon Sep 10 07:58:19 2012
@@ -34,17 +34,14 @@ import org.apache.axiom.om.util.StAXUtil
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.w3c.dom.DOMException;
 import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.UserDataHandler;
-import org.w3c.dom.Attr;
 
 import java.io.OutputStream;
 import java.io.Writer;
 import java.util.Hashtable;
 
-import javax.xml.XMLConstants;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
@@ -247,81 +244,6 @@ public abstract class NodeImpl implement
     }
 
     /**
-     * Returns the namespace for a given prefix <br/>
-     * The prefix can be of an Attribute's or an Element's.
-     */
-    public String lookupNamespaceURI(String specifiedPrefix) {
-        short type = this.getNodeType();
-        switch (type) {
-        case Node.ELEMENT_NODE: {
-
-            String namespace = this.getNamespaceURI();
-            String prefix = this.getPrefix();
-            // First check for namespaces implicitly defined by the namespace prefix/URI of the element
-            // TODO: although the namespace != null condition conforms to the specs, it is likely incorrect; see XERCESJ-1586
-            if (namespace != null
-                    && (prefix == null && specifiedPrefix == null
-                            || prefix != null && prefix.equals(specifiedPrefix))) {
-                return namespace;
-            }
-            // looking in attributes
-            if (this.hasAttributes()) {
-                NamedNodeMap map = this.getAttributes();
-                int length = map.getLength();
-                for (int i = 0; i < length; i++) {
-                    Node attr = map.item(i);
-                    namespace = attr.getNamespaceURI();
-                    if (namespace != null && namespace.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
-                        // At this point we know that either the prefix of the attribute is null and
-                        // the local name is "xmlns" or the prefix is "xmlns" and the local name is the
-                        // namespace prefix declared by the namespace declaration. We check that constraint
-                        // when the attribute is created.
-                        String attrPrefix = attr.getPrefix();
-                        if ((specifiedPrefix == null && attrPrefix == null)
-                                || (specifiedPrefix != null && attrPrefix != null
-                                        && attr.getLocalName().equals(specifiedPrefix))) {
-                            String value = attr.getNodeValue();
-                            return value.length() > 0 ? value : null;
-                        }
-                    }
-                }
-            }
-            // looking in ancestor
-            NodeImpl ancestor = (NodeImpl) getElementAncestor(this);
-            if (ancestor != null) {
-                return ancestor.lookupNamespaceURI(specifiedPrefix);
-            }
-
-            return null;
-
-        }
-        case Node.DOCUMENT_NODE: {
-            Element documentElement = ((Document) this).getDocumentElement();
-            return documentElement == null ? null
-                    : documentElement.lookupNamespaceURI(specifiedPrefix);
-        }
-        case Node.ENTITY_NODE:
-        case Node.NOTATION_NODE:
-        case Node.DOCUMENT_FRAGMENT_NODE:
-        case Node.DOCUMENT_TYPE_NODE:
-            // type is unknown
-            return null;
-        case Node.ATTRIBUTE_NODE: {
-            Element ownerElement = ((Attr) this).getOwnerElement();
-            return ownerElement == null ? null : ownerElement.lookupNamespaceURI(specifiedPrefix);
-        }
-        default: {
-            NodeImpl ancestor = (NodeImpl) getElementAncestor(this);
-            if (ancestor != null) {
-                return ancestor.lookupNamespaceURI(specifiedPrefix);
-            }
-            return null;
-        }
-
-        }
-    }
-
-    /**
      * Tests whether two nodes are equal. <br>This method tests for equality of nodes, not sameness
      * (i.e., whether the two nodes are references to the same object) which can be tested with
      * <code>Node.isSameNode()</code>. All nodes that are the same will also be equal, though the
@@ -927,17 +849,4 @@ public abstract class NodeImpl implement
     }
 
     abstract NodeImpl clone(OMCloneOptions options, ParentNode targetParent, boolean deep, boolean namespaceRepairing);
-
-    public Node getElementAncestor(Node currentNode) {
-        Node parent = currentNode.getParentNode();
-        while (parent != null) {
-            short type = parent.getNodeType();
-            if (type == Node.ELEMENT_NODE) {
-                return parent;
-            }
-            parent = parent.getParentNode();
-        }
-        return null;
-    }
-
 }