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 sc...@apache.org on 2008/03/12 15:41:41 UTC

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

Author: scheu
Date: Wed Mar 12 07:41:35 2008
New Revision: 636345

URL: http://svn.apache.org/viewvc?rev=636345&view=rev
Log:
AXIS2-3267
Contributor:Rich Scheuerle
Add unit tests that simulate the problem/exception stack reported
Added code the to the Axis2 SAAJ implementation to keep track of the parent
of the SOAPEnvelope (SOAPPart and corresponding DOOM OMDocument).  This information
is used to return the correct Node parent or SOAPElement parent.

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/SOAPEnvelopeImpl.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/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=636345&r1=636344&r2=636345&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 Mar 12 07:41:35 2008
@@ -35,7 +35,9 @@
 
 import javax.xml.soap.Node;
 import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPPart;
 
 /**
  * A representation of a node (element) in a DOM representation of an XML document that provides
@@ -256,6 +258,30 @@
                     = new org.apache.axis2.saaj.SOAPHeaderImpl(doomSOAPHeader);
             doomSOAPHeader.setUserData(SAAJ_NODE, saajSOAPHeader, null);
             return saajSOAPHeader;
+        } else if (domNode instanceof org.apache.axiom.om.impl.dom.DocumentImpl) {
+            
+            // Must be a SOAPEnvelope
+            if (!(this 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;
+            javax.xml.soap.SOAPPart saajSOAPPart = null;
+            if (saajEnv.getSOAPPartParent() != null) {
+                // return existing SOAPPart
+                saajSOAPPart = saajEnv.getSOAPPartParent();
+                
+            } else {
+                // Create Message and SOAPPart
+                SOAPMessageImpl saajSOAPMessage = 
+                        new SOAPMessageImpl(saajEnv);
+                saajSOAPPart = saajSOAPMessage.getSOAPPart();
+            }
+            
+            domNode.setUserData(SAAJ_NODE, saajSOAPPart, null);
+            return saajSOAPPart;
         } else { // instanceof org.apache.axis2.om.impl.dom.ElementImpl
             ElementImpl doomElement = (ElementImpl)domNode;
             SOAPElementImpl saajSOAPElement = new SOAPElementImpl(doomElement);

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=636345&r1=636344&r2=636345&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 Mar 12 07:41:35 2008
@@ -720,7 +720,10 @@
      */
     public SOAPElement getParentElement() {
         if (this.parentElement == null) {
-            return (SOAPElement)toSAAJNode(element.getParentNode());
+            javax.xml.soap.Node parentNode = toSAAJNode(element.getParentNode());
+            if (parentNode instanceof SOAPElement) {
+                this.parentElement = (SOAPElement) parentNode;
+            }
         }
         return this.parentElement;
     }
@@ -775,7 +778,16 @@
     }
 
     public Node getParentNode() {
-        return getParentElement();
+        Node parentNode = null;
+        if (this.parentElement == null) {
+            parentNode = toSAAJNode(element.getParentNode());
+            if (parentNode instanceof SOAPElement) {
+                this.parentElement = (SOAPElement) parentNode;
+            }
+        } else {
+            parentNode = this.parentElement;
+        }
+        return parentNode;
     }
 
     /** dom Node method */

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java?rev=636345&r1=636344&r2=636345&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPEnvelopeImpl.java Wed Mar 12 07:41:35 2008
@@ -42,6 +42,7 @@
 public class SOAPEnvelopeImpl extends SOAPElementImpl implements javax.xml.soap.SOAPEnvelope {
 
     private org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl omSOAPEnvelope;
+    private SOAPPartImpl soapPart;
 
     public SOAPEnvelopeImpl(final org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl envelope) {
         super(envelope);
@@ -230,5 +231,20 @@
             return super.addChildElement(name);
         }
         return null;
+    }
+    
+    /**
+     * Set SOAPPart parent
+     * @param sp
+     */
+    void setSOAPPartParent(SOAPPartImpl sp) {
+        this.soapPart = sp;
+    }
+    
+    /**
+     * @return SOAPPart
+     */
+    SOAPPartImpl getSOAPPartParent() {
+        return this.soapPart;
     }
 }

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=636345&r1=636344&r2=636345&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 Mar 12 07:41:35 2008
@@ -95,6 +95,7 @@
         soapMessage = parentSoapMsg;
         envelope = soapEnvelope;
         document = soapEnvelope.getOwnerDocument();
+        envelope.setSOAPPartParent(this);
     }
 
     public SOAPPartImpl(SOAPMessageImpl parentSoapMsg,
@@ -219,6 +220,7 @@
                     (org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl)soapEnvelope);
             envelope.element.build();
             this.document = envelope.getOwnerDocument();
+            envelope.setSOAPPartParent(this);
             javax.xml.transform.Source xmlSource =
                     new javax.xml.transform.stream.StreamSource( isReader);
             this.source = xmlSource;
@@ -401,6 +403,7 @@
                     (org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl)soapEnvelope);
             envelope.element.build();
             this.document = envelope.getOwnerDocument();
+            envelope.setSOAPPartParent(this);
         } catch (TransformerFactoryConfigurationError e) {
             log.error(e);
             throw new SOAPException(e);

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=636345&r1=636344&r2=636345&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 Mar 12 07:41:35 2008
@@ -19,6 +19,8 @@
 package org.apache.axis2.saaj;
 
 import junit.framework.TestCase;
+
+import org.apache.axiom.soap.impl.dom.soap11.SOAP11Factory;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
@@ -28,6 +30,7 @@
 import javax.xml.soap.Name;
 import javax.xml.soap.SOAPBody;
 import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPHeaderElement;
 import javax.xml.soap.SOAPMessage;
@@ -185,5 +188,61 @@
         } catch (Exception e) {
             fail("Unexpected Exception " + e);
         }
+    }
+    
+    /**
+     * Check parent processing of SOAPMessage
+     */
+    public void test_parentAccess1() throws Exception {
+
+        MessageFactory mf = MessageFactory.newInstance();
+        SOAPMessage m = mf.createMessage();
+        SOAPPart sp = m.getSOAPPart();
+        Node node = sp.getParentNode();
+        assertTrue(node == null);
+        
+        SOAPElement e = sp.getParentElement();
+        assertTrue(node == null);
+    }
+    
+    /**
+     * Check parent processing of SOAPMessage
+     */
+    public void test_parentAccess2() throws Exception {
+
+        MessageFactory mf = MessageFactory.newInstance();
+        SOAPMessage m = mf.createMessage();
+        SOAPPart sp = m.getSOAPPart();
+        SOAPEnvelope se = sp.getEnvelope();
+        Node node = se.getParentNode();
+        assertTrue(node == sp);
+        node = node.getParentNode();
+        assertTrue(node == null);
+
+        SOAPElement e = se.getParentElement();
+        assertTrue(node == null);
+    }
+    
+    /**
+     * Check parent processing of SOAPMessage
+     */
+    public void test_parentAccess3() throws Exception {
+
+        SOAP11Factory axiomSF = new SOAP11Factory();
+        org.apache.axiom.soap.SOAPEnvelope axiomSE = axiomSF.createSOAPEnvelope();
+        org.apache.axiom.soap.SOAPMessage axiomSM = axiomSF.createSOAPMessage(axiomSE, null);
+        
+        SOAPEnvelopeImpl se = 
+            new SOAPEnvelopeImpl((org.apache.axiom.soap.impl.dom.SOAPEnvelopeImpl)axiomSE);
+        SOAPMessageImpl sm = new SOAPMessageImpl(se);
+        SOAPPartImpl sp = new SOAPPartImpl(sm, se);
+        
+        Node node = se.getParentNode();
+        assertTrue(node == sp);
+        node = node.getParentNode();
+        assertTrue(node == null);
+
+        SOAPElement e = se.getParentElement();
+        assertTrue(node == null);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org