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();
}
}