You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ch...@apache.org on 2005/11/30 16:42:55 UTC

svn commit: r349966 - in /webservices/axis2/trunk/java/modules: saaj/src/org/apache/axis2/om/impl/dom/ xml/src/org/apache/axis2/om/ xml/src/org/apache/axis2/om/impl/llom/ xml/test/org/apache/axis2/om/

Author: chinthaka
Date: Wed Nov 30 07:42:30 2005
New Revision: 349966

URL: http://svn.apache.org/viewcvs?rev=349966&view=rev
Log:
implemented cloning ability for OM. This is only implemented in llom and not in "doom" ( DOm on OM :) )

Modified:
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/om/impl/dom/ElementImpl.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/OMElement.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMElementImpl.java
    webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/om/OMElementCloneTest.java

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/om/impl/dom/ElementImpl.java?rev=349966&r1=349965&r2=349966&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/om/impl/dom/ElementImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/om/impl/dom/ElementImpl.java Wed Nov 30 07:42:30 2005
@@ -926,9 +926,13 @@
         ElementHelper helper = new ElementHelper(this);
         return helper.resolveQName(qname);
     }
-    
+
+    public OMElement cloneOMElement() {
+        throw new UnsupportedOperationException("Cloning is not supported yet !!");
+    }
+
     public NamedNodeMap getAttributes() {
-    	return this.attributes;
+        return this.attributes;
     }
     
     /**

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/OMElement.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/OMElement.java?rev=349966&r1=349965&r2=349966&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/OMElement.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/OMElement.java Wed Nov 30 07:42:30 2005
@@ -296,5 +296,12 @@
      */
     QName resolveQName(String qname);
 
+    /**
+     * This method will clone this element. But both elements will be build compleletely. So you will
+     * lose the differed building capability.
+     * @return
+     */
+    public OMElement cloneOMElement();
+
 
 }

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMElementImpl.java?rev=349966&r1=349965&r2=349966&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMElementImpl.java Wed Nov 30 07:42:30 2005
@@ -24,6 +24,7 @@
 import org.apache.axis2.om.impl.llom.traverse.OMChildrenIterator;
 import org.apache.axis2.om.impl.llom.traverse.OMChildrenQNameIterator;
 import org.apache.axis2.om.impl.llom.util.EmptyIterator;
+import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
 import org.apache.axis2.om.util.ElementHelper;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -32,10 +33,7 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamConstants;
-import javax.xml.stream.XMLOutputFactory;
 import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-import java.io.Writer;
 import java.util.HashMap;
 import java.util.Iterator;
 
@@ -852,5 +850,11 @@
     public QName resolveQName(String qname) {
         ElementHelper helper = new ElementHelper(this);
         return helper.resolveQName(qname);
+    }
+
+    public OMElement cloneOMElement() {
+        OMElement clonedElement = new StAXOMBuilder(this.getXMLStreamReader(true)).getDocumentElement();
+        clonedElement.build();
+        return clonedElement;
     }
 }

Modified: webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/om/OMElementCloneTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/om/OMElementCloneTest.java?rev=349966&r1=349965&r2=349966&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/om/OMElementCloneTest.java (original)
+++ webservices/axis2/trunk/java/modules/xml/test/org/apache/axis2/om/OMElementCloneTest.java Wed Nov 30 07:42:30 2005
@@ -36,7 +36,7 @@
 
     File dir = new File(TestConstants.TEST_RESOURCES, TestConstants.SOAP_DIR);
 
-    public void testElementCloning() throws Exception {
+    public void testElementCloningWithoutUsingOMElementMethod() throws Exception {
         SOAPEnvelope soapEnvelope =
                 (SOAPEnvelope) OMTestUtils.getOMBuilder(
                         new File(dir, TestConstants.SOAPMESSAGE))
@@ -45,6 +45,28 @@
 
         OMElement firstClonedBodyElement = new StAXOMBuilder(body.getXMLStreamReader()).getDocumentElement();
         OMElement secondClonedBodyElement = new StAXOMBuilder(body.getXMLStreamReader()).getDocumentElement();
+
+        // first check whether both have the same information
+        assertXMLEqual(newDocument(body.toString()), newDocument(firstClonedBodyElement.toString()));
+        assertXMLEqual(newDocument(body.toString()), newDocument(secondClonedBodyElement.toString()));
+        assertXMLEqual(newDocument(firstClonedBodyElement.toString()), newDocument(secondClonedBodyElement.toString()));
+
+        // lets check some links. They must not be equal
+        assertNotSame(body.getParent(), firstClonedBodyElement.getParent());
+        assertNotSame(body.getParent(), secondClonedBodyElement.getParent());
+        assertNotSame(firstClonedBodyElement.getParent(), secondClonedBodyElement.getParent());
+
+    }
+
+    public void testElementCloningUsingOMElementMethod() throws Exception {
+        SOAPEnvelope soapEnvelope =
+                (SOAPEnvelope) OMTestUtils.getOMBuilder(
+                        new File(dir, TestConstants.SOAPMESSAGE))
+                        .getDocumentElement();
+        SOAPBody body = soapEnvelope.getBody();
+
+        OMElement firstClonedBodyElement = body.cloneOMElement();
+        OMElement secondClonedBodyElement = body.cloneOMElement();
 
         // first check whether both have the same information
         assertXMLEqual(newDocument(body.toString()), newDocument(firstClonedBodyElement.toString()));