Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java?view=diff&rev=564731&r1=564730&r2=564731 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java Fri Aug 10 12:45:28 2007 @@ -1,497 +1,517 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -package org.apache.axiom.om.impl.llom; - -import org.apache.axiom.om.OMComment; -import org.apache.axiom.om.OMContainer; -import org.apache.axiom.om.OMDocType; -import org.apache.axiom.om.OMElement; -import org.apache.axiom.om.OMException; -import org.apache.axiom.om.OMFactory; -import org.apache.axiom.om.OMNode; -import org.apache.axiom.om.OMOutputFormat; -import org.apache.axiom.om.OMProcessingInstruction; -import org.apache.axiom.om.OMText; -import org.apache.axiom.om.OMXMLParserWrapper; -import org.apache.axiom.om.impl.MTOMXMLStreamWriter; -import org.apache.axiom.om.impl.OMContainerEx; -import org.apache.axiom.om.impl.OMNodeEx; -import org.apache.axiom.om.impl.builder.StAXOMBuilder; -import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory; -import org.apache.axiom.om.util.StAXUtils; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamWriter; -import java.io.OutputStream; -import java.io.Writer; - -/** Class OMNodeImpl */ -public abstract class OMNodeImpl implements OMNode, OMNodeEx { - /** Field parent */ - protected OMContainerEx parent; - - /** Field nextSibling */ - protected OMNodeImpl nextSibling; - - /** Field previousSibling */ - protected OMNodeImpl previousSibling; - /** Field builder */ - public OMXMLParserWrapper builder; - - /** Field done */ - protected boolean done = false; - - /** Field nodeType */ - protected int nodeType; - - protected OMFactory factory; - - /** - * Constructor OMNodeImpl - * - * @param factory The <code>OMFactory</code> that created this - */ - public OMNodeImpl(OMFactory factory) { - this.factory = factory; - } - - /** - * For a node to exist there must be a parent. - * - * @param parent Parent <code>OMContainer</code> of this node - * @param factory The <code>OMFactory</code> that created this - */ - public OMNodeImpl(OMContainer parent, OMFactory factory, boolean done) { - this.done = done; - this.factory = factory; - if ((parent != null)) { - this.parent = (OMContainerEx) parent; - parent.addChild(this); - } - - } - - /** - * Returns the immediate parent of the node. Parent is always an Element. - * - * @return Returns OMContainer. - * @throws OMException - */ - public OMContainer getParent() { - return parent; - } - - /** - * Method setParent. - * - * @param element - */ - public void setParent(OMContainer element) { - - if ((this.parent) == element) { - return; - } - - //If we are asked to assign a new parent in place - //of an existing one. We should detach this node - //from the previous parent. - if (element != null) { - if (this.parent != null) { - this.detach(); - } - this.parent = (OMContainerEx) element; - } else { - this.parent = null; - } - } - - /** - * Returns the next sibling. This can be an OMAttribute or OMText or OMElement for others. - * - * @return Returns OMNode. - * @throws org.apache.axiom.om.OMException - * - */ - public OMNode getNextOMSibling() throws OMException { - if ((nextSibling == null) && (parent != null) && !parent.isComplete()) { - parent.buildNext(); - } - return nextSibling; - } - - /** - * Method setNextOMSibling. - * - * @param node - */ - public void setNextOMSibling(OMNode node) { - if (node == null || node.getOMFactory() instanceof OMLinkedListImplFactory) { - this.nextSibling = (OMNodeImpl) node; - } else { - this.nextSibling = (OMNodeImpl) importNode(node); - } - this.nextSibling = (OMNodeImpl) node; - } - - - /** - * Indicates whether parser has parsed this information item completely or not. If some - * information is not available in the item, one has to check this attribute to make sure that, - * this item has been parsed completely or not. - * - * @return Returns boolean. - */ - public boolean isComplete() { - return done; - } - - /** - * Method setComplete. - * - * @param state - */ - public void setComplete(boolean state) { - this.done = state; - if (parent != null) { - if (!done) { - parent.setComplete(false); - } else if (parent instanceof OMElementImpl) { - ((OMElementImpl) parent).notifyChildComplete(); - } - } - } - - /** - * Removes this information item and its children, from the model completely. - * - * @throws OMException - */ - public OMNode detach() throws OMException { - if (parent == null) { - throw new OMException( - "Elements that doesn't have a parent can not be detached"); - } - OMNodeImpl nextSibling = (OMNodeImpl) getNextOMSibling(); - if (previousSibling == null) { - parent.setFirstChild(nextSibling); - } else { - ((OMNodeEx) getPreviousOMSibling()).setNextOMSibling(nextSibling); - } - if (nextSibling != null) { - nextSibling.setPreviousOMSibling(getPreviousOMSibling()); - } - - if ((parent instanceof OMElementImpl) && ((OMElementImpl) parent).lastChild == this) { - ((OMElementImpl) parent).lastChild = getPreviousOMSibling(); - } - - this.previousSibling = null; - this.nextSibling = null; - this.parent = null; - return this; - } - - /** - * Inserts a sibling just after the current information item. - * - * @param sibling - * @throws OMException - */ - public void insertSiblingAfter(OMNode sibling) throws OMException { - if (parent == null) { - throw new OMException("Parent can not be null"); - } else if (this == sibling) { - throw new OMException("Inserting self as the sibling is not allowed"); - } - ((OMNodeEx) sibling).setParent(parent); - if (sibling instanceof OMNodeImpl) { - OMNodeImpl siblingImpl = (OMNodeImpl) sibling; - if (nextSibling == null) { - getNextOMSibling(); - } - siblingImpl.setPreviousOMSibling(this); - if (nextSibling != null) { - nextSibling.setPreviousOMSibling(sibling); - } - ((OMNodeEx) sibling).setNextOMSibling(nextSibling); - nextSibling = siblingImpl; - } - } - - /** - * Inserts a sibling just before the current information item. - * - * @param sibling - * @throws OMException - */ - public void insertSiblingBefore(OMNode sibling) throws OMException { - if (parent == null) { - throw new OMException("Parent can not be null"); - } else if (this == sibling) { - throw new OMException("Inserting self as the sibling is not allowed"); - } - if (sibling instanceof OMNodeImpl) { - OMNodeImpl siblingImpl = (OMNodeImpl) sibling; - siblingImpl.nextSibling = this; - if (previousSibling == null) { - parent.setFirstChild(siblingImpl); - siblingImpl.previousSibling = null; - } else { - siblingImpl.setParent(parent); - previousSibling.setNextOMSibling(siblingImpl); - siblingImpl.setPreviousOMSibling(previousSibling); - } - previousSibling = siblingImpl; - - } - } - - /** - * Gets the type of node, as this is the super class of all the nodes. - * - * @return Returns the type of node as indicated by [EMAIL PROTECTED] #setType} - * @see #setType - */ - public int getType() { - return nodeType; - } - - /** - * Method setType. - * - * @param nodeType - * @throws OMException - */ - public void setType(int nodeType) throws OMException { - this.nodeType = nodeType; - } - - /** - * Gets the previous sibling. - * - * @return boolean - */ - public OMNode getPreviousOMSibling() { - return previousSibling; - } - - /** - * Method setPreviousOMSibling. - * - * @param previousSibling - */ - public void setPreviousOMSibling(OMNode previousSibling) { - if (previousSibling == null || - previousSibling.getOMFactory() instanceof OMLinkedListImplFactory) { - this.previousSibling = (OMNodeImpl) previousSibling; - } else { - this.previousSibling = (OMNodeImpl) importNode(previousSibling); - } - } - - /** - * Parses this node and builds the object structure in memory. However a node, created - * programmatically, will have done set to true by default and this will cause populateyourself - * not to work properly! - * - * @throws OMException - */ - public void build() throws OMException { - while (!done) { - builder.next(); - } - } - - /** - * Parses this node and builds the object structure in memory. AXIOM supports two levels of - * deffered building. First is deffered building of AXIOM using StAX. Second level is the - * deffered building of attachments. AXIOM reads in the attachements from the stream only when - * user asks by calling getDataHandler(). build() method builds the OM without the attachments. - * buildAll() builds the OM together with attachement data. This becomes handy when user wants - * to free the input stream. - */ - public void buildWithAttachments() { - if (!this.done) { - this.build(); - } - } - - /** - * Serializes the node with caching. - * - * @param xmlWriter - * @throws javax.xml.stream.XMLStreamException - * - */ - public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException { - MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(xmlWriter); - internalSerialize(writer); - writer.flush(); - } - - /** - * Serializes the node without caching. - * - * @param xmlWriter - * @throws javax.xml.stream.XMLStreamException - * - */ - public void serializeAndConsume(XMLStreamWriter xmlWriter) throws XMLStreamException { - MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(xmlWriter); - internalSerializeAndConsume(writer); - writer.flush(); - } - - /** - * Serializes the node with caching. - * - * @param writer - * @throws XMLStreamException - */ - public void internalSerialize(XMLStreamWriter writer) throws XMLStreamException { - throw new RuntimeException("Not implemented yet!"); - } - - /** - * Serializes the node without caching. - * - * @param writer - * @throws XMLStreamException - */ - public void internalSerializeAndConsume(XMLStreamWriter writer) throws XMLStreamException { - throw new RuntimeException("Not implemented yet!"); - } - - public void serialize(OutputStream output) throws XMLStreamException { - serialize(StAXUtils.createXMLStreamWriter(output)); - } - - public void serialize(Writer writer) throws XMLStreamException { - serialize(StAXUtils.createXMLStreamWriter(writer)); - } - - public void serializeAndConsume(OutputStream output) throws XMLStreamException { - serializeAndConsume(StAXUtils.createXMLStreamWriter(output)); - } - - public void serializeAndConsume(Writer writer) throws XMLStreamException { - serializeAndConsume(StAXUtils.createXMLStreamWriter(writer)); - } - - public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException { - MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format); - internalSerialize(writer); - writer.flush(); - if (format.isAutoCloseWriter()) { - writer.close(); - } - } - - public void serialize(Writer writer2, OMOutputFormat format) throws XMLStreamException { - MTOMXMLStreamWriter writer = - new MTOMXMLStreamWriter(StAXUtils.createXMLStreamWriter(writer2)); - writer.setOutputFormat(format); - internalSerialize(writer); - writer.flush(); - if (format.isAutoCloseWriter()) { - writer.close(); - } - } - - public void serializeAndConsume(OutputStream output, OMOutputFormat format) - throws XMLStreamException { - MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format); - internalSerializeAndConsume(writer); - writer.flush(); - if (format.isAutoCloseWriter()) { - writer.close(); - } - } - - public void serializeAndConsume(Writer writer2, OMOutputFormat format) - throws XMLStreamException { - MTOMXMLStreamWriter writer = - new MTOMXMLStreamWriter(StAXUtils.createXMLStreamWriter(writer2)); - writer.setOutputFormat(format); - internalSerializeAndConsume(writer); - writer.flush(); - if (format.isAutoCloseWriter()) { - writer.close(); - } - } - - public OMFactory getOMFactory() { - return this.factory; - } - - /** - * This method is intended only to be used by Axiom intenals when merging Objects from different - * Axiom implementations to the LLOM implementation. - * - * @param child - */ - protected OMNode importNode(OMNode child) { - int type = child.getType(); - switch (type) { - case (OMNode.ELEMENT_NODE): { - OMElement childElement = (OMElement) child; - OMElement newElement = (new StAXOMBuilder(this.factory, childElement - .getXMLStreamReader())).getDocumentElement(); - newElement.buildWithAttachments(); - return newElement; - } - case (OMNode.TEXT_NODE): { - OMText importedText = (OMText) child; - OMText newText; - if (importedText.isBinary()) { - boolean isOptimize = importedText.isOptimized(); - newText = this.factory.createOMText(importedText - .getDataHandler(), isOptimize); - } else if (importedText.isCharacters()) { - newText = this.factory.createOMText(null, importedText - .getTextCharacters(), importedText.getType()); - } else { - newText = this.factory.createOMText(null, importedText - .getText()/*, importedText.getOMNodeType()*/); - } - return newText; - } - - case (OMNode.PI_NODE): { - OMProcessingInstruction importedPI = (OMProcessingInstruction) child; - return factory.createOMProcessingInstruction(null, - importedPI.getTarget(), - importedPI.getValue()); - } - case (OMNode.COMMENT_NODE): { - OMComment importedComment = (OMComment) child; - return factory.createOMComment(null, importedComment.getValue()); - } - case (OMNode.DTD_NODE) : { - OMDocType importedDocType = (OMDocType) child; - return factory.createOMDocType(null, importedDocType.getValue()); - } - default: { - throw new UnsupportedOperationException( - "Not Implemented Yet for the given node type"); - } - } - } -} +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. + */ + +package org.apache.axiom.om.impl.llom; + +import org.apache.axiom.om.OMComment; +import org.apache.axiom.om.OMContainer; +import org.apache.axiom.om.OMDocType; +import org.apache.axiom.om.OMElement; +import org.apache.axiom.om.OMException; +import org.apache.axiom.om.OMFactory; +import org.apache.axiom.om.OMNode; +import org.apache.axiom.om.OMOutputFormat; +import org.apache.axiom.om.OMProcessingInstruction; +import org.apache.axiom.om.OMText; +import org.apache.axiom.om.OMXMLParserWrapper; +import org.apache.axiom.om.impl.MTOMXMLStreamWriter; +import org.apache.axiom.om.impl.OMContainerEx; +import org.apache.axiom.om.impl.OMNodeEx; +import org.apache.axiom.om.impl.builder.StAXOMBuilder; +import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory; +import org.apache.axiom.om.util.StAXUtils; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamWriter; +import java.io.OutputStream; +import java.io.Writer; + +/** Class OMNodeImpl */ +public abstract class OMNodeImpl implements OMNode, OMNodeEx { + /** Field parent */ + protected OMContainerEx parent; + + /** Field nextSibling */ + protected OMNodeImpl nextSibling; + + /** Field previousSibling */ + protected OMNodeImpl previousSibling; + /** Field builder */ + public OMXMLParserWrapper builder; + + /** Field done */ + protected boolean done = false; + + /** Field nodeType */ + protected int nodeType; + + protected OMFactory factory; + + /** + * Constructor OMNodeImpl + * + * @param factory The <code>OMFactory</code> that created this + */ + public OMNodeImpl(OMFactory factory) { + this.factory = factory; + } + + /** + * For a node to exist there must be a parent. + * + * @param parent Parent <code>OMContainer</code> of this node + * @param factory The <code>OMFactory</code> that created this + */ + public OMNodeImpl(OMContainer parent, OMFactory factory, boolean done) { + this.done = done; + this.factory = factory; + if ((parent != null)) { + this.parent = (OMContainerEx) parent; + parent.addChild(this); + } + + } + + /** + * Returns the immediate parent of the node. Parent is always an Element. + * + * @return Returns OMContainer. + * @throws OMException + */ + public OMContainer getParent() { + return parent; + } + + /** + * Method setParent. + * + * @param element + */ + public void setParent(OMContainer element) { + + if ((this.parent) == element) { + return; + } + + //If we are asked to assign a new parent in place + //of an existing one. We should detach this node + //from the previous parent. + if (element != null) { + if (this.parent != null) { + this.detach(); + } + this.parent = (OMContainerEx) element; + } else { + this.parent = null; + } + } + + /** + * Returns the next sibling. This can be an OMAttribute or OMText or OMElement for others. + * + * @return Returns OMNode. + * @throws org.apache.axiom.om.OMException + * + */ + public OMNode getNextOMSibling() throws OMException { + if ((nextSibling == null) && (parent != null) && !parent.isComplete()) { + parent.buildNext(); + } + return nextSibling; + } + + /** + * Method setNextOMSibling. + * + * @param node + */ + public void setNextOMSibling(OMNode node) { + if (node == null || node.getOMFactory() instanceof OMLinkedListImplFactory) { + this.nextSibling = (OMNodeImpl) node; + } else { + this.nextSibling = (OMNodeImpl) importNode(node); + } + this.nextSibling = (OMNodeImpl) node; + } + + + /** + * Indicates whether parser has parsed this information item completely or not. If some + * information is not available in the item, one has to check this attribute to make sure that, + * this item has been parsed completely or not. + * + * @return Returns boolean. + */ + public boolean isComplete() { + return done; + } + + /** + * Method setComplete. + * + * @param state + */ + public void setComplete(boolean state) { + this.done = state; + if (parent != null) { + if (!done) { + parent.setComplete(false); + } else if (parent instanceof OMElementImpl) { + ((OMElementImpl) parent).notifyChildComplete(); + } + } + } + + /** + * Removes this information item and its children, from the model completely. + * + * @throws OMException + */ + public OMNode detach() throws OMException { + if (parent == null) { + throw new OMException( + "Elements that doesn't have a parent can not be detached"); + } + OMNodeImpl nextSibling = (OMNodeImpl) getNextOMSibling(); + if (previousSibling == null) { + parent.setFirstChild(nextSibling); + } else { + ((OMNodeEx) getPreviousOMSibling()).setNextOMSibling(nextSibling); + } + if (nextSibling != null) { + nextSibling.setPreviousOMSibling(getPreviousOMSibling()); + } + + if ((parent instanceof OMElementImpl) && ((OMElementImpl) parent).lastChild == this) { + ((OMElementImpl) parent).lastChild = getPreviousOMSibling(); + } + + this.previousSibling = null; + this.nextSibling = null; + this.parent = null; + return this; + } + + /** + * Inserts a sibling just after the current information item. + * + * @param sibling + * @throws OMException + */ + public void insertSiblingAfter(OMNode sibling) throws OMException { + if (parent == null) { + throw new OMException("Parent can not be null"); + } else if (this == sibling) { + throw new OMException("Inserting self as the sibling is not allowed"); + } + ((OMNodeEx) sibling).setParent(parent); + if (sibling instanceof OMNodeImpl) { + OMNodeImpl siblingImpl = (OMNodeImpl) sibling; + if (nextSibling == null) { + getNextOMSibling(); + } + siblingImpl.setPreviousOMSibling(this); + if (nextSibling != null) { + nextSibling.setPreviousOMSibling(sibling); + } + ((OMNodeEx) sibling).setNextOMSibling(nextSibling); + nextSibling = siblingImpl; + } + } + + /** + * Inserts a sibling just before the current information item. + * + * @param sibling + * @throws OMException + */ + public void insertSiblingBefore(OMNode sibling) throws OMException { + if (parent == null) { + throw new OMException("Parent can not be null"); + } else if (this == sibling) { + throw new OMException("Inserting self as the sibling is not allowed"); + } + if (sibling instanceof OMNodeImpl) { + OMNodeImpl siblingImpl = (OMNodeImpl) sibling; + siblingImpl.nextSibling = this; + if (previousSibling == null) { + parent.setFirstChild(siblingImpl); + siblingImpl.previousSibling = null; + } else { + siblingImpl.setParent(parent); + previousSibling.setNextOMSibling(siblingImpl); + siblingImpl.setPreviousOMSibling(previousSibling); + } + previousSibling = siblingImpl; + + } + } + + /** + * Gets the type of node, as this is the super class of all the nodes. + * + * @return Returns the type of node as indicated by [EMAIL PROTECTED] #setType} + * @see #setType + */ + public int getType() { + return nodeType; + } + + /** + * Method setType. + * + * @param nodeType + * @throws OMException + */ + public void setType(int nodeType) throws OMException { + this.nodeType = nodeType; + } + + /** + * Gets the previous sibling. + * + * @return boolean + */ + public OMNode getPreviousOMSibling() { + return previousSibling; + } + + /** + * Method setPreviousOMSibling. + * + * @param previousSibling + */ + public void setPreviousOMSibling(OMNode previousSibling) { + if (previousSibling == null || + previousSibling.getOMFactory() instanceof OMLinkedListImplFactory) { + this.previousSibling = (OMNodeImpl) previousSibling; + } else { + this.previousSibling = (OMNodeImpl) importNode(previousSibling); + } + } + + /** + * Parses this node and builds the object structure in memory. However a node, created + * programmatically, will have done set to true by default and this will cause populateyourself + * not to work properly! + * + * @throws OMException + */ + public void build() throws OMException { + while (!done) { + builder.next(); + } + } + + /** + * Parses this node and builds the object structure in memory. AXIOM supports two levels of + * deffered building. First is deffered building of AXIOM using StAX. Second level is the + * deffered building of attachments. AXIOM reads in the attachements from the stream only when + * user asks by calling getDataHandler(). build() method builds the OM without the attachments. + * buildAll() builds the OM together with attachement data. This becomes handy when user wants + * to free the input stream. + */ + public void buildWithAttachments() { + if (!this.done) { + this.build(); + } + } + + /** + * Serializes the node with caching. + * + * @param xmlWriter + * @throws javax.xml.stream.XMLStreamException + * + */ + public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException { + MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(xmlWriter); + internalSerialize(writer); + writer.flush(); + } + + /** + * Serializes the node without caching. + * + * @param xmlWriter + * @throws javax.xml.stream.XMLStreamException + * + */ + public void serializeAndConsume(XMLStreamWriter xmlWriter) throws XMLStreamException { + MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(xmlWriter); + internalSerializeAndConsume(writer); + writer.flush(); + } + + /** + * Serializes the node with caching. + * + * @param writer + * @throws XMLStreamException + */ + public void internalSerialize(XMLStreamWriter writer) throws XMLStreamException { + throw new RuntimeException("Not implemented yet!"); + } + + /** + * Serializes the node without caching. + * + * @param writer + * @throws XMLStreamException + */ + public void internalSerializeAndConsume(XMLStreamWriter writer) throws XMLStreamException { + throw new RuntimeException("Not implemented yet!"); + } + + public void serialize(OutputStream output) throws XMLStreamException { + XMLStreamWriter xmlStreamWriter = StAXUtils.createXMLStreamWriter(output); + try { + serialize(xmlStreamWriter); + } finally { + xmlStreamWriter.close(); + } + } + + public void serialize(Writer writer) throws XMLStreamException { + XMLStreamWriter xmlStreamWriter = StAXUtils.createXMLStreamWriter(writer); + try { + serialize(xmlStreamWriter); + } finally { + xmlStreamWriter.close(); + } + } + + public void serializeAndConsume(OutputStream output) throws XMLStreamException { + XMLStreamWriter xmlStreamWriter = StAXUtils.createXMLStreamWriter(output); + try { + serializeAndConsume(xmlStreamWriter); + } finally { + xmlStreamWriter.close(); + } + } + + public void serializeAndConsume(Writer writer) throws XMLStreamException { + XMLStreamWriter xmlStreamWriter = StAXUtils.createXMLStreamWriter(writer); + try { + serializeAndConsume(xmlStreamWriter); + } finally { + xmlStreamWriter.close(); + } + } + + public void serialize(OutputStream output, OMOutputFormat format) throws XMLStreamException { + MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format); + internalSerialize(writer); + writer.flush(); + if (format.isAutoCloseWriter()) { + writer.close(); + } + } + + public void serialize(Writer writer2, OMOutputFormat format) throws XMLStreamException { + MTOMXMLStreamWriter writer = + new MTOMXMLStreamWriter(StAXUtils.createXMLStreamWriter(writer2)); + writer.setOutputFormat(format); + internalSerialize(writer); + writer.flush(); + if (format.isAutoCloseWriter()) { + writer.close(); + } + } + + public void serializeAndConsume(OutputStream output, OMOutputFormat format) + throws XMLStreamException { + MTOMXMLStreamWriter writer = new MTOMXMLStreamWriter(output, format); + internalSerializeAndConsume(writer); + writer.flush(); + if (format.isAutoCloseWriter()) { + writer.close(); + } + } + + public void serializeAndConsume(Writer writer2, OMOutputFormat format) + throws XMLStreamException { + MTOMXMLStreamWriter writer = + new MTOMXMLStreamWriter(StAXUtils.createXMLStreamWriter(writer2)); + writer.setOutputFormat(format); + internalSerializeAndConsume(writer); + writer.flush(); + if (format.isAutoCloseWriter()) { + writer.close(); + } + } + + public OMFactory getOMFactory() { + return this.factory; + } + + /** + * This method is intended only to be used by Axiom intenals when merging Objects from different + * Axiom implementations to the LLOM implementation. + * + * @param child + */ + protected OMNode importNode(OMNode child) { + int type = child.getType(); + switch (type) { + case (OMNode.ELEMENT_NODE): { + OMElement childElement = (OMElement) child; + OMElement newElement = (new StAXOMBuilder(this.factory, childElement + .getXMLStreamReader())).getDocumentElement(); + newElement.buildWithAttachments(); + return newElement; + } + case (OMNode.TEXT_NODE): { + OMText importedText = (OMText) child; + OMText newText; + if (importedText.isBinary()) { + boolean isOptimize = importedText.isOptimized(); + newText = this.factory.createOMText(importedText + .getDataHandler(), isOptimize); + } else if (importedText.isCharacters()) { + newText = this.factory.createOMText(null, importedText + .getTextCharacters(), importedText.getType()); + } else { + newText = this.factory.createOMText(null, importedText + .getText()/*, importedText.getOMNodeType()*/); + } + return newText; + } + + case (OMNode.PI_NODE): { + OMProcessingInstruction importedPI = (OMProcessingInstruction) child; + return factory.createOMProcessingInstruction(null, + importedPI.getTarget(), + importedPI.getValue()); + } + case (OMNode.COMMENT_NODE): { + OMComment importedComment = (OMComment) child; + return factory.createOMComment(null, importedComment.getValue()); + } + case (OMNode.DTD_NODE) : { + OMDocType importedDocType = (OMDocType) child; + return factory.createOMDocType(null, importedDocType.getValue()); + } + default: { + throw new UnsupportedOperationException( + "Not Implemented Yet for the given node type"); + } + } + } +}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java?view=diff&rev=564731&r1=564730&r2=564731 ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java Fri Aug 10 12:45:28 2007 @@ -689,10 +689,12 @@ if (isDebugEnabled) { log.debug("serialize " + getPrintableName() + " to output stream"); } + OMOutputFormat format = new OMOutputFormat(); + format.setAutoCloseWriter(true); if (isExpanded()) { - super.serializeAndConsume(output, new OMOutputFormat()); + super.serializeAndConsume(output, format); } else { - dataSource.serialize(output, new OMOutputFormat()); + dataSource.serialize(output, format); } } @@ -706,7 +708,9 @@ if (isExpanded()) { super.serializeAndConsume(writer); } else { - dataSource.serialize(writer, new OMOutputFormat()); + OMOutputFormat format = new OMOutputFormat(); + format.setAutoCloseWriter(true); + dataSource.serialize(writer, format); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
