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 he...@apache.org on 2005/02/02 08:32:06 UTC
svn commit: r149494 - in
webservices/axis/trunk/java/dev/scratch/prototype2/src:
java/org/apache/axis/engine/AxisEngine.java
java/org/apache/axis/impl/llom/OMElementImpl.java
java/org/apache/axis/impl/llom/OMNodeImpl.java
test/org/apache/axis/om/OMTestUtils.java
Author: hemapani
Date: Tue Feb 1 23:32:03 2005
New Revision: 149494
URL: http://svn.apache.org/viewcvs?view=rev&rev=149494
Log:
fixed the pooling and the OMElement HashMap handling
Modified:
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/engine/AxisEngine.java
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMElementImpl.java
webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMNodeImpl.java
webservices/axis/trunk/java/dev/scratch/prototype2/src/test/org/apache/axis/om/OMTestUtils.java
Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/engine/AxisEngine.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/engine/AxisEngine.java?view=diff&r1=149493&r2=149494
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/engine/AxisEngine.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/engine/AxisEngine.java Tue Feb 1 23:32:03 2005
@@ -128,6 +128,7 @@
//startet rolling
chain.invoke(context);
} catch (AxisFault error) {
+ //error.printStackTrace();
handleFault(context, error);
}
}
Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMElementImpl.java?view=diff&r1=149493&r2=149494
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMElementImpl.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMElementImpl.java Tue Feb 1 23:32:03 2005
@@ -24,9 +24,6 @@
import org.apache.axis.om.OMText;
import org.apache.axis.om.OMXMLParserWrapper;
-
-
-
/**
* Copyright 2001-2004 The Apache Software Foundation.
* <p/>
@@ -43,33 +40,45 @@
* limitations under the License.
* <p/>
*/
-public class OMElementImpl extends OMNamedNodeImpl implements OMElement, OMConstants {
- private OMNode firstChild;
- protected OMXMLParserWrapper builder;
- private HashMap namespaces;
- private HashMap attributes;
-
-
- public OMElementImpl(){
- namespaces = new HashMap(5);
- this.attributes = new HashMap();
- }
-
- public void free(){
- this.namespaces.clear();
- this.attributes.clear();
- if(firstChild != null){
- firstChild.free();
- }
-
- OMFactory.newInstance().free(this);
- if(nextSibling != null){
- nextSibling.free();
- }
-
- }
+public class OMElementImpl
+ extends OMNamedNodeImpl
+ implements OMElement, OMConstants {
+ private OMNode firstChild;
+ protected OMXMLParserWrapper builder;
+ private HashMap namespaces = null;
+ private HashMap attributes = null;
+
+ public OMElementImpl() {
+ }
- public void init(String localName, OMNamespace ns, OMElement parent, OMXMLParserWrapper builder) {
+ public void free() {
+ if(attributes != null){
+ this.attributes.clear();
+ CollectionPool.returnHashMap(attributes);
+ attributes = null;
+ }
+ if(namespaces !=null){
+ this.namespaces.clear();
+ CollectionPool.returnHashMap(namespaces);
+ namespaces = null;
+ }
+
+ if (firstChild != null) {
+ firstChild.free();
+ }
+
+ OMFactory.newInstance().free(this);
+ if (nextSibling != null) {
+ nextSibling.free();
+ }
+
+ }
+
+ public void init(
+ String localName,
+ OMNamespace ns,
+ OMElement parent,
+ OMXMLParserWrapper builder) {
super.init(localName, null, parent);
if (ns != null) {
setNamespace(handleNamespace(ns));
@@ -79,474 +88,527 @@
firstChild = null;
}
- public void init(String localName, OMNamespace ns) {
- super.init(localName, null, null);
+ public void init(String localName, OMNamespace ns) {
+ super.init(localName, null, null);
this.done = true;
- if (ns != null) {
- setNamespace(handleNamespace(ns));
- }
-
- }
-
- private OMNamespace handleNamespace(OMNamespace ns) {
-
- OMNamespace namespace = findInScopeNamespace(ns.getName(), ns.getPrefix());
- if (namespace == null) {
- namespace = declareNamespace(ns);
- }
-
- return namespace;
- }
-
-
-
- /**
- * This will add child to the element. One can decide whether he append the child or he adds to the
- * front of the children list
- *
- * @param child
- */
- public void addChild(OMNode child) {
- addChild((OMNodeImpl) child);
- }
-
- /**
- * This will search for children with a given QName and will return an iterator to traverse through
- * the OMNodes.
- * This QName can contain any combination of prefix, localname and URI
- *
- * @param elementQName
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public Iterator getChildrenWithName(QName elementQName) throws OMException {
- return new OMChildrenQNameIterator((OMNodeImpl) getFirstChild(), elementQName);
- }
-
- public OMNode getChildWithName(QName elementQName) throws OMException {
- OMChildrenQNameIterator omChildrenQNameIterator = new OMChildrenQNameIterator((OMNodeImpl) getFirstChild(), elementQName);
- OMNode omNode = null;
- if(omChildrenQNameIterator.hasNext()){
- omNode = (OMNode) omChildrenQNameIterator.next();
- }
-
- return omNode;
- }
-
- private void addChild(OMNodeImpl child) {
- if (firstChild == null && !done)
- builder.next();
- child.setPreviousSibling(null);
- child.setNextSibling(firstChild);
- if (firstChild != null) {
- OMNodeImpl firstChildImpl = (OMNodeImpl) firstChild;
- firstChildImpl.setPreviousSibling(child);
- }
- child.setParent(this);
-// child.setComplete(true);
- firstChild = child;
- }
-
- /**
- * This will give the next sibling. This can be an OMAttribute for OMAttribute or OMText or OMELement for others.
- *
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public OMNode getNextSibling() throws OMException {
- while (!done)
- builder.next();
- return super.getNextSibling();
- }
-
- /**
- * This returns a collection of this element.
- * Children can be of types OMElement, OMText.
- */
- public Iterator getChildren() {
- return new OMChildrenIterator(getFirstChild());
- }
-
- // --------------------- Namespace Methods ------------------------------------------------------------
- /**
- * THis will create a namespace in the current element scope
- *
- * @param uri
- * @param prefix
- * @return
- */
- public OMNamespace declareNamespace(String uri, String prefix) {
- OMNamespaceImpl ns = new OMNamespaceImpl(uri, prefix);
- namespaces.put(prefix,ns);
- return ns;
- }
-
- //TODO correct this
- public void setValue(String value) {
- OMText txt = OMFactory.newInstance().createText(value);
- this.addChild(txt);
- }
-
- /**
- * @param namespace
- * @return
- */
- public OMNamespace declareNamespace(OMNamespace namespace) {
- namespaces.put(namespace.getPrefix(),namespace);
- return namespace;
- }
-
- /**
- * This will find a namespace with the given uri and prefix, in the scope of the docuemnt.
- * This will start to find from the current element and goes up in the hiararchy until this finds one.
- * If none is found, return null
- *
- * @param uri
- * @param prefix
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public OMNamespace findInScopeNamespace(String uri, String prefix) throws OMException {
-
- // check in the current element
- OMNamespace namespace = findDeclaredNamespace(uri, prefix);
- if (namespace != null) {
- return namespace;
- }
- // go up to check with ancestors
- if (parent != null)
- return parent.findInScopeNamespace(uri, prefix);
- return null;
- }
-
- /**
- * This will ckeck for the namespace <B>only</B> in the current Element
- *
- * @param uri
- * @param prefix
- * @return
- * @throws OMException
- */
- public OMNamespace findDeclaredNamespace(String uri, String prefix) throws OMException {
- if (prefix == null) {
- Iterator namespaceListIterator = namespaces.values().iterator();
- while (namespaceListIterator.hasNext()) {
- OMNamespace omNamespace = (OMNamespace) namespaceListIterator.next();
- if (omNamespace.getName().equals(uri)) {
- return omNamespace;
- }
- }
- return null;
- } else {
- return (OMNamespace)namespaces.get(prefix);
- }
- }
-
- public Iterator getAllDeclaredNamespaces() {
- return namespaces.values().iterator();
- }
-
- // ---------------------------------------------------------------------------------------------------------------
-
- /**
- * This will help to search for an attribute with a given QName within this Element
- *
- * @param qname
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public OMAttribute getAttributeWithQName(QName qname) throws OMException {
- return (OMAttribute)attributes.get(qname);
- }
-
- /**
- * This will return a List of OMAttributes
- *
- * @return
- */
- public Iterator getAttributes() {
- return attributes.values().iterator();
- }
-
- /**
- * This will insert attribute to this element. Implementor can decide as to insert this
- * in the front or at the end of set of attributes
- *
- * @param attr
- */
- public OMAttribute insertAttribute(OMAttribute attr) {
- attributes.put(attr.getQName(),attr);
-
- return attr;
- }
-
- public void removeAttribute(OMAttribute attr) {
- attributes.remove(attr.getQName());
- }
-
- public OMAttribute insertAttribute(String attributeName, String value, OMNamespace ns) {
- OMNamespace namespace = null;
- if (ns != null) {
- namespace = findInScopeNamespace(ns.getName(), ns.getPrefix());
- if (namespace == null) {
- throw new OMException("Given OMNamespace(" + ns.getName() + ns.getPrefix() + ") for " +
- "this attribute is not declared in the scope of this element. First declare the namespace" +
- " and then use it with the attribute");
- }
- }
- return insertAttribute(new OMAttributeImpl(attributeName, ns, value));
- }
-
- public void setBuilder(OMXMLParserWrapper wrapper) {
- this.builder = wrapper;
- }
-
- public OMXMLParserWrapper getBuilder() {
- return builder;
- }
-
- /**
- * This will force the parser to proceed, if parser has not yet finished with the XML input
- */
- public void buildNext() {
- builder.next();
- }
-
- public OMNode getFirstChild() {
- while (firstChild == null && !done)
- buildNext();
- return firstChild;
- }
-
-
- public void setFirstChild(OMNode firstChild) {
- this.firstChild = firstChild;
- }
-
-
- /**
- * This will remove this information item and its children, from the model completely
- *
- * @throws org.apache.axis.om.OMException
- */
- public void detach() throws OMException {
- if (done)
- super.detach();
- else
- builder.discard(this);
- }
-
- public boolean isComplete() {
- return done;
- }
-
- /**
- * This will return the literal value of the node.
- * OMText --> the text
- * OMElement --> local name of the element in String format
- * OMAttribute --> the value of the attribue
- *
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public String getValue() throws OMException {
- throw new UnsupportedOperationException();
- }
-
- /**
- * This is to get the type of node, as this is the super class of all the nodes
- *
- * @return
- * @throws org.apache.axis.om.OMException
- */
- public short getType() throws OMException {
- return OMNode.ELEMENT_NODE;
- }
-
- /**
- *
- */
- public XMLStreamReader getPullParser(boolean cacheOff) {
- if (builder == null && cacheOff)
- throw new UnsupportedOperationException("This element was not created in a manner to be switched");
- return new OMStAXWrapper(builder, this, cacheOff);
- }
-
-
- public void serialize(XMLStreamWriter writer, boolean cache) throws XMLStreamException {
- boolean firstElement = false;
-
-
- short builderType = PULL_TYPE_BUILDER; //default is pull type
- if (builder != null)
- builderType = this.builder.getBuilderType();
- if (builderType == PUSH_TYPE_BUILDER && builder.getRegisteredContentHandler()==null) {
- builder.registerExternalContentHandler(new StreamWriterToContentHandlerConverter(writer)); //for now only SAX
- }
-
- //Special case for the pull type building with cache off
- //The getPullParser 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.getPullParser(!cache), writer);
- return;
- }
- }
-
- if (!cache) {
- if (isComplete()) {
- //serialize own normally
- serializeNormal(writer, cache);
-
- if (nextSibling != null) {
- //serilize next sibling
- nextSibling.serialize(writer, cache);
- } 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);
- firstChild.serialize(writer, cache);
- serializeEndpart(writer);
- } else {
- //do the special serilization
- //Only the push serializer is left now
- builder.setCache(cache);
- serializeStartpart(writer);
- builder.next();
- serializeEndpart(writer);
- }
-
-
- } else {
- //serialize own normally
- serializeNormal(writer, cache);
- //serialize the siblings if this is not the first element
- if (!firstElement){
- OMNode nextSibling = this.getNextSibling();
- if (nextSibling != null) {
- nextSibling.serialize(writer, cache);
- }
- }
- }
-
-
- }
-
- 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 {
- throw new OMException("Non namespace qualified elements are not allowed");
-
- }
-
- }else{
- 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();
- while (namespaces.hasNext()) {
- serializeNamespace((OMNamespace) namespaces.next(), writer) ;
- }
-
-
- }
-
- private void serializeEndpart(XMLStreamWriter writer) throws XMLStreamException {
- writer.writeEndElement();
- }
-
- private void serializeNormal(XMLStreamWriter writer, boolean cache) throws XMLStreamException {
- serializeStartpart(writer);
-
- OMNode firstChild = getFirstChild();
- if (firstChild != null) {
- firstChild.serialize(writer, cache);
- }
-
- serializeEndpart(writer);
-
- }
-
- 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());
- }
- }
-
- 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);
- }
- }
- }
-
- protected void finalize() throws Throwable {
- CollectionPool.returnHashMap(attributes);
- CollectionPool.returnHashMap(namespaces);
- super.finalize();
- }
+ if (ns != null) {
+ setNamespace(handleNamespace(ns));
+ }
+
+ }
+
+ private OMNamespace handleNamespace(OMNamespace ns) {
+
+ OMNamespace namespace =
+ findInScopeNamespace(ns.getName(), ns.getPrefix());
+ if (namespace == null) {
+ namespace = declareNamespace(ns);
+ }
+
+ return namespace;
+ }
+
+ /**
+ * This will add child to the element. One can decide whether he append the child or he adds to the
+ * front of the children list
+ *
+ * @param child
+ */
+ public void addChild(OMNode child) {
+ addChild((OMNodeImpl) child);
+ }
+
+ /**
+ * This will search for children with a given QName and will return an iterator to traverse through
+ * the OMNodes.
+ * This QName can contain any combination of prefix, localname and URI
+ *
+ * @param elementQName
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public Iterator getChildrenWithName(QName elementQName)
+ throws OMException {
+ return new OMChildrenQNameIterator(
+ (OMNodeImpl) getFirstChild(),
+ elementQName);
+ }
+
+ public OMNode getChildWithName(QName elementQName) throws OMException {
+ OMChildrenQNameIterator omChildrenQNameIterator =
+ new OMChildrenQNameIterator(
+ (OMNodeImpl) getFirstChild(),
+ elementQName);
+ OMNode omNode = null;
+ if (omChildrenQNameIterator.hasNext()) {
+ omNode = (OMNode) omChildrenQNameIterator.next();
+ }
+
+ return omNode;
+ }
+
+ private void addChild(OMNodeImpl child) {
+ if (firstChild == null && !done)
+ builder.next();
+ child.setPreviousSibling(null);
+ child.setNextSibling(firstChild);
+ if (firstChild != null) {
+ OMNodeImpl firstChildImpl = (OMNodeImpl) firstChild;
+ firstChildImpl.setPreviousSibling(child);
+ }
+ child.setParent(this);
+ // child.setComplete(true);
+ firstChild = child;
+ }
+
+ /**
+ * This will give the next sibling. This can be an OMAttribute for OMAttribute or OMText or OMELement for others.
+ *
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public OMNode getNextSibling() throws OMException {
+ while (!done)
+ builder.next();
+ return super.getNextSibling();
+ }
+
+ /**
+ * This returns a collection of this element.
+ * Children can be of types OMElement, OMText.
+ */
+ public Iterator getChildren() {
+ return new OMChildrenIterator(getFirstChild());
+ }
+
+ // --------------------- Namespace Methods ------------------------------------------------------------
+ /**
+ * THis will create a namespace in the current element scope
+ *
+ * @param uri
+ * @param prefix
+ * @return
+ */
+ public OMNamespace declareNamespace(String uri, String prefix) {
+ OMNamespaceImpl ns = new OMNamespaceImpl(uri, prefix);
+ return declareNamespace(ns);
+ }
+
+ //TODO correct this
+ public void setValue(String value) {
+ OMText txt = OMFactory.newInstance().createText(value);
+ this.addChild(txt);
+ }
+
+ /**
+ * @param namespace
+ * @return
+ */
+ public OMNamespace declareNamespace(OMNamespace namespace) {
+ if(namespaces == null){
+ this.namespaces = CollectionPool.createHashMap(5);
+ }
+ namespaces.put(namespace.getPrefix(), namespace);
+ return namespace;
+ }
+
+ /**
+ * This will find a namespace with the given uri and prefix, in the scope of the docuemnt.
+ * This will start to find from the current element and goes up in the hiararchy until this finds one.
+ * If none is found, return null
+ *
+ * @param uri
+ * @param prefix
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public OMNamespace findInScopeNamespace(String uri, String prefix)
+ throws OMException {
+
+ // check in the current element
+ OMNamespace namespace = findDeclaredNamespace(uri, prefix);
+ if (namespace != null) {
+ return namespace;
+ }
+ // go up to check with ancestors
+ if (parent != null)
+ return parent.findInScopeNamespace(uri, prefix);
+ return null;
+ }
+
+ /**
+ * This will ckeck for the namespace <B>only</B> in the current Element
+ *
+ * @param uri
+ * @param prefix
+ * @return
+ * @throws OMException
+ */
+ public OMNamespace findDeclaredNamespace(String uri, String prefix)
+ throws OMException {
+ if(namespaces == null){
+ return null;
+ }
+ if (prefix == null) {
+ Iterator namespaceListIterator = namespaces.values().iterator();
+ while (namespaceListIterator.hasNext()) {
+ OMNamespace omNamespace =
+ (OMNamespace) namespaceListIterator.next();
+ if (omNamespace.getName().equals(uri)) {
+ return omNamespace;
+ }
+ }
+ return null;
+ } else {
+ return (OMNamespace) namespaces.get(prefix);
+ }
+ }
+
+ public Iterator getAllDeclaredNamespaces() {
+ if(namespaces == null){
+ return null;
+ }
+ return namespaces.values().iterator();
+ }
+
+ // ---------------------------------------------------------------------------------------------------------------
+
+ /**
+ * This will help to search for an attribute with a given QName within this Element
+ *
+ * @param qname
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public OMAttribute getAttributeWithQName(QName qname) throws OMException {
+ if(attributes == null){
+ return null;
+ }
+ return (OMAttribute) attributes.get(qname);
+ }
+
+ /**
+ * This will return a List of OMAttributes
+ *
+ * @return
+ */
+ public Iterator getAttributes() {
+ if(attributes == null){
+ return null;
+ }
+ return attributes.values().iterator();
+ }
+
+ /**
+ * This will insert attribute to this element. Implementor can decide as to insert this
+ * in the front or at the end of set of attributes
+ *
+ * @param attr
+ */
+ public OMAttribute insertAttribute(OMAttribute attr) {
+ if(attributes == null){
+ this.attributes = CollectionPool.createHashMap(5);
+ }
+
+ attributes.put(attr.getQName(), attr);
+
+ return attr;
+ }
+
+ public void removeAttribute(OMAttribute attr) {
+ if(attributes != null){
+ attributes.remove(attr.getQName());
+ }
+ }
+
+ public OMAttribute insertAttribute(
+ String attributeName,
+ String value,
+ OMNamespace ns) {
+ OMNamespace namespace = null;
+ if (ns != null) {
+ namespace = findInScopeNamespace(ns.getName(), ns.getPrefix());
+ if (namespace == null) {
+ throw new OMException(
+ "Given OMNamespace("
+ + ns.getName()
+ + ns.getPrefix()
+ + ") for "
+ + "this attribute is not declared in the scope of this element. First declare the namespace"
+ + " and then use it with the attribute");
+ }
+ }
+ return insertAttribute(new OMAttributeImpl(attributeName, ns, value));
+ }
+
+ public void setBuilder(OMXMLParserWrapper wrapper) {
+ this.builder = wrapper;
+ }
+
+ public OMXMLParserWrapper getBuilder() {
+ return builder;
+ }
+
+ /**
+ * This will force the parser to proceed, if parser has not yet finished with the XML input
+ */
+ public void buildNext() {
+ builder.next();
+ }
+
+ public OMNode getFirstChild() {
+ while (firstChild == null && !done)
+ buildNext();
+ return firstChild;
+ }
+
+ public void setFirstChild(OMNode firstChild) {
+ this.firstChild = firstChild;
+ }
+
+ /**
+ * This will remove this information item and its children, from the model completely
+ *
+ * @throws org.apache.axis.om.OMException
+ */
+ public void detach() throws OMException {
+ if (done)
+ super.detach();
+ else
+ builder.discard(this);
+ }
+
+ public boolean isComplete() {
+ return done;
+ }
+
+ /**
+ * This will return the literal value of the node.
+ * OMText --> the text
+ * OMElement --> local name of the element in String format
+ * OMAttribute --> the value of the attribue
+ *
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public String getValue() throws OMException {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * This is to get the type of node, as this is the super class of all the nodes
+ *
+ * @return
+ * @throws org.apache.axis.om.OMException
+ */
+ public short getType() throws OMException {
+ return OMNode.ELEMENT_NODE;
+ }
+
+ /**
+ *
+ */
+ public XMLStreamReader getPullParser(boolean cacheOff) {
+ if (builder == null && cacheOff)
+ throw new UnsupportedOperationException("This element was not created in a manner to be switched");
+ return new OMStAXWrapper(builder, this, cacheOff);
+ }
+
+ public void serialize(XMLStreamWriter writer, boolean cache)
+ throws XMLStreamException {
+ boolean firstElement = false;
+
+ short builderType = PULL_TYPE_BUILDER; //default is pull type
+ if (builder != null)
+ builderType = this.builder.getBuilderType();
+ if (builderType == PUSH_TYPE_BUILDER
+ && builder.getRegisteredContentHandler() == null) {
+ builder.registerExternalContentHandler(
+ new StreamWriterToContentHandlerConverter(writer));
+ //for now only SAX
+ }
+
+ //Special case for the pull type building with cache off
+ //The getPullParser 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.getPullParser(!cache),
+ writer);
+ return;
+ }
+ }
+
+ if (!cache) {
+ if (isComplete()) {
+ //serialize own normally
+ serializeNormal(writer, cache);
+
+ if (nextSibling != null) {
+ //serilize next sibling
+ nextSibling.serialize(writer, cache);
+ } 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);
+ firstChild.serialize(writer, cache);
+ serializeEndpart(writer);
+ } else {
+ //do the special serilization
+ //Only the push serializer is left now
+ builder.setCache(cache);
+ serializeStartpart(writer);
+ builder.next();
+ serializeEndpart(writer);
+ }
+
+ } else {
+ //serialize own normally
+ serializeNormal(writer, cache);
+ //serialize the siblings if this is not the first element
+ if (!firstElement) {
+ OMNode nextSibling = this.getNextSibling();
+ if (nextSibling != null) {
+ nextSibling.serialize(writer, cache);
+ }
+ }
+ }
+
+ }
+
+ 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 {
+ throw new OMException("Non namespace qualified elements are not allowed");
+
+ }
+
+ } else {
+ 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);
+ }
+ }
+ }
+
+ private void serializeEndpart(XMLStreamWriter writer)
+ throws XMLStreamException {
+ writer.writeEndElement();
+ }
+
+ private void serializeNormal(XMLStreamWriter writer, boolean cache)
+ throws XMLStreamException {
+ serializeStartpart(writer);
+
+ OMNode firstChild = getFirstChild();
+ if (firstChild != null) {
+ firstChild.serialize(writer, cache);
+ }
+
+ serializeEndpart(writer);
+
+ }
+
+ 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());
+ }
+ }
+
+ 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);
+ }
+ }
+ }
}
Modified: webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMNodeImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMNodeImpl.java?view=diff&r1=149493&r2=149494
==============================================================================
--- webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMNodeImpl.java (original)
+++ webservices/axis/trunk/java/dev/scratch/prototype2/src/java/org/apache/axis/impl/llom/OMNodeImpl.java Tue Feb 1 23:32:03 2005
@@ -207,7 +207,10 @@
public void free(){
OMFactory.newInstance().free(this);
- nextSibling.free();
+ if(nextSibling != null){
+ nextSibling.free();
+ }
+
}
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&r1=149493&r2=149494
==============================================================================
--- 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 Tue Feb 1 23:32:03 2005
@@ -37,21 +37,24 @@
public static void walkThrough(OMElement omEle){
Iterator attibIt = omEle.getAttributes();
- while(attibIt.hasNext()){
- TestCase.assertNotNull("once the has next is not null, the " +
- "element should not be null",attibIt.next());
+ if(attibIt!= null){
+ while(attibIt.hasNext()){
+ TestCase.assertNotNull("once the has next is not null, the " +
+ "element should not be null",attibIt.next());
+ }
}
Iterator it = omEle.getChildren();
- while(it.hasNext()){
- OMNode ele = (OMNode)it.next();
- TestCase.assertNotNull("once the has next is not null, the " +
- "element should not be null",ele);
+ if(it != null){
+ while(it.hasNext()){
+ OMNode ele = (OMNode)it.next();
+ TestCase.assertNotNull("once the has next is not null, the " +
+ "element should not be null",ele);
- if(ele instanceof OMElement){
- walkThrough((OMElement)ele);
- }
+ if(ele instanceof OMElement){
+ walkThrough((OMElement)ele);
+ }
+ }
}
-
}
public static void compare(Element ele,OMElement omele) throws Exception{
@@ -69,7 +72,7 @@
Attr domAttribute;
String DOMAttrName;
- while (attIterator.hasNext() && map == null) {
+ while (attIterator != null && attIterator.hasNext() && map == null) {
omattribute = (OMAttribute)attIterator.next();
Node node = map.getNamedItemNS(omattribute.getNamespace().getName(),omattribute.getLocalName());