You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ga...@apache.org on 2008/09/11 06:00:09 UTC

svn commit: r694104 - in /webservices/axis2/trunk/java/modules/saaj: src/org/apache/axis2/saaj/ test/org/apache/axis2/saaj/

Author: gawor
Date: Wed Sep 10 21:00:08 2008
New Revision: 694104

URL: http://svn.apache.org/viewvc?rev=694104&view=rev
Log:
make SOAPPartImpl methods return object of the right type. Also some removeChild improvements (AXIS2-4027)

Modified:
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
    webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
    webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImplEx.java Wed Sep 10 21:00:08 2008
@@ -161,30 +161,37 @@
      * @return the SAAJ Node corresponding to the domNode
      */
     javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
+        return toSAAJNode(domNode, this);
+    }
+    
+    /**
+     * Converts or extracts the SAAJ node from the given DOM Node (domNode)
+     *
+     * @param domNode
+     * @return the SAAJ Node corresponding to the domNode
+     */
+    static javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode, Node parentNode) {
         if (domNode == null) {
             return null;
         }
+        Node saajNode = (Node)((NodeImpl)domNode).getUserData(SAAJ_NODE);
+        if (saajNode == null) {  // if SAAJ node has not been set in userData, try to construct it
+            return toSAAJNode2(domNode, parentNode);
+        }
+        // update siblings for text nodes
         if (domNode instanceof org.w3c.dom.Text || domNode instanceof org.w3c.dom.Comment) {
             org.w3c.dom.Node prevSiblingDOMNode = domNode.getPreviousSibling();
             org.w3c.dom.Node nextSiblingDOMNode = domNode.getNextSibling();
-
-            TextImplEx saajTextNode = (TextImplEx)((NodeImpl)domNode).getUserData(SAAJ_NODE);
-            if (saajTextNode == null) {
-                // if SAAJ node has not been set in userData, try to construct it
-                return toSAAJNode2(domNode);
-            }
+            
+            TextImplEx saajTextNode = (TextImplEx)saajNode;
+            
             saajTextNode.setPreviousSibling(prevSiblingDOMNode);
             saajTextNode.setNextSibling(nextSiblingDOMNode);
-            return saajTextNode;
-        }
-        Node saajNode = (Node)((NodeImpl)domNode).getUserData(SAAJ_NODE);
-        if (saajNode == null) {  // if SAAJ node has not been set in userData, try to construct it
-            return toSAAJNode2(domNode);
         }
         return saajNode;
     }
 
-    private javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode) {
+    private static javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode, Node parentNode) {
         if (domNode == null) {
             return null;
         }
@@ -260,13 +267,13 @@
         } else if (domNode instanceof org.apache.axiom.om.impl.dom.DocumentImpl) {
             
             // Must be a SOAPEnvelope
-            if (!(this instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) {
+            if (!(parentNode instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) {
                 return null;
             }
             org.apache.axiom.om.impl.dom.DocumentImpl doomDocument
                 = (org.apache.axiom.om.impl.dom.DocumentImpl)domNode;
             org.apache.axis2.saaj.SOAPEnvelopeImpl saajEnv = 
-                (org.apache.axis2.saaj.SOAPEnvelopeImpl) this;
+                (org.apache.axis2.saaj.SOAPEnvelopeImpl) parentNode;
             javax.xml.soap.SOAPPart saajSOAPPart = null;
             if (saajEnv.getSOAPPartParent() != null) {
                 // return existing SOAPPart

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java Wed Sep 10 21:00:08 2008
@@ -866,6 +866,15 @@
         return element.toString();
     }
         
+    public Node removeChild(Node oldChild) throws DOMException {
+        if (oldChild instanceof SOAPElementImpl) {
+            oldChild = ((SOAPElementImpl)oldChild).getElement();
+        } else if (oldChild instanceof TextImplEx) {
+            // TODO: handle text nodes somehow
+        }
+        return element.removeChild(oldChild);
+    }
+    
     public Node appendChild(Node child) throws DOMException {        
         if (getOwnerDocument() != child.getOwnerDocument()) {
             throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Wrong document");

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Wed Sep 10 21:00:08 2008
@@ -844,7 +844,7 @@
      * been removed from the tree, this is <code>null</code>.
      */
     public Node getParentNode() {
-        return document.getParentNode();
+        return toSAAJNode(document.getParentNode());
     }
 
     /**
@@ -852,17 +852,22 @@
      * this is a <code>NodeList</code> containing no nodes.
      */
     public NodeList getChildNodes() {
-        return document.getChildNodes();
+        NodeList childNodes = document.getChildNodes();
+        NodeListImpl nodes = new NodeListImpl();
+        for (int i = 0; i < childNodes.getLength(); i++) {
+            nodes.addNode(toSAAJNode(childNodes.item(i)));
+        }
+        return nodes;
     }
 
     /** The first child of this node. If there is no such node, this returns <code>null</code>. */
     public Node getFirstChild() {
-        return document.getFirstChild();
+        return toSAAJNode(document.getFirstChild());
     }
 
     /** The last child of this node. If there is no such node, this returns <code>null</code>. */
     public Node getLastChild() {
-        return document.getLastChild();
+        return toSAAJNode(document.getLastChild());
     }
 
     /**
@@ -870,7 +875,7 @@
      * <code>null</code>.
      */
     public Node getPreviousSibling() {
-        return document.getPreviousSibling();
+        return toSAAJNode(document.getPreviousSibling());
     }
 
     /**
@@ -878,7 +883,7 @@
      * <code>null</code>.
      */
     public Node getNextSibling() {
-        return document.getNextSibling();
+        return toSAAJNode(document.getNextSibling());
     }
 
     /**
@@ -957,6 +962,11 @@
      *                      this node.
      */
     public Node removeChild(Node oldChild) throws DOMException {
+        if (oldChild instanceof SOAPElementImpl) {
+            oldChild = ((SOAPElementImpl)oldChild).getElement();
+        } else if (oldChild instanceof TextImplEx) {
+            // TODO: handle text nodes somehow
+        }
         return document.removeChild(oldChild);
     }
 
@@ -1225,4 +1235,8 @@
     public void setValue(String value) {
     	throw new IllegalStateException("Cannot set value of SOAPPart.");
     }
+    
+    javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
+        return NodeImplEx.toSAAJNode(domNode, this);
+    }
 }

Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPElementTest.java Wed Sep 10 21:00:08 2008
@@ -819,4 +819,34 @@
         assertEquals("DEF", text.getData());
         assertFalse(iter.hasNext());               
     }
+    
+    public void testRemoveChild() throws Exception {
+        MessageFactory fact = MessageFactory.newInstance();
+        SOAPMessage message = fact.createMessage();
+        SOAPBody soapBody = message.getSOAPBody();
+
+        assertFalse(soapBody.getChildElements().hasNext());
+        
+        QName qname1 = new QName("http://wombat.ztrade.com",
+                                 "GetLastTradePrice", "ztrade");
+        SOAPElement child = soapBody.addChildElement(qname1);
+        child.addTextNode("foo");
+        
+        assertTrue(child.getChildElements().hasNext());
+        
+        Node textNode = (Node)child.getChildElements().next();
+        assertTrue(textNode instanceof Text);
+        
+        /* 
+        child.removeChild(textNode);
+        
+        assertFalse(child.getChildElements().hasNext());
+        */
+        
+        assertTrue(soapBody.getChildElements().hasNext());
+        
+        soapBody.removeChild(child);
+        
+        assertFalse(soapBody.getChildElements().hasNext());
+    }
 }

Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java?rev=694104&r1=694103&r2=694104&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java Wed Sep 10 21:00:08 2008
@@ -23,6 +23,7 @@
 import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
@@ -245,4 +246,44 @@
         SOAPElement e = se.getParentElement();
         assertTrue(node == null);
     }
+    
+    public void testNodeTypes() throws Exception {
+        MessageFactory fact = MessageFactory.newInstance();
+        SOAPMessage message = fact.createMessage();
+        SOAPPart soapPart = message.getSOAPPart();     
+
+        assertTrue("first child", soapPart.getFirstChild() instanceof SOAPEnvelope);
+        assertTrue("last child", soapPart.getLastChild() instanceof SOAPEnvelope);
+                
+        NodeList nodes = soapPart.getChildNodes();
+        
+        assertEquals(1, nodes.getLength());
+        for (int i = 0; i < nodes.getLength(); i++) {
+            assertTrue(nodes.item(i) instanceof SOAPEnvelope);
+        }             
+    }
+    
+    public void testRemoveChild1() throws Exception {
+        MessageFactory fact = MessageFactory.newInstance();
+        SOAPMessage message = fact.createMessage();
+        SOAPPart soapPart = message.getSOAPPart();  
+                                
+        assertTrue("soap env before", soapPart.getFirstChild() instanceof SOAPEnvelope);
+        
+        soapPart.removeChild(soapPart.getFirstChild());
+        
+        assertTrue("soap env after", soapPart.getFirstChild() == null);
+    }
+    
+    public void testRemoveChild2() throws Exception {
+        MessageFactory fact = MessageFactory.newInstance();
+        SOAPMessage message = fact.createMessage();
+        SOAPPart soapPart = message.getSOAPPart();  
+                                
+        assertTrue("soap env before", soapPart.getFirstChild() instanceof SOAPEnvelope);
+        
+        soapPart.removeChild(soapPart.getEnvelope());
+        
+        assertTrue("soap env after", soapPart.getFirstChild() == null);
+    }
 }