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 aj...@apache.org on 2005/05/03 12:21:36 UTC
svn commit: r167896 - in
/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom:
OMElementImpl.java OMSerializerUtil.java util/EmptyIterator.java
Author: ajith
Date: Tue May 3 03:21:36 2005
New Revision: 167896
URL: http://svn.apache.org/viewcvs?rev=167896&view=rev
Log:
Changing the OM Serializer implementation. Now the code is cleaner and probably slightly faster as well
Added:
webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMSerializerUtil.java
webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/util/EmptyIterator.java
Modified:
webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java
Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java?rev=167896&r1=167895&r2=167896&view=diff
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMElementImpl.java Tue May 3 03:21:36 2005
@@ -20,6 +20,7 @@
import org.apache.axis.om.impl.llom.serialize.StreamingOMSerializer;
import org.apache.axis.om.impl.llom.traverse.OMChildrenIterator;
import org.apache.axis.om.impl.llom.traverse.OMChildrenQNameIterator;
+import org.apache.axis.om.impl.llom.util.EmptyIterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -52,12 +53,12 @@
/**
* Field namespaces
*/
- private HashMap namespaces = null;
+ protected HashMap namespaces = null;
/**
* Field attributes
*/
- private HashMap attributes = null;
+ protected HashMap attributes = null;
/**
* Field log
@@ -67,7 +68,7 @@
/**
* Field noPrefixNamespaceCounter
*/
- private int noPrefixNamespaceCounter = 0;
+ protected int noPrefixNamespaceCounter = 0;
/**
* Constructor OMElementImpl
@@ -241,7 +242,7 @@
child.setParent(this);
-
+
child.setPreviousSibling(null);
child.setNextSibling(firstChild);
if (firstChild != null) {
@@ -390,26 +391,13 @@
*/
public Iterator getAttributes() {
if (attributes == null) {
- return new Iterator(){
-
- public void remove() {
- throw new UnsupportedOperationException();
-
- }
-
- public boolean hasNext() {
- return false; //To change body of implemented methods use File | Settings | File Templates.
- }
-
- public Object next() {
- throw new UnsupportedOperationException();
- }
- };
+ return new EmptyIterator();
}
return attributes.values().iterator();
}
public Iterator getAttributes(QName qname) {
+ //would there be multiple attributes with the same QName
return null; //ToDO
}
@@ -448,7 +436,7 @@
* @return
*/
public OMAttribute addAttribute(String attributeName, String value,
- OMNamespace ns) {
+ OMNamespace ns) {
OMNamespace namespace = null;
if (ns != null) {
namespace = findNamespace(ns.getName(), ns.getPrefix());
@@ -579,7 +567,7 @@
* @param text
*/
public void setText(String text) {
-
+
OMNode child = this.getFirstChild();
while(child != null){
if(child.getType() == OMNode.TEXT_NODE){
@@ -622,9 +610,13 @@
public void serializeWithCache(XMLStreamWriter writer) throws XMLStreamException {
serialize(writer,true);
}
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////////////////////////
+
private void serialize(XMLStreamWriter writer,boolean cache)throws XMLStreamException {
- boolean firstElement = false;
+ // select the builder
short builderType = PULL_TYPE_BUILDER; // default is pull type
if (builder != null) {
builderType = this.builder.getBuilderType();
@@ -633,74 +625,51 @@
&& (builder.getRegisteredContentHandler() == null)) {
builder.registerExternalContentHandler(
new StreamWriterToContentHandlerConverter(writer));
-
- // for now only SAX
}
- // Special case for the pull type building with cache off
- // The getXMLStreamReader method returns the current elements itself.
- if (!cache) {
- if ((firstChild == null) && (nextSibling == null) && !isComplete()
- && (builderType == PULL_TYPE_BUILDER)) {
- StreamingOMSerializer streamingOMSerializer =
- new StreamingOMSerializer();
- streamingOMSerializer.serialize(this.getXMLStreamReader(!cache),
- writer);
- return;
- }
- }
- if (!cache) {
- if (isComplete()) {
- // serializeWithCache own normally
- serializeNormal(writer, cache);
- if (nextSibling != null) {
-
- // serilize next sibling
- nextSibling.serialize(writer);
- } else {
- if (parent == null) {
- return;
- } else if (parent.isComplete()) {
- return;
- } else {
-
- // do the special serialization
- // Only the push serializer is left now
- builder.setCache(cache);
- builder.next();
- }
- }
- } else if (firstChild != null) {
- serializeStartpart(writer);
- log.info("Serializing the Element from " + localName
- + " the generated OM tree");
+ if (!cache) {
+ //No caching
+ if (this.firstChild!=null){
+ OMSerializerUtil.serializeStartpart(this,writer);
firstChild.serialize(writer);
- serializeEndpart(writer);
- } else {
-
- // do the special serilization
- // Only the push serializer is left now
- builder.setCache(cache);
- serializeStartpart(writer);
- builder.next();
- serializeEndpart(writer);
+ OMSerializerUtil.serializeEndpart(writer);
+ }else if (!this.done){
+ if (builderType==PULL_TYPE_BUILDER){
+ OMSerializerUtil.serializeByPullStream(this,writer);
+ }else{
+ OMSerializerUtil.serializeStartpart(this,writer);
+ builder.setCache(cache);
+ builder.next();
+ OMSerializerUtil.serializeEndpart(writer);
+ }
+ }else{
+ OMSerializerUtil.serializeNormal(this,writer, cache);
}
- } else {
- // serializeWithCache own normally
- serializeNormal(writer, cache);
-
- // serializeWithCache the siblings if this is not the first element
- if (!firstElement) {
- OMNode nextSibling = this.getNextSibling();
- if (nextSibling != null) {
- nextSibling.serializeWithCache(writer);
+ //serilize siblings
+ if (this.nextSibling!=null){
+ nextSibling.serialize(writer);
+ }else if (this.parent!=null){
+ if (!this.parent.done){
+ builder.setCache(cache);
+ builder.next();
}
}
+ }else{
+ //Cached
+ OMSerializerUtil.serializeNormal(this,writer, cache);
+ // serialize the siblings
+ OMNode nextSibling = this.getNextSibling();
+ if (nextSibling != null) {
+ nextSibling.serializeWithCache(writer);
+ }
}
}
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////////////////////
+
/**
* This was requested during the second Axis2 summit. When one call this method, this will
* serialise without building the object structure in the memory. Misuse of this method will
@@ -715,149 +684,6 @@
- /**
- * Method serializeStartpart
- *
- * @param writer
- * @throws XMLStreamException
- */
- private void serializeStartpart(XMLStreamWriter writer)
- throws XMLStreamException {
- String nameSpaceName = null;
- String writer_prefix = null;
- String prefix = null;
- if (ns != null) {
- nameSpaceName = ns.getName();
- writer_prefix = writer.getPrefix(nameSpaceName);
- prefix = ns.getPrefix();
- if (nameSpaceName != null) {
- if (writer_prefix != null) {
- writer.writeStartElement(nameSpaceName,
- this.getLocalName());
- } else {
- if (prefix != null) {
- writer.writeStartElement(prefix, this.getLocalName(),
- nameSpaceName);
- writer.writeNamespace(prefix, nameSpaceName);
- writer.setPrefix(prefix, nameSpaceName);
- } else {
- writer.writeStartElement(nameSpaceName,
- this.getLocalName());
- writer.writeDefaultNamespace(nameSpaceName);
- writer.setDefaultNamespace(nameSpaceName);
- }
- }
- } else {
- writer.writeStartElement(this.getLocalName());
-// throw new OMException(
-// "Non namespace qualified elements are not allowed");
- }
- } else {
- writer.writeStartElement(this.getLocalName());
-// throw new OMException(
-// "Non namespace qualified elements are not allowed");
- }
-
- // add the elements attributes
- if (attributes != null) {
- Iterator attributesList = attributes.values().iterator();
- while (attributesList.hasNext()) {
- serializeAttribute((OMAttribute) attributesList.next(), writer);
- }
- }
-
- // add the namespaces
- Iterator namespaces = this.getAllDeclaredNamespaces();
- if (namespaces != null) {
- while (namespaces.hasNext()) {
- serializeNamespace((OMNamespace) namespaces.next(), writer);
- }
- }
- }
-
- /**
- * Method serializeEndpart
- *
- * @param writer
- * @throws XMLStreamException
- */
- private void serializeEndpart(XMLStreamWriter writer)
- throws XMLStreamException {
- writer.writeEndElement();
- }
-
- /**
- * Method serializeNormal
- *
- * @param writer
- * @param cache
- * @throws XMLStreamException
- */
- private void serializeNormal(XMLStreamWriter writer, boolean cache)
- throws XMLStreamException {
- serializeStartpart(writer);
- OMNode firstChild = getFirstChild();//todo
- if (firstChild != null) {
- if (cache){
- firstChild.serializeWithCache(writer);
- }else{
- firstChild.serialize(writer);
- }
- }
- serializeEndpart(writer);
- }
-
- /**
- * Method serializeAttribute
- *
- * @param attr
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeAttribute(OMAttribute attr, XMLStreamWriter writer)
- throws XMLStreamException {
-
- // first check whether the attribute is associated with a namespace
- OMNamespace ns = attr.getNamespace();
- String prefix = null;
- String namespaceName = null;
- if (ns != null) {
-
- // add the prefix if it's availble
- prefix = ns.getPrefix();
- namespaceName = ns.getName();
- if (prefix != null) {
- writer.writeAttribute(prefix, namespaceName,
- attr.getLocalName(), attr.getValue());
- } else {
- writer.writeAttribute(namespaceName, attr.getLocalName(),
- attr.getValue());
- }
- } else {
- writer.writeAttribute(attr.getLocalName(), attr.getValue());
- }
- }
-
- /**
- * Method serializeNamespace
- *
- * @param namespace
- * @param writer
- * @throws XMLStreamException
- */
- protected void serializeNamespace(
- OMNamespace namespace, XMLStreamWriter writer)
- throws XMLStreamException {
- if (namespace != null) {
- String uri = namespace.getName();
- String prefix = writer.getPrefix(uri);
- String ns_prefix = namespace.getPrefix();
- if (prefix == null) {
- writer.writeNamespace(ns_prefix, namespace.getName());
- writer.setPrefix(ns_prefix, uri);
- }
- }
- }
/**
* Method getNextNamespacePrefix
Added: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMSerializerUtil.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMSerializerUtil.java?rev=167896&view=auto
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMSerializerUtil.java (added)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/OMSerializerUtil.java Tue May 3 03:21:36 2005
@@ -0,0 +1,188 @@
+package org.apache.axis.om.impl.llom;
+
+import org.apache.axis.om.OMAttribute;
+import org.apache.axis.om.OMNamespace;
+import org.apache.axis.om.OMElement;
+import org.apache.axis.om.OMNode;
+import org.apache.axis.om.impl.llom.serialize.StreamingOMSerializer;
+
+import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.XMLStreamException;
+import java.util.Iterator;
+
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ *
+ *
+ */
+class OMSerializerUtil {
+
+ /**
+ * Method serializeEndpart
+ *
+ * @param writer
+ * @throws javax.xml.stream.XMLStreamException
+ */
+ static void serializeEndpart(XMLStreamWriter writer)
+ throws XMLStreamException {
+ writer.writeEndElement();
+ }
+
+ /**
+ * Method serializeAttribute
+ *
+ * @param attr
+ * @param writer
+ * @throws XMLStreamException
+ */
+ static void serializeAttribute(OMAttribute attr, XMLStreamWriter writer)
+ throws XMLStreamException {
+
+ // first check whether the attribute is associated with a namespace
+ OMNamespace ns = attr.getNamespace();
+ String prefix = null;
+ String namespaceName = null;
+ if (ns != null) {
+
+ // add the prefix if it's availble
+ prefix = ns.getPrefix();
+ namespaceName = ns.getName();
+ if (prefix != null) {
+ writer.writeAttribute(prefix, namespaceName,
+ attr.getLocalName(), attr.getValue());
+ } else {
+ writer.writeAttribute(namespaceName, attr.getLocalName(),
+ attr.getValue());
+ }
+ } else {
+ writer.writeAttribute(attr.getLocalName(), attr.getValue());
+ }
+ }
+
+ /**
+ * Method serializeNamespace
+ *
+ * @param namespace
+ * @param writer
+ * @throws XMLStreamException
+ */
+ static void serializeNamespace(OMNamespace namespace, XMLStreamWriter writer)
+ throws XMLStreamException {
+ if (namespace != null) {
+ String uri = namespace.getName();
+ String prefix = writer.getPrefix(uri);
+ String ns_prefix = namespace.getPrefix();
+ if (prefix == null) {
+ writer.writeNamespace(ns_prefix, namespace.getName());
+ writer.setPrefix(ns_prefix, uri);
+ }
+ }
+ }
+
+
+ /**
+ * Method serializeStartpart
+ *
+ * @param writer
+ * @throws XMLStreamException
+ */
+ static void serializeStartpart(OMElementImpl element,XMLStreamWriter writer)
+ throws XMLStreamException {
+ String nameSpaceName = null;
+ String writer_prefix = null;
+ String prefix = null;
+ if (element.ns != null) {
+ nameSpaceName = element.ns.getName();
+ writer_prefix = writer.getPrefix(nameSpaceName);
+ prefix = element.ns.getPrefix();
+ if (nameSpaceName != null) {
+ if (writer_prefix != null) {
+ writer.writeStartElement(nameSpaceName,
+ element.getLocalName());
+ } else {
+ if (prefix != null) {
+ writer.writeStartElement(prefix, element.getLocalName(),
+ nameSpaceName);
+ writer.writeNamespace(prefix, nameSpaceName);
+ writer.setPrefix(prefix, nameSpaceName);
+ } else {
+ writer.writeStartElement(nameSpaceName,
+ element.getLocalName());
+ writer.writeDefaultNamespace(nameSpaceName);
+ writer.setDefaultNamespace(nameSpaceName);
+ }
+ }
+ } else {
+ writer.writeStartElement(element.getLocalName());
+// throw new OMException(
+// "Non namespace qualified elements are not allowed");
+ }
+ } else {
+ writer.writeStartElement(element.getLocalName());
+// throw new OMException(
+// "Non namespace qualified elements are not allowed");
+ }
+
+ // add the elements attributes
+ if (element.attributes != null) {
+ Iterator attributesList = element.attributes.values().iterator();
+ while (attributesList.hasNext()) {
+ serializeAttribute((OMAttribute) attributesList.next(), writer);
+ }
+ }
+
+ // add the namespaces
+ Iterator namespaces = element.getAllDeclaredNamespaces();
+ if (namespaces != null) {
+ while (namespaces.hasNext()) {
+ serializeNamespace((OMNamespace) namespaces.next(), writer);
+ }
+ }
+ }
+
+
+ /**
+ * Method serializeNormal
+ *
+ * @param writer
+ * @param cache
+ * @throws XMLStreamException
+ */
+ static void serializeNormal(OMElementImpl element,XMLStreamWriter writer, boolean cache)
+ throws XMLStreamException {
+
+ if (cache){
+ element.build();
+ }
+
+ serializeStartpart(element,writer);
+ OMNode firstChild = element.firstChild;
+ if (firstChild != null) {
+ if (cache){
+ firstChild.serializeWithCache(writer);
+ }else{
+ firstChild.serialize(writer);
+ }
+ }
+ serializeEndpart(writer);
+ }
+
+ static void serializeByPullStream(OMElementImpl element,XMLStreamWriter writer) throws XMLStreamException {
+ StreamingOMSerializer streamingOMSerializer = new StreamingOMSerializer();
+ streamingOMSerializer.serialize(element.getXMLStreamReaderWithoutCaching(),
+ writer);
+ return;
+ }
+}
Added: webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/util/EmptyIterator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/util/EmptyIterator.java?rev=167896&view=auto
==============================================================================
--- webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/util/EmptyIterator.java (added)
+++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis/om/impl/llom/util/EmptyIterator.java Tue May 3 03:21:36 2005
@@ -0,0 +1,36 @@
+package org.apache.axis.om.impl.llom.util;
+
+import java.util.Iterator;
+
+/*
+* Copyright 2004,2005 The Apache Software Foundation.
+*
+* Licensed 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.
+*
+* An empty Iterator implementation
+*/
+public class EmptyIterator implements Iterator {
+ public void remove() {
+ throw new UnsupportedOperationException();
+
+ }
+
+ public boolean hasNext() {
+ return false;
+ }
+
+ public Object next() {
+ throw new UnsupportedOperationException();
+ }
+}
+