Author: ajith
Date: Sun Aug 19 17:09:47 2007
New Revision: 567512
URL: http://svn.apache.org/viewvc?rev=567512&view=rev
Log:
Fixing the discard method (see issue WSCOMMONS 235)
1. Added a new method to the OMContainerEx.java and updated the relevant
classes downstream
2. Fixed the discard method in the StAXBuilder.java class.
3. Added two new test cases to test the functionality of the discard method
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMDiscardTest.java
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPDiscardTest.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMContainerEx.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMSourcedElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMContainerEx.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMContainerEx.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMContainerEx.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMContainerEx.java
Sun Aug 19 17:09:47 2007
@@ -31,5 +31,15 @@
public interface OMContainerEx extends OMContainer {
public void setComplete(boolean state);
+ /**
+ * forcefully set the first element in this parent element
+ * @param omNode
+ */
public void setFirstChild(OMNode omNode);
+
+ /**
+ * forcefully set the last element in this parent element
+ * @param omNode
+ */
+ public void setLastChild(OMNode omNode);
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
Sun Aug 19 17:09:47 2007
@@ -258,25 +258,49 @@
/**
* Method discard.
*
- * @param el
+ * @param element
* @throws OMException
*/
- public void discard(OMElement el) throws OMException {
- OMElement element = null;
+ public void discard(OMElement element) throws OMException {
if (element.isComplete() || !cache) {
throw new OMException();
}
try {
- cache = false;
- do {
- while (parser.next() != XMLStreamConstants.END_ELEMENT) ;
- // TODO:
- } while (!parser.getName().equals(element.getQName()));
+ // We simply cannot use the parser instance from the builder for
this case
+ // it is not safe to assume that the parser inside the builder
will be in
+ // sync with the parser of the element in question
+ // Note 1 - however calling getXMLStreamReaderWithoutCaching sets
off two flags
+ // the cache flag for this builder and the parserAccessed flag.
These flags will be
+ // reset later in this procedure
+
+ int event =0;
+ XMLStreamReader elementParser =
element.getXMLStreamReaderWithoutCaching();
+ do{
+ event = elementParser.next();
+ }while(!(event == XMLStreamConstants.END_ELEMENT &&
+
element.getLocalName().equals(elementParser.getLocalName())));
+
+ //at this point we are safely at the end_element event of the
element we discarded
lastNode = element.getPreviousOMSibling();
+
+ // resetting the flags - see Note 1 above
+ cache = true;
+ parserAccessed = false;
+
if (lastNode != null) {
- ((OMNodeEx) lastNode).setNextOMSibling(null);
+ // if the last node is not an element, we are in trouble
because leaf nodes
+ // (such as text) cannot build themselves. worst the lastchild
of the
+ // currentparent is still the removed node! we have to correct
it
+ OMContainerEx ex = ((OMContainerEx) lastNode.getParent());
+ ex.setLastChild(lastNode);
+ if (!(lastNode instanceof OMContainerEx)){
+ ex.buildNext();
+ }else{
+ ((OMNodeEx) lastNode).setNextOMSibling(null);
+ }
+
} else {
OMElement parent = (OMElement) element.getParent();
if (parent == null) {
@@ -285,7 +309,7 @@
((OMContainerEx) parent).setFirstChild(null);
lastNode = parent;
}
- cache = true;
+
} catch (OMException e) {
throw e;
} catch (Exception e) {
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
Sun Aug 19 17:09:47 2007
@@ -163,6 +163,14 @@
return envelope;
}
+
+ public void discard(OMElement element) throws OMException {
+ super.discard(element);
+ //when an element is discarded the element index that was incremented
+ //at creation needs to be decremented !
+ elementLevel--;
+ }
+
/**
* Method createOMElement.
*
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
Sun Aug 19 17:09:47 2007
@@ -126,6 +126,14 @@
this.firstChild = (ChildNode) omNode;
}
+ /**
+ * Forcefully set the last child
+ * @param omNode
+ */
+ public void setLastChild(OMNode omNode) {
+ this.lastChild = (ChildNode) omNode;
+ }
+
// /
// /DOM Node methods
// /
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextImpl.java
Sun Aug 19 17:09:47 2007
@@ -335,8 +335,6 @@
public void discard() throws OMException {
if (done) {
this.detach();
- } else {
- builder.discard((OMElement) this.parentNode);
}
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
Sun Aug 19 17:09:47 2007
@@ -100,8 +100,6 @@
public void discard() throws OMException {
if (done) {
this.detach();
- } else {
- builder.discard((OMElement) this.parent);
- }
+ }
}
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
Sun Aug 19 17:09:47 2007
@@ -100,8 +100,6 @@
public void discard() throws OMException {
if (done) {
this.detach();
- } else {
- builder.discard((OMElement) this.parent);
- }
+ }
}
}
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
Sun Aug 19 17:09:47 2007
@@ -271,6 +271,13 @@
this.firstChild = firstChild;
}
+ /**
+ * Forcefully set the last child
+ * @param omNode
+ */
+ public void setLastChild(OMNode omNode) {
+ this.lastChild = omNode;
+ }
/**
* Returns the character set encoding scheme to be used.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
Sun Aug 19 17:09:47 2007
@@ -573,6 +573,11 @@
this.firstChild = firstChild;
}
+
+ public void setLastChild(OMNode omNode) {
+ this.lastChild = omNode;
+ }
+
/**
* Removes this information item and its children, from the model
completely.
*
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
Sun Aug 19 17:09:47 2007
@@ -122,8 +122,6 @@
public void discard() throws OMException {
if (done) {
this.detach();
- } else {
- builder.discard((OMElement) this.parent);
- }
+ }
}
}
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?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
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
Sun Aug 19 17:09:47 2007
@@ -362,6 +362,12 @@
super.setFirstChild(node);
}
+
+ public void setLastChild(OMNode omNode) {
+ forceExpand();
+ super.setLastChild(omNode);
+ }
+
/* (non-Javadoc)
* @see org.apache.axiom.om.OMElement#getFirstElement()
*/
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java?rev=567512&r1=567511&r2=567512&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
Sun Aug 19 17:09:47 2007
@@ -524,9 +524,7 @@
public void discard() throws OMException {
if (done) {
this.detach();
- } else {
- builder.discard((OMElement) this.parent);
- }
+ }
}
/* (non-Javadoc)
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMDiscardTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMDiscardTest.java?rev=567512&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMDiscardTest.java
(added)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMDiscardTest.java
Sun Aug 19 17:09:47 2007
@@ -0,0 +1,45 @@
+package org.apache.axiom.om;
+
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLInputFactory;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+
+/**
+ *Test the discard method
+ */
+public class OMDiscardTest extends AbstractTestCase {
+
+
+ public OMDiscardTest(String testName) {
+ super(testName);
+ }
+
+
+ public void testDiscard(){
+ OMElement documentElement = null;
+ try {
+ // first build the OM tree without caching and see whether we can
discard
+ // an element from it
+ StAXOMBuilder builder = new StAXOMBuilder(getXMLStreamReader());
+ documentElement = builder.getDocumentElement();
+
+ documentElement.getFirstElement().discard();
+
+ String envelopeString = documentElement.toStringWithConsume();
+ } catch (Exception e) {
+ fail("discarding an element should work!");
+ }
+ }
+
+ private XMLStreamReader getXMLStreamReader() throws XMLStreamException,
FileNotFoundException {
+ return XMLInputFactory.newInstance().
+ createXMLStreamReader(
+ new FileReader(
+ getTestResourceFile("soap/soapmessage.xml")));
+ }
+
+}
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPDiscardTest.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPDiscardTest.java?rev=567512&view=auto
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPDiscardTest.java
(added)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/soap/SOAPDiscardTest.java
Sun Aug 19 17:09:47 2007
@@ -0,0 +1,28 @@
+package org.apache.axiom.soap;
+
+import javax.xml.stream.XMLStreamException;
+
+/**
+ * @author : Ajith Ranabahu
+ * Date: Aug 15, 2007
+ * Time: 11:57:54 PM
+ */
+public class SOAPDiscardTest extends SOAPTestCase{
+
+
+ public SOAPDiscardTest(String testName) {
+ super(testName);
+ }
+
+ public void testDiscardHeader(){
+
+ try {
+ soap11EnvelopeWithParser.getHeader().discard();
+ soap11EnvelopeWithParser.getBody().toStringWithConsume();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]