Author: veithen
Date: Tue Dec 16 18:52:18 2008
New Revision: 727247
URL: http://svn.apache.org/viewvc?rev=727247&view=rev
Log:
WSCOMMONS-337: Fixed an issue where OMNode#insertSiblingAfter didn't update the
parent's last child. This issue was reported by Saliya Ekanayake and affected
both LLOM and DOM. Also added the test case provided by Saliya to
OMElementTestBase, so that it gets executed for the two OM implementations.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.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/OMElementTestBase.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java?rev=727247&r1=727246&r2=727247&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
Tue Dec 16 18:52:18 2008
@@ -154,7 +154,9 @@
if (sibling instanceof ChildNode) {
ChildNode domSibling = (ChildNode) sibling;
domSibling.previousSibling = this;
- if (this.nextSibling != null) {
+ if (this.nextSibling == null) {
+ this.parentNode.setLastChild(sibling);
+ } else {
this.nextSibling.previousSibling = domSibling;
}
domSibling.nextSibling = this.nextSibling;
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=727247&r1=727246&r2=727247&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
Tue Dec 16 18:52:18 2008
@@ -234,7 +234,9 @@
getNextOMSibling();
}
siblingImpl.setPreviousOMSibling(this);
- if (nextSibling != null) {
+ if (nextSibling == null) {
+ parent.setLastChild(sibling);
+ } else {
nextSibling.setPreviousOMSibling(sibling);
}
((OMNodeEx) sibling).setNextOMSibling(nextSibling);
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java?rev=727247&r1=727246&r2=727247&view=diff
==============================================================================
---
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java
(original)
+++
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMElementTestBase.java
Tue Dec 16 18:52:18 2008
@@ -80,4 +80,25 @@
}
assertEquals("In correct number of children", 1, count);
}
+
+ // Regression test for WSCOMMONS-337
+ public void testInsertSiblingAfterLastChild() throws Exception {
+ OMFactory fac = getOMFactory();
+ OMNamespace ns = fac.createOMNamespace("http://www.testuri.com","ns");
+ OMElement parent = fac.createOMElement("parent", ns);
+
+ // Create three OMElements
+ OMElement c1 = fac.createOMElement("c1", ns);
+ OMElement c2 = fac.createOMElement("c2", ns);
+ OMElement c3 = fac.createOMElement("c3", ns);
+
+ // Add c1 to parent using parent.addChild()
+ parent.addChild(c1);
+ // Add c2 to c1 as a sibling after
+ c1.insertSiblingAfter(c2);
+ // Now add c3 to parent using parent.addChild()
+ parent.addChild(c3);
+ assertXMLEqual("<ns:parent xmlns:ns=\"http://www.testuri.com\">" +
+ "<ns:c1 /><ns:c2 /><ns:c3 /></ns:parent>", parent.toString());
+ }
}