You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ve...@apache.org on 2014/07/10 23:51:14 UTC

svn commit: r1609578 - in /axis/axis2/java/core/trunk/modules/saaj: ./ src/org/apache/axis2/saaj/ test/org/apache/axis2/saaj/

Author: veithen
Date: Thu Jul 10 21:51:14 2014
New Revision: 1609578

URL: http://svn.apache.org/r1609578
Log:
SAAJ:
* Eliminate usage of Axiom's internal setParent method.
* Use the new SAAJ test suite from Axiom.
* Fixed some bugs in the implementation.
* Removed two invalid test cases (that don't pass with the SAAJ reference implementation).

Added:
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java
      - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java   (contents, props changed)
      - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java   (with props)
    axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java
      - copied, changed from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java
Removed:
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java
Modified:
    axis/axis2/java/core/trunk/modules/saaj/pom.xml
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
    axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java
    axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java

Modified: axis/axis2/java/core/trunk/modules/saaj/pom.xml
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/pom.xml?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/pom.xml (original)
+++ axis/axis2/java/core/trunk/modules/saaj/pom.xml Thu Jul 10 21:51:14 2014
@@ -101,6 +101,12 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.apache.ws.commons.axiom</groupId>
+            <artifactId>saaj-testsuite</artifactId>
+            <version>${axiom.version}</version>
+            <scope>test</scope>
+        </dependency>
         <!-- This is required on IBM JDKs (and potentially others) because saaj-impl depends
              on Sun's internal copy of Xerces. See AXIS2-4228. -->
         <dependency>

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java Thu Jul 10 21:51:14 2014
@@ -18,19 +18,16 @@
  */
 package org.apache.axis2.saaj;
 
-import javax.xml.soap.SOAPElement;
-
+import org.apache.axiom.om.OMComment;
 import org.w3c.dom.Comment;
 
 public class CommentImpl extends TextImplEx implements Comment {
-
-    public CommentImpl(String data, SOAPElement parent) {
-        super(data, parent);
+    public CommentImpl(OMComment textNode) {
+        super(textNode);
     }
 
-    public CommentImpl(String data, SOAPElement parent,
-                       org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) {
-        super(data, parent, prevSibling, nextSibling);
+    public CommentImpl(String data) {
+        super(data);
     }
 
     public boolean isComment() {

Copied: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java)
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java?p2=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java&r1=1608843&r2=1609578&rev=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java Thu Jul 10 21:51:14 2014
@@ -18,22 +18,12 @@
  */
 package org.apache.axis2.saaj;
 
-import javax.xml.soap.SOAPElement;
+import javax.xml.soap.Node;
 
-import org.w3c.dom.Comment;
+import org.apache.axiom.om.OMNode;
 
-public class CommentImpl extends TextImplEx implements Comment {
-
-    public CommentImpl(String data, SOAPElement parent) {
-        super(data, parent);
-    }
-
-    public CommentImpl(String data, SOAPElement parent,
-                       org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) {
-        super(data, parent, prevSibling, nextSibling);
-    }
-
-    public boolean isComment() {
-        return true;
+public abstract class NodeImpl<T extends org.w3c.dom.Node, S extends OMNode> extends ProxyNode<T,S> implements Node {
+    public NodeImpl(T target, S omTarget) {
+        super(target, omTarget);
     }
 }

Copied: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java)
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java?p2=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java&r1=1608843&r2=1609578&rev=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJNode.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java Thu Jul 10 21:51:14 2014
@@ -19,10 +19,14 @@
 
 package org.apache.axis2.saaj;
 
+import org.apache.axiom.om.OMComment;
 import org.apache.axiom.om.OMContainer;
+import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMInformationItem;
 import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.OMText;
 import org.apache.axiom.soap.SOAPBody;
 import org.apache.axiom.soap.SOAPEnvelope;
 import org.apache.axiom.soap.SOAPFault;
@@ -31,17 +35,15 @@ import org.apache.axiom.soap.SOAPFaultNo
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.w3c.dom.Attr;
-import org.w3c.dom.Comment;
 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.NodeList;
-import org.w3c.dom.Text;
 import org.w3c.dom.TypeInfo;
 import org.w3c.dom.UserDataHandler;
 
-import javax.xml.soap.Node;
 import javax.xml.soap.SOAPElement;
 import javax.xml.soap.SOAPException;
 
@@ -50,15 +52,16 @@ import javax.xml.soap.SOAPException;
  * some tree manipulation methods. This interface provides methods for getting the value of a node,
  * for getting and setting the parent of a node, and for removing a node.
  */
-public abstract class SAAJNode<T extends org.w3c.dom.Node, S extends OMNode> implements Node {
+public abstract class ProxyNode<T extends org.w3c.dom.Node, S extends OMInformationItem> implements Node {
     protected final T target;
     protected final S omTarget;
     protected SOAPElement parentElement;
     static final String SAAJ_NODE = "saaj.node";
 
-    public SAAJNode(T target, S omTarget) {
+    public ProxyNode(T target, S omTarget) {
         this.target = target;
         this.omTarget = omTarget;
+        target.setUserData(SAAJ_NODE, this, null);
     }
 
     public final T getTarget() {
@@ -159,7 +162,7 @@ public abstract class SAAJNode<T extends
      * @param domNode
      * @return the SAAJ Node corresponding to the domNode
      */
-    javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
+    Node toSAAJNode(Node domNode) {
         return toSAAJNode(domNode, this);
     }
     
@@ -169,7 +172,7 @@ public abstract class SAAJNode<T extends
      * @param domNode
      * @return the SAAJ Node corresponding to the domNode
      */
-    static javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode, Node parentNode) {
+    static Node toSAAJNode(Node domNode, Node parentNode) {
         if (domNode == null) {
             return null;
         }
@@ -177,42 +180,17 @@ public abstract class SAAJNode<T extends
         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)saajNode;
-            
-            saajTextNode.setPreviousSibling(prevSiblingDOMNode);
-            saajTextNode.setNextSibling(nextSiblingDOMNode);
-        }
         return saajNode;
     }
 
-    private static javax.xml.soap.Node toSAAJNode2(org.w3c.dom.Node domNode, Node parentNode) {
+    private static Node toSAAJNode2(Node domNode, Node parentNode) {
         if (domNode == null) {
             return null;
         }
         if (domNode instanceof org.w3c.dom.Text) {
-            Text text = (Text)domNode;
-            org.w3c.dom.Node prevSiblingDOMNode = text.getPreviousSibling();
-            org.w3c.dom.Node nextSiblingDOMNode = text.getNextSibling();
-            SOAPElementImpl<OMElement> parent = new SOAPElementImpl<OMElement>((OMElement)domNode.getParentNode());
-            TextImplEx saajTextNode =
-                    new TextImplEx(text.getData(), parent, prevSiblingDOMNode, nextSiblingDOMNode);
-            domNode.setUserData(SAAJ_NODE, saajTextNode, null);
-            return saajTextNode;
+            return new TextImplEx((OMText)domNode);
         } else if (domNode instanceof org.w3c.dom.Comment) {
-            Comment comment = (Comment)domNode;
-            org.w3c.dom.Node prevSiblingDOMNode = comment.getPreviousSibling();
-            org.w3c.dom.Node nextSiblingDOMNode = comment.getNextSibling();
-            SOAPElementImpl<OMElement> parent = new SOAPElementImpl<OMElement>((OMElement)domNode.getParentNode());
-            CommentImpl saajTextNode = new CommentImpl(comment.getData(),
-                                                     parent, prevSiblingDOMNode,
-                                                     nextSiblingDOMNode);
-            domNode.setUserData(SAAJ_NODE, saajTextNode, null);
-            return saajTextNode;
+            return new CommentImpl((OMComment)domNode);
         } else if (domNode instanceof SOAPBody) {
             javax.xml.soap.SOAPBody saajSOAPBody =
                     new org.apache.axis2.saaj.SOAPBodyImpl((SOAPBody)domNode);
@@ -249,27 +227,7 @@ public abstract class SAAJNode<T extends
             domNode.setUserData(SAAJ_NODE, saajSOAPHeader, null);
             return saajSOAPHeader;
         } else if (domNode instanceof Document) {
-            
-            // Must be a SOAPEnvelope
-            if (!(parentNode instanceof org.apache.axis2.saaj.SOAPEnvelopeImpl)) {
-                return null;
-            }
-            org.apache.axis2.saaj.SOAPEnvelopeImpl saajEnv = 
-                (org.apache.axis2.saaj.SOAPEnvelopeImpl) parentNode;
-            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;
+            return new SAAJDocument((OMDocument)domNode);
         } else { // instanceof org.apache.axis2.om.impl.dom.ElementImpl
             SOAPElementImpl<OMElement> saajSOAPElement = new SOAPElementImpl<OMElement>((OMElement)domNode);
             domNode.setUserData(SAAJ_NODE, saajSOAPElement, null);
@@ -363,8 +321,8 @@ public abstract class SAAJNode<T extends
     }
 
     public final org.w3c.dom.Node removeChild(org.w3c.dom.Node oldChild) throws DOMException {
-        if (oldChild instanceof SAAJNode) {
-            oldChild = ((SAAJNode<?,?>)oldChild).getTarget();
+        if (oldChild instanceof ProxyNode) {
+            oldChild = ((ProxyNode<?,?>)oldChild).getTarget();
         }
         return target.removeChild(oldChild);
     }
@@ -374,11 +332,11 @@ public abstract class SAAJNode<T extends
     }
 
     public final short getNodeType() {
-        return parentElement.getNodeType();
+        return target.getNodeType();
     }
 
     public final Document getOwnerDocument() {
-        return target.getOwnerDocument();
+        return (Document)toSAAJNode(target.getOwnerDocument());
     }
 
     public final String getLocalName() {
@@ -422,10 +380,11 @@ public abstract class SAAJNode<T extends
             throw new DOMException(DOMException.WRONG_DOCUMENT_ERR, "Wrong document");
         }
         try {
-            if (child instanceof Text) {
-                return appendText((Text)child);
-            } else if (child instanceof Element) {
+            if (child instanceof Element) {
                 return appendElement((Element)child);
+            } else {
+                target.appendChild(((ProxyNode<?,?>)child).target);
+                return child;
             }
         } catch (SOAPException e) {
             DOMException ex = 
@@ -433,24 +392,13 @@ public abstract class SAAJNode<T extends
             ex.initCause(e);
             throw ex;
         }
-        throw new DOMException(DOMException.HIERARCHY_REQUEST_ERR,
-                "An attempt was made to insert a node where it is not permitted.");
-    }
-
-    protected Text appendText(Text child) throws SOAPException {
-        String text = child.getData();
-        Text textNode = getOwnerDocument().createTextNode(text);
-        target.appendChild(textNode);
-        TextImplEx saajTextNode = new TextImplEx(text, (SOAPElement)this);
-        textNode.setUserData(SAAJ_NODE, saajTextNode, null);
-        return saajTextNode;
     }
     
     protected Element appendElement(Element child) throws SOAPException {
         String namespaceURI = child.getNamespaceURI();
         String prefix = child.getPrefix();
 
-        SOAPElementImpl<OMElement> childEle = new SOAPElementImpl<OMElement>((OMElement)child);
+        SOAPElementImpl<OMElement> childEle = (SOAPElementImpl<OMElement>)child;
         
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
         if (namespaceURI != null && namespaceURI.trim().length() > 0) {
@@ -469,4 +417,12 @@ public abstract class SAAJNode<T extends
     public final NamedNodeMap getAttributes() {
         return target.getAttributes();
     }
+
+    public final org.w3c.dom.Node getNextSibling() {
+        return toSAAJNode(target.getNextSibling());
+    }
+
+    public final org.w3c.dom.Node getPreviousSibling() {
+        return toSAAJNode(target.getPreviousSibling());
+    }
 }

Propchange: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/ProxyNode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java?rev=1609578&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java (added)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java Thu Jul 10 21:51:14 2014
@@ -0,0 +1,179 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axis2.saaj;
+
+import org.apache.axiom.om.OMDocument;
+import org.w3c.dom.Attr;
+import org.w3c.dom.CDATASection;
+import org.w3c.dom.Comment;
+import org.w3c.dom.DOMConfiguration;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.DocumentType;
+import org.w3c.dom.Element;
+import org.w3c.dom.EntityReference;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.ProcessingInstruction;
+import org.w3c.dom.Text;
+
+public final class SAAJDocument extends ProxyNode<Document,OMDocument> implements Document {
+    public SAAJDocument(OMDocument target) {
+        super((Document)target, target);
+    }
+
+    public String getValue() {
+        throw new UnsupportedOperationException();
+    }
+
+    public void setValue(String value) {
+        throw new UnsupportedOperationException();
+    }
+
+    public Node adoptNode(Node arg0) throws DOMException {
+        return target.adoptNode(arg0);
+    }
+
+    public Attr createAttribute(String arg0) throws DOMException {
+        return target.createAttribute(arg0);
+    }
+
+    public Attr createAttributeNS(String arg0, String arg1) throws DOMException {
+        return target.createAttributeNS(arg0, arg1);
+    }
+
+    public CDATASection createCDATASection(String arg0) throws DOMException {
+        return (CDATASection)toSAAJNode(target.createCDATASection(arg0));
+    }
+
+    public Comment createComment(String arg0) {
+        return (Comment)toSAAJNode(target.createComment(arg0));
+    }
+
+    public DocumentFragment createDocumentFragment() {
+        return target.createDocumentFragment();
+    }
+
+    public Element createElement(String arg0) throws DOMException {
+        return (Element)toSAAJNode(target.createElement(arg0));
+    }
+
+    public Element createElementNS(String arg0, String arg1) throws DOMException {
+        return (Element)toSAAJNode(target.createElementNS(arg0, arg1));
+    }
+
+    public EntityReference createEntityReference(String arg0) throws DOMException {
+        return target.createEntityReference(arg0);
+    }
+
+    public ProcessingInstruction createProcessingInstruction(String arg0, String arg1)
+            throws DOMException {
+        return target.createProcessingInstruction(arg0, arg1);
+    }
+
+    public Text createTextNode(String arg0) {
+        return (Text)toSAAJNode(target.createTextNode(arg0));
+    }
+
+    public DocumentType getDoctype() {
+        return target.getDoctype();
+    }
+
+    public Element getDocumentElement() {
+        return target.getDocumentElement();
+    }
+
+    public String getDocumentURI() {
+        return target.getDocumentURI();
+    }
+
+    public DOMConfiguration getDomConfig() {
+        return target.getDomConfig();
+    }
+
+    public Element getElementById(String arg0) {
+        return target.getElementById(arg0);
+    }
+
+    public NodeList getElementsByTagName(String arg0) {
+        return target.getElementsByTagName(arg0);
+    }
+
+    public NodeList getElementsByTagNameNS(String arg0, String arg1) {
+        return target.getElementsByTagNameNS(arg0, arg1);
+    }
+
+    public DOMImplementation getImplementation() {
+        return target.getImplementation();
+    }
+
+    public String getInputEncoding() {
+        return target.getInputEncoding();
+    }
+
+    public Node getParentNode() {
+        return target.getParentNode();
+    }
+
+    public boolean getStrictErrorChecking() {
+        return target.getStrictErrorChecking();
+    }
+
+    public String getXmlEncoding() {
+        return target.getXmlEncoding();
+    }
+
+    public boolean getXmlStandalone() {
+        return target.getXmlStandalone();
+    }
+
+    public String getXmlVersion() {
+        return target.getXmlVersion();
+    }
+
+    public Node importNode(Node arg0, boolean arg1) throws DOMException {
+        return target.importNode(arg0, arg1);
+    }
+
+    public void normalizeDocument() {
+        target.normalizeDocument();
+    }
+
+    public Node renameNode(Node arg0, String arg1, String arg2) throws DOMException {
+        return target.renameNode(arg0, arg1, arg2);
+    }
+
+    public void setDocumentURI(String arg0) {
+        target.setDocumentURI(arg0);
+    }
+
+    public void setStrictErrorChecking(boolean arg0) {
+        target.setStrictErrorChecking(arg0);
+    }
+
+    public void setXmlStandalone(boolean arg0) throws DOMException {
+        target.setXmlStandalone(arg0);
+    }
+
+    public void setXmlVersion(String arg0) throws DOMException {
+        target.setXmlVersion(arg0);
+    }
+}

Propchange: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SAAJDocument.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPBodyImpl.java Thu Jul 10 21:51:14 2014
@@ -64,7 +64,7 @@ public class SOAPBodyImpl extends SOAPEl
             throw new SOAPException("A SOAPFault has been already added to this SOAPBody");
         }
         SOAPBodyElementImpl<OMElement> childEle =
-                new SOAPBodyElementImpl<OMElement>((OMElement)getOwnerDocument().createElement(localName));
+                new SOAPBodyElementImpl<OMElement>((OMElement)target.getOwnerDocument().createElement(localName));
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
         target.appendChild(childEle.target);
         childEle.target.getParentNode().setUserData(SAAJ_NODE, this, null);
@@ -80,7 +80,7 @@ public class SOAPBodyImpl extends SOAPEl
         }
         SOAPBodyElementImpl<OMElement> childEle =
                 new SOAPBodyElementImpl<OMElement>(
-                        (OMElement)getOwnerDocument().createElementNS(namespaceURI,
+                        (OMElement)target.getOwnerDocument().createElementNS(namespaceURI,
                                                                         localName));
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
         childEle.omTarget.setNamespace(childEle.omTarget.declareNamespace(namespaceURI, prefix));
@@ -95,7 +95,7 @@ public class SOAPBodyImpl extends SOAPEl
         String namespaceURI = child.getNamespaceURI();
         String prefix = child.getPrefix();
 
-        SOAPBodyElementImpl<OMElement> childEle = new SOAPBodyElementImpl<OMElement>((OMElement)child);
+        SOAPBodyElementImpl<?> childEle = toSOAPBodyElement(child);
 
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
         if (namespaceURI != null && namespaceURI.trim().length() > 0) {
@@ -107,6 +107,14 @@ public class SOAPBodyImpl extends SOAPEl
         return childEle;
     }
     
+    private SOAPBodyElementImpl<?> toSOAPBodyElement(Element element) {
+        if (element instanceof SOAPBodyElementImpl) {
+            return (SOAPBodyElementImpl<?>)element;
+        } else {
+            return new SOAPBodyElementImpl<OMElement>(((SOAPElementImpl<?>)element).omTarget);
+        }
+    }
+    
     public SOAPElement addChildElement(SOAPElement soapElement) throws SOAPException {
         String namespaceURI = soapElement.getNamespaceURI();
         String prefix = soapElement.getPrefix();
@@ -163,14 +171,14 @@ public class SOAPBodyImpl extends SOAPEl
         SOAPBodyElementImpl<OMElement> childEle;
         if (uri == null || "".equals(uri)) {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                    (OMElement)getOwnerDocument().createElement(localName));
+                    (OMElement)target.getOwnerDocument().createElement(localName));
         } else if (prefix.length() == 0) {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                (OMElement)getOwnerDocument().createElementNS(uri,
+                (OMElement)target.getOwnerDocument().createElementNS(uri,
                                                                 localName));
         } else {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                    (OMElement)getOwnerDocument().createElementNS(uri,
+                    (OMElement)target.getOwnerDocument().createElementNS(uri,
                                                                     prefix + ":" + localName));
         }
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
@@ -399,11 +407,11 @@ public class SOAPBodyImpl extends SOAPEl
         }
         if (node instanceof org.w3c.dom.Text) {
             org.w3c.dom.Text domText = (org.w3c.dom.Text)node;
-            return new TextImplEx(domText.getData(), parent);
+            return new TextImplEx(domText.getData());
         }
         if (node instanceof org.w3c.dom.Comment) {
             org.w3c.dom.Comment domText = (org.w3c.dom.Comment)node;
-            return new CommentImpl(domText.getData(), parent);
+            return new CommentImpl(domText.getData());
         }
         Element domEle = ((Element)node);
         int indexOfColon = domEle.getTagName().indexOf(":");
@@ -496,14 +504,14 @@ public class SOAPBodyImpl extends SOAPEl
         SOAPBodyElementImpl<OMElement> childEle;
         if (qname.getNamespaceURI() == null || "".equals(qname.getNamespaceURI())) {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                    (OMElement)getOwnerDocument().createElement(qname.getLocalPart()));
+                    (OMElement)target.getOwnerDocument().createElement(qname.getLocalPart()));
         }else if(null == qname.getPrefix() || "".equals(qname.getPrefix().trim())) {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                    (OMElement)getOwnerDocument().createElementNS(qname.getNamespaceURI(),
+                    (OMElement)target.getOwnerDocument().createElementNS(qname.getNamespaceURI(),
                                                                             qname.getLocalPart()));
         }else {
             childEle = new SOAPBodyElementImpl<OMElement>(
-                    (OMElement)getOwnerDocument().createElementNS(qname.getNamespaceURI(),
+                    (OMElement)target.getOwnerDocument().createElementNS(qname.getNamespaceURI(),
                                                                     qname.getPrefix() + ":" +
                                                                             qname.getLocalPart()));
         }
@@ -568,7 +576,7 @@ public class SOAPBodyImpl extends SOAPEl
         Collection childElements = new ArrayList();
         while (childIter.hasNext()) {
             org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next();
-            Node saajNode = toSAAJNode(domNode);
+            org.w3c.dom.Node saajNode = toSAAJNode(domNode);
             if (saajNode instanceof javax.xml.soap.Text) {
                 childElements.add(saajNode);
             } else if (!(saajNode instanceof SOAPBodyElement)) {

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPElementImpl.java Thu Jul 10 21:51:14 2014
@@ -23,8 +23,6 @@ import org.apache.axiom.om.OMAttribute;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.OMText;
-import org.apache.axiom.om.impl.OMElementEx;
 import org.apache.axiom.soap.SOAP11Version;
 import org.apache.axiom.soap.SOAP12Version;
 import org.apache.axiom.soap.SOAPFactory;
@@ -53,7 +51,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 
-public class SOAPElementImpl<T extends OMElement> extends SAAJNode<Element,T> implements SOAPElement {
+public class SOAPElementImpl<T extends OMElement> extends NodeImpl<Element,T> implements SOAPElement {
     private String encodingStyle;
 
     public SOAPElementImpl(T element) {
@@ -102,7 +100,7 @@ public class SOAPElementImpl<T extends O
         } else {
             omTarget.declareNamespace(namespaceURI, prefix);
             childEle =
-                new SOAPElementImpl<OMElement>((OMElement)getOwnerDocument().createElementNS(namespaceURI,
+                new SOAPElementImpl<OMElement>((OMElement)target.getOwnerDocument().createElementNS(namespaceURI,
                                                                                     localName));
         }
         
@@ -138,9 +136,8 @@ public class SOAPElementImpl<T extends O
         if (prefix == null) {
             prefix = "";
         }
-        SOAPElementImpl<OMElement> childEle =
-                new SOAPElementImpl<OMElement>((OMElement)getOwnerDocument().
-                        createElementNS(namespaceURI, prefix.length() == 0 ? localName : prefix + ":" + localName));
+        SOAPElementImpl<OMElement> childEle = (SOAPElementImpl<OMElement>)getOwnerDocument().
+                        createElementNS(namespaceURI, prefix.length() == 0 ? localName : prefix + ":" + localName);
     
         childEle.target.setUserData(SAAJ_NODE, childEle, null);
         childEle.omTarget.setNamespace(prefix.length() == 0
@@ -204,9 +201,7 @@ public class SOAPElementImpl<T extends O
         //Therefore create a text node and add it
         //TODO: May need to address the situation where the prev sibling of the textnode itself is a textnode
         Text textNode = getOwnerDocument().createTextNode(text);
-        target.appendChild(textNode);
-        TextImplEx saajTextNode = new TextImplEx((OMText)textNode, this);
-        textNode.setUserData(SAAJ_NODE, saajTextNode, null);
+        appendChild(textNode);
         return this;
     }
 
@@ -655,7 +650,7 @@ public class SOAPElementImpl<T extends O
      */
     public SOAPElement getParentElement() {
         if (this.parentElement == null) {
-            javax.xml.soap.Node parentNode = toSAAJNode(target.getParentNode());
+            Node parentNode = toSAAJNode(target.getParentNode());
             if (parentNode instanceof SOAPElement) {
                 this.parentElement = (SOAPElement) parentNode;
             }
@@ -665,7 +660,7 @@ public class SOAPElementImpl<T extends O
 
     public void setParentElement(SOAPElement parent) throws SOAPException {
         this.parentElement = parent;
-        ((OMElementEx)this.omTarget).setParent(((SOAPElementImpl<? extends OMElement>)parent).omTarget);
+        (((SOAPElementImpl<? extends OMElement>)parent).omTarget).addChild(this.omTarget);
     }
 
     /**
@@ -709,15 +704,6 @@ public class SOAPElementImpl<T extends O
         return parentNode;
     }
 
-    /** dom Node method */
-    public org.w3c.dom.Node getNextSibling() {
-        return toSAAJNode(target.getNextSibling());
-    }
-
-    public Node getPreviousSibling() {
-        return toSAAJNode(target.getPreviousSibling());
-    }
-
     /**
      * If this is a Text node then this method will set its value, otherwise it sets the value of
      * the immediate (Text) child of this node. The value of the immediate child of this node can be

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPFaultImpl.java Thu Jul 10 21:51:14 2014
@@ -755,7 +755,7 @@ public class SOAPFaultImpl extends SOAPB
         Collection childElements = new ArrayList();
         while (childIter.hasNext()) {
             org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next();
-            Node saajNode = toSAAJNode(domNode);
+            org.w3c.dom.Node saajNode = toSAAJNode(domNode);
             if (!(saajNode instanceof SOAPFaultElement)) {
                 // silently replace node, as per saaj 1.2 spec
                 SOAPFaultElement bodyEle = new SOAPFaultElementImpl<OMElement>((OMElement)domNode);

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPHeaderImpl.java Thu Jul 10 21:51:14 2014
@@ -349,7 +349,7 @@ public class SOAPHeaderImpl extends SOAP
         Collection childElements = new ArrayList();
         while (childIter.hasNext()) {
             org.w3c.dom.Node domNode = (org.w3c.dom.Node)childIter.next();
-            Node saajNode = toSAAJNode(domNode);
+            org.w3c.dom.Node saajNode = toSAAJNode(domNode);
             if (saajNode instanceof javax.xml.soap.Text) {
                 childElements.add(saajNode);
             } else if (!(saajNode instanceof SOAPHeaderElement)) {

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Thu Jul 10 21:51:14 2014
@@ -1192,7 +1192,7 @@ public class SOAPPartImpl extends SOAPPa
     	throw new IllegalStateException("Cannot set value of SOAPPart.");
     }
     
-    javax.xml.soap.Node toSAAJNode(org.w3c.dom.Node domNode) {
-        return SAAJNode.toSAAJNode(domNode, this);
+    Node toSAAJNode(org.w3c.dom.Node domNode) {
+        return ProxyNode.toSAAJNode(domNode, this);
     }
 }

Modified: axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/TextImplEx.java Thu Jul 10 21:51:14 2014
@@ -20,38 +20,18 @@
 package org.apache.axis2.saaj;
 
 import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMText;
+import org.apache.axiom.om.OMNode;
 import org.w3c.dom.DOMException;
 
-import javax.xml.soap.SOAPElement;
 import javax.xml.soap.Text;
 
-public class TextImplEx extends SAAJNode<org.w3c.dom.Text,OMText> implements Text {
-    private org.w3c.dom.Node previousSibling;
-    private org.w3c.dom.Node nextSibling;
-
-    public TextImplEx(String data, SOAPElement parent) {
-        this(OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM).getOMFactory().createOMText(data), parent);
-    }
-
-    public TextImplEx(OMText textNode, SOAPElement parent) {
-        super((org.w3c.dom.Text)textNode, textNode);
-        this.parentElement = parent;
-    }
-
-    public TextImplEx(String data, SOAPElement parent,
-                      org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) {
-        this(data, parent);
-        this.previousSibling = prevSibling;
-        this.nextSibling = nextSibling;
-    }
-
-    public void setNextSibling(org.w3c.dom.Node nextSibling) {
-        this.nextSibling = nextSibling;
+public class TextImplEx extends NodeImpl<org.w3c.dom.CharacterData,OMNode> implements Text {
+    public TextImplEx(String data) {
+        this(OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM).getOMFactory().createOMText(data));
     }
 
-    public void setPreviousSibling(org.w3c.dom.Node previousSibling) {
-        this.previousSibling = previousSibling;
+    public TextImplEx(OMNode textNode) {
+        super((org.w3c.dom.CharacterData)textNode, textNode);
     }
 
     /**
@@ -61,7 +41,7 @@ public class TextImplEx extends SAAJNode
      *         otherwise
      */
     public boolean isComment() {
-        String value = omTarget.getText();
+        String value = target.getData();
         return value.startsWith("<!--") && value.endsWith("-->");
     }
 
@@ -80,7 +60,7 @@ public class TextImplEx extends SAAJNode
      *                      <br>NO_MODIFICATION_ALLOWED_ERR: Raised if this node is readonly.
      */
     public org.w3c.dom.Text splitText(int offset) throws DOMException {
-        return target.splitText(offset);
+        return ((Text)target).splitText(offset);
     }
 
     public boolean isElementContentWhitespace() {
@@ -235,16 +215,6 @@ public class TextImplEx extends SAAJNode
         return getValue();
     }
 
-
-    public org.w3c.dom.Node getNextSibling() {
-        return toSAAJNode(nextSibling);
-    }
-
-
-    public org.w3c.dom.Node getPreviousSibling() {
-        return toSAAJNode(previousSibling);
-    }
-
     public int getLength() {
         return target.getLength();
     }

Copied: axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java (from r1608843, axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java)
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java?p2=axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java&p1=axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java&r1=1608843&r2=1609578&rev=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/src/org/apache/axis2/saaj/CommentImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/ImplementationTest.java Thu Jul 10 21:51:14 2014
@@ -18,22 +18,13 @@
  */
 package org.apache.axis2.saaj;
 
-import javax.xml.soap.SOAPElement;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
 
-import org.w3c.dom.Comment;
+import org.apache.axiom.ts.saaj.SAAJTestSuiteBuilder;
 
-public class CommentImpl extends TextImplEx implements Comment {
-
-    public CommentImpl(String data, SOAPElement parent) {
-        super(data, parent);
-    }
-
-    public CommentImpl(String data, SOAPElement parent,
-                       org.w3c.dom.Node prevSibling, org.w3c.dom.Node nextSibling) {
-        super(data, parent, prevSibling, nextSibling);
-    }
-
-    public boolean isComment() {
-        return true;
+public class ImplementationTest extends TestCase {
+    public static TestSuite suite() throws Exception {
+        return new SAAJTestSuiteBuilder(new SAAJMetaFactoryImpl()).build();
     }
 }

Modified: axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java?rev=1609578&r1=1609577&r2=1609578&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java (original)
+++ axis/axis2/java/core/trunk/modules/saaj/test/org/apache/axis2/saaj/SOAPPartTest.java Thu Jul 10 21:51:14 2014
@@ -196,50 +196,6 @@ public class SOAPPartTest extends Assert
         assertTrue(node == null);
     }
     
-    /**
-     * Check parent processing of SOAPMessage
-     */
-    // TODO: check why this fails with Sun's SAAJ implementation
-    @Test
-    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
-     */
-    @Validated @Test
-    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();
-        axiomSM.setSOAPEnvelope(axiomSE);
-        
-        SOAPEnvelopeImpl se = new 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);
-    }
-    
     // TODO: check why this fails with Sun's SAAJ implementation
     @Test
     public void testNodeTypes() throws Exception {