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 aj...@apache.org on 2004/12/20 07:18:26 UTC

svn commit: r122826 - in webservices/axis/trunk/java/dev/scratch/prototype2/src: java/org/apache/axis/impl/llom/serialize test/org/apache/axis/om test/org/apache/axis/om/impl/seriliazer

Author: ajith
Date: Sun Dec 19 22:18:24 2004
New Revision: 122826

URL: http://svn.apache.org/viewcvs?view=rev&rev=122826
Log:
Made some bug fixes in the serializers. However the fix is not very "elegant" and will be improved soon
Modified:
   webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java
   webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java
   webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java
   webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java
   webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java
Url: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java?view=diff&rev=122826&p1=webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java&r1=122825&p2=webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java&r2=122826
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java	(original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/SimpleOMSerializer.java	Sun Dec 19 22:18:24 2004
@@ -6,7 +6,7 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import java.util.Iterator;
-import java.util.Vector;
+import java.util.Stack;
 
 /**
  * Copyright 2001-2004 The Apache Software Foundation.
@@ -25,7 +25,8 @@
  */
 public class SimpleOMSerializer {
 
-    private Vector prefixList = new Vector();
+    private Stack prefixStack = new Stack();
+
 
     public void serialize(Object omNode, XMLStreamWriter writer) throws XMLStreamException {
 
@@ -58,29 +59,26 @@
      */
     protected void serializeElement(OMElement element, XMLStreamWriter writer) throws XMLStreamException {
 
+        int nsPushCount = 0;
         OMNamespace ns = element.getNamespace();
         String prefix = null;
         String nameSpaceName = null;
+
         if (ns != null) {
             prefix = ns.getPrefix();
             nameSpaceName = ns.getName();
+
             if (prefix != null) {
                 writer.writeStartElement(prefix, element.getLocalName(), nameSpaceName);
-                if (!prefixList.contains(prefix)) {
-                    writer.writeNamespace(prefix, nameSpaceName);
-                    prefixList.add(prefix);
-                }
+                if (serializeNamespace(ns, writer))
+                        nsPushCount++;
             } else {
                 writer.writeStartElement(nameSpaceName, element.getLocalName());
                 //add the own namespace
-                writer.writeDefaultNamespace(nameSpaceName);
-
-
+                // writer.writeDefaultNamespace(nameSpaceName);
             }
         }
 
-
-
         //add the elements attributes
         Iterator attributes = element.getAttributes();
         while (attributes.hasNext()) {
@@ -89,15 +87,13 @@
 
         //add the namespaces
         Iterator namespaces = element.getAllDeclaredNamespaces();
-        if (namespaces != null) {
-            while (namespaces.hasNext()) {
-                serializeNamespace((OMNamespace) namespaces.next(), writer);
-            }
+        while (namespaces.hasNext()) {
+            if (serializeNamespace((OMNamespace) namespaces.next(), writer))
+                    nsPushCount++;
         }
 
-        //add the children                                        hiiii
+        //add the children
         Iterator children = element.getChildren();
-
         while (children.hasNext()) {
             Object node = children.next();
             if (node != null) {
@@ -106,7 +102,10 @@
         }
 
         writer.writeEndElement();
-
+        //remove the namespace prefixes from the stack
+        for (int i=0;i<nsPushCount;i++){
+            prefixStack.pop();
+        }
     }
 
     /**
@@ -138,7 +137,7 @@
         String prefix = null;
         String namespaceName = null;
         if (ns != null) {
-//add the prefix if it's availble
+            //add the prefix if it's availble
             prefix = ns.getPrefix();
             namespaceName = ns.getName();
 
@@ -153,13 +152,28 @@
     }
 
 
-    protected void serializeNamespace(OMNamespace namespace, XMLStreamWriter writer) throws XMLStreamException {
+//    protected void serializeNamespace(OMNamespace namespace, XMLStreamWriter writer) throws XMLStreamException {
+//        if (namespace != null) {
+//            String prefix = namespace.getPrefix();
+//            if (!prefixStack.contains(prefix)) {
+//                writer.writeNamespace(prefix, namespace.getName());
+//                prefixStack.add(prefix);
+//            }
+//        }
+//    }
+
+    protected boolean serializeNamespace(OMNamespace namespace, XMLStreamWriter writer) throws XMLStreamException {
+        boolean nsWritten = false;
         if (namespace != null) {
             String prefix = namespace.getPrefix();
-            if (!prefixList.contains(prefix))
+            if (!prefixStack.contains(prefix)) {
                 writer.writeNamespace(prefix, namespace.getName());
-
+                prefixStack.push(prefix);
+                nsWritten = true;
+            }
         }
+
+        return nsWritten;
     }
 
 }

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java
Url: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java?view=diff&rev=122826&p1=webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java&r1=122825&p2=webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java&r2=122826
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java	(original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/serialize/StreamingOMSerializer.java	Sun Dec 19 22:18:24 2004
@@ -5,6 +5,7 @@
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 import java.util.Vector;
+import java.util.Stack;
 
 
 /**
@@ -24,7 +25,8 @@
  */
 public class StreamingOMSerializer implements XMLStreamConstants {
 
-    private Vector prefixList = new Vector();
+    private Stack prefixStack = new Stack();
+    private Stack nsCountStack = new Stack();
 
     public void serialize(Object obj, XMLStreamWriter writer) throws XMLStreamException {
 
@@ -60,34 +62,36 @@
 
      */
     protected void serializeElement(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
-
+        int nsPushCount=0;
         String prefix = reader.getPrefix();
         String nameSpaceName = reader.getNamespaceURI();
         if (prefix != null) {
             writer.writeStartElement(prefix, reader.getLocalName(), nameSpaceName);
-            //add the own namespace
-            if (!prefixList.contains(prefix)) {
-                writer.writeNamespace(prefix, nameSpaceName);
-                prefixList.add(prefix);
-            }
+            if (serializeNamespace(prefix, nameSpaceName,writer)) nsPushCount++;
         } else {
             writer.writeStartElement(nameSpaceName, reader.getLocalName());
             //add the own namespace
             writer.writeDefaultNamespace(nameSpaceName);
-
         }
 
-
-
         //add attributes
         serializeAttributes(reader, writer);
         //add the namespaces
-        serializeNamespaces(reader, writer);
+        int count = reader.getNamespaceCount();
+        for (int i = 0; i < count; i++) {
+            if (serializeNamespace(reader.getNamespacePrefix(i) ,reader.getNamespaceURI(i), writer)) nsPushCount++;
+        }
 
+        nsCountStack.push(new Integer(nsPushCount));
 
     }
 
     protected void serializeEndElement(XMLStreamWriter writer) throws XMLStreamException {
+        Integer removeCount = (Integer)nsCountStack.pop();
+        int count = removeCount.intValue();
+        for (int i=0;i<count;i++)
+            prefixStack.pop();
+        
         writer.writeEndElement();
     }
 
@@ -132,18 +136,14 @@
         }
     }
 
-
-    protected void serializeNamespaces(XMLStreamReader reader, XMLStreamWriter writer) throws XMLStreamException {
-        int count = reader.getNamespaceCount();
-        String namespacePrefix;
-        for (int i = 0; i < count; i++) {
-            namespacePrefix = reader.getNamespacePrefix(i);
-            if (!prefixList.contains(namespacePrefix)) {
-                writer.writeNamespace(namespacePrefix, reader.getNamespaceURI(i));
-                prefixList.add(namespacePrefix);
-            }
+    private boolean serializeNamespace(String prefix,String URI, XMLStreamWriter writer) throws XMLStreamException {
+        boolean nsWritten = false;
+        if (!prefixStack.contains(prefix)) {
+            writer.writeNamespace(prefix,URI );
+            prefixStack.push(prefix);
+            nsWritten = true;
         }
-
+        return nsWritten;
     }
 
 }

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java
Url: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java?view=diff&rev=122826&p1=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java&r1=122825&p2=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java&r2=122826
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java	(original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMNavigatorTest.java	Sun Dec 19 22:18:24 2004
@@ -34,7 +34,7 @@
 
     private SOAPEnvelope envelope = null;
     private SimpleOMSerializer serilizer;
-    private StAXSOAPModelBuilder builder;
+    private OMXMLParserWrapper builder;
     private File tempFile;
     private XMLStreamWriter writer;
 
@@ -47,7 +47,7 @@
                 createXMLStreamReader(new FileReader(getTestResourceFile("soap/soapmessage1.xml")));
         OMFactory factory = OMFactory.newInstance();
         builder = new StAXSOAPModelBuilder(factory, xmlStreamReader);
-        envelope = builder.getOMEnvelope();
+        envelope = (SOAPEnvelope)builder.getDocumentElement();
         serilizer = new SimpleOMSerializer();
         tempFile = File.createTempFile("temp", "xml");
         writer = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileOutputStream(tempFile));

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java
Url: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java?view=diff&rev=122826&p1=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java&r1=122825&p2=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java&r2=122826
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java	(original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java	Sun Dec 19 22:18:24 2004
@@ -27,6 +27,7 @@
 
 import org.apache.axis.impl.llom.builder.StAXBuilder;
 import org.apache.axis.impl.llom.builder.StAXSOAPModelBuilder;
+import org.apache.axis.impl.llom.factory.OMXMLBuilderFactory;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -35,7 +36,7 @@
 
     public static OMXMLParserWrapper getOMBuilder(File file) throws Exception {
         XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(new FileReader(file));
-        StAXBuilder builder =   new StAXSOAPModelBuilder(OMFactory.newInstance(),parser);
+        OMXMLParserWrapper builder =   OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMFactory.newInstance(),parser);
         return builder;
     }
     

Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java
Url: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java?view=diff&rev=122826&p1=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java&r1=122825&p2=webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java&r2=122826
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java	(original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/impl/seriliazer/OMSerailizerTest.java	Sun Dec 19 22:18:24 2004
@@ -1,13 +1,10 @@
 package org.apache.axis.om.impl.seriliazer;
 
-import junit.framework.TestCase;
 import org.apache.axis.impl.llom.serialize.StreamingOMSerializer;
+import org.apache.axis.impl.llom.serialize.SimpleOMSerializer;
 import org.apache.axis.impl.llom.factory.OMXMLBuilderFactory;
 import org.apache.axis.AbstractTestCase;
-import org.apache.axis.om.OMFactory;
-import org.apache.axis.om.OMXMLParserWrapper;
-import org.apache.axis.om.SOAPEnvelope;
-import org.apache.axis.om.SOAPBody;
+import org.apache.axis.om.*;
 
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLInputFactory;
@@ -48,7 +45,7 @@
         tempFile = File.createTempFile("temp", "xml");
         writer = XMLOutputFactory.newInstance().
                 createXMLStreamWriter(new FileOutputStream(tempFile));
-//         writer = XMLOutputFactory.newInstance().
+//        writer = XMLOutputFactory.newInstance().
 //                createXMLStreamWriter(System.out);
     }
 
@@ -75,7 +72,69 @@
         serializer.serialize(body.getPullParser(false), writer);
     }
 
+    public void testElement() throws Exception {
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMFactory.newInstance(),
+                reader);
+        SOAPEnvelope env = (SOAPEnvelope) builder.getDocumentElement();
+        SOAPBody body = env.getBody();
+        SimpleOMSerializer serializer = new SimpleOMSerializer();
+
+        serializer.serialize(body, writer);
+    }
+
+    public void testCompleteElement() throws Exception {
+        OMXMLParserWrapper builder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(OMFactory.newInstance(),
+                reader);
+        SOAPEnvelope env = (SOAPEnvelope) builder.getDocumentElement();
+        SimpleOMSerializer serializer = new SimpleOMSerializer();
+        serializer.serialize(env, writer);
+    }
+
+    public void testDualNamespaces1() throws Exception {
+        OMFactory factory = OMFactory.newInstance();
+        OMNamespace ns1 = factory.createOMNamespace("bar","x");
+        OMNamespace ns2 = factory.createOMNamespace("bar","y");
+
+        OMElement root = factory.createOMElement("root",ns1);
+        OMElement elt11 = factory.createOMElement("foo1",ns1);
+        OMElement elt12 = factory.createOMElement("foo2",ns1);
+        OMElement elt21 = factory.createOMElement("yuck",ns2);
+        OMElement elt22 = factory.createOMElement("yuck",ns2);
+
+//        OMText txt1 = factory.createText(elt2,"blah");
+
+        elt11.addChild(elt21);
+        elt12.addChild(elt22);
+        root.addChild(elt11);
+        root.addChild(elt12);
+
+
+        SimpleOMSerializer serializer = new SimpleOMSerializer();
+        serializer.serialize(root, writer);
+    }
+
+    public void testDualNamespaces2() throws Exception {
+        OMFactory factory = OMFactory.newInstance();
+
+        OMNamespace ns1 = factory.createOMNamespace("bar","x");
+        OMElement root = factory.createOMElement("root",ns1);
+
+        OMNamespace ns2 = root.declareNamespace("bar","y");
+
+        OMElement elt1 = factory.createOMElement("foo",ns1);
+        OMElement elt2 = factory.createOMElement("yuck",ns2);
+
+
+        OMText txt1 = factory.createText(elt2,"blah");
+
+        elt2.addChild(txt1);
+        elt1.addChild(elt2);
+        root.addChild(elt1);
+
+        SimpleOMSerializer serializer = new SimpleOMSerializer();
+        serializer.serialize(root, writer);
+    }
     protected void tearDown() throws Exception {
-           tempFile.delete();
+        tempFile.delete();
     }
 }