Author: scheu Date: Wed Sep 5 12:53:55 2007 New Revision: 573038 URL: http://svn.apache.org/viewvc?rev=573038&view=rev Log: WSCOMMONS-240 Contributor:Rich Scheuerle Added OMNode.close method plus a validation test.
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMNode.java webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMNodeImpl.java webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/StAXOMBuilderTest.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMNode.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMNode.java?rev=573038&r1=573037&r2=573038&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMNode.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/OMNode.java Wed Sep 5 12:53:55 2007 @@ -283,8 +283,14 @@ void buildWithAttachments(); /** + * If a builder and parser is associated with the node, it is closed. + * @param build if true, the object is built first before closing the builder/parser + */ + void close(boolean build); + + /** * Returns the OMFactory that created this object - */ - OMFactory getOMFactory(); + */ + OMFactory getOMFactory(); } Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=573038&r1=573037&r2=573038&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Wed Sep 5 12:53:55 2007 @@ -26,6 +26,7 @@ import org.apache.axiom.om.OMXMLParserWrapper; import org.apache.axiom.om.impl.MTOMXMLStreamWriter; import org.apache.axiom.om.impl.OMNodeEx; +import org.apache.axiom.om.impl.builder.StAXBuilder; import org.apache.axiom.om.util.StAXUtils; import org.w3c.dom.DOMException; import org.w3c.dom.Document; @@ -461,6 +462,20 @@ } } + public void close(boolean build) { + if (build) { + this.build(); + } + this.done = true; + + // If this is a StAXBuilder, close it. + if (builder instanceof StAXBuilder && + !((StAXBuilder) builder).isClosed()) { + ((StAXBuilder) builder).releaseParserOnClose(true); + ((StAXBuilder) builder).close(); + } + } + /** * Sets the owner document. * 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?rev=573038&r1=573037&r2=573038&view=diff ============================================================================== --- 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 Wed Sep 5 12:53:55 2007 @@ -33,6 +33,7 @@ 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.StAXBuilder; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.om.impl.llom.factory.OMLinkedListImplFactory; import org.apache.axiom.om.util.StAXUtils; @@ -330,6 +331,21 @@ public void buildWithAttachments() { if (!this.done) { this.build(); + } + } + + + public void close(boolean build) { + if (build) { + this.build(); + } + this.done = true; + + // If this is a StAXBuilder, close it. + if (builder instanceof StAXBuilder && + !((StAXBuilder) builder).isClosed()) { + ((StAXBuilder) builder).releaseParserOnClose(true); + ((StAXBuilder) builder).close(); } } Modified: webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/StAXOMBuilderTest.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/StAXOMBuilderTest.java?rev=573038&r1=573037&r2=573038&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/StAXOMBuilderTest.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/StAXOMBuilderTest.java Wed Sep 5 12:53:55 2007 @@ -68,4 +68,54 @@ } assertTrue(childrenCount == 5); } + + public void testClose1() throws Exception { + rootElement = stAXOMBuilder.getDocumentElement(); + assertTrue("Root element can not be null", rootElement != null); + assertTrue(" Name of the root element is wrong", + rootElement.getLocalName().equalsIgnoreCase("Root")); + // get the first OMElement child + OMNode omnode = rootElement.getFirstOMChild(); + while (omnode instanceof OMText) { + omnode = omnode.getNextOMSibling(); + } + // Close the element immediately + OMElement omElement = (OMElement) omnode; + omElement.close(false); + + Iterator children = ((OMElement) omnode).getChildren(); + int childrenCount = 0; + while (children.hasNext()) { + OMNode node = (OMNode) children.next(); + if (node instanceof OMElement) + childrenCount++; + } + + assertTrue(childrenCount == 0); + } + + public void testClose2() throws Exception { + rootElement = stAXOMBuilder.getDocumentElement(); + assertTrue("Root element can not be null", rootElement != null); + assertTrue(" Name of the root element is wrong", + rootElement.getLocalName().equalsIgnoreCase("Root")); + // get the first OMElement child + OMNode omnode = rootElement.getFirstOMChild(); + while (omnode instanceof OMText) { + omnode = omnode.getNextOMSibling(); + } + // Close the element after building the element + OMElement omElement = (OMElement) omnode; + omElement.close(true); + + Iterator children = ((OMElement) omnode).getChildren(); + int childrenCount = 0; + while (children.hasNext()) { + OMNode node = (OMNode) children.next(); + if (node instanceof OMElement) + childrenCount++; + } + + assertTrue(childrenCount == 5); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]