Apparently that code was meant to cover the case of DocumentFragments:

http://svn.apache.org/viewvc?view=revision&revision=518301

When insertBefore is used with a DocumentFragment as parameter, then
this will indeed insert multiple nodes. Note however that
DocumentFragment is a DOM API for which there is no counterpart in the
Axiom API.

However, I doubt that this is working correctly. The condition
"newDomChild.nextSibling != null" looks wrong to me. What I can
already tell is that this piece of code has zero unit test coverage...

Andreas

On Fri, Sep 30, 2011 at 18:54, Amila Jayasekara <ami...@wso2.com> wrote:
> Hi Andreas,
>
> In ParentNode.insertBefore(Node newChild, Node refChild) method i came
> across following bit of code,
>
> ChildNode newDomChild = (ChildNode) newChild;
> ChildNode refDomChild = (ChildNode) refChild;
>
> ....
> ....
> ....
>
> boolean compositeChild = newDomChild.nextSibling != null;
>        ChildNode endChild = null;
>
>        if(compositeChild) {
>            ChildNode tempNextChild = newDomChild.nextSibling;
>            while(tempNextChild != null) {
>                tempNextChild.parentNode = this;
>                endChild = tempNextChild;
>                tempNextChild = tempNextChild.nextSibling;
>            }
>  }
>
> And this code was hitting when adding a node. Since above code is
> written specifically, i was under impression that it is the behaviour
> of it. And didnt realise that this code was hitting when moving node,
> due to an issue in detach. Therefore i took the approach in patch to
> fix the issue. Thats where i got "composite element" concept into my
> mind.
>
> Sorry for the inconvenience.
>
> Thanks
> AmilaJ
>
>
>
> On Thu, Sep 29, 2011 at 12:24 PM, Andreas Veithen
> <andreas.veit...@gmail.com> wrote:
>> Sorry, but this change is complete nonsense. There is no such thing as
>> a "composite element" and moving a node never moves its siblings (but
>> only its children). This is actually a bug in the Axiom DOM
>> implementation: the detach() method fails to reset the nextSibling
>> attribute of the node.
>>
>> Andreas
>>
>> On Thu, Sep 29, 2011 at 13:06,  <thilin...@apache.org> wrote:
>>> Author: thilinamb
>>> Date: Thu Sep 29 11:06:11 2011
>>> New Revision: 1177260
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1177260&view=rev
>>> Log:
>>> Committing the patch provided by AmilaJ for RAMPART-336.
>>>
>>> Modified:
>>>    
>>> axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
>>>
>>> Modified: 
>>> axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
>>> URL: 
>>> http://svn.apache.org/viewvc/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java?rev=1177260&r1=1177259&r2=1177260&view=diff
>>> ==============================================================================
>>> --- 
>>> axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
>>>  (original)
>>> +++ 
>>> axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
>>>  Thu Sep 29 11:06:11 2011
>>> @@ -217,6 +217,10 @@ public class Axis2Util {
>>>                         // it is a header we have added in rampart eg. 
>>> EncryptedHeader and should
>>>                         // be converted to SOAPHeaderBlock for processing
>>>                        } else {
>>> +                            // First detach element from soap header
>>> +                            element.detach();
>>> +
>>> +                            // add new element
>>>                                header = 
>>> soapHeader.addHeaderBlock(element.getLocalName(), element.getNamespace());
>>>                                Iterator attrIter = 
>>> element.getAllAttributes();
>>>                                while (attrIter.hasNext()) {
>>> @@ -231,14 +235,17 @@ public class Axis2Util {
>>>                                // retrieve all child nodes (including any 
>>> text nodes)
>>>                                // and re-attach to header block
>>>                                Iterator children = element.getChildren();
>>> -                               while (children.hasNext()) {
>>> +
>>> +                            // Element is a composite element, in which it 
>>> has many siblings.
>>> +                            // All siblings will be added when we add a 
>>> single node.
>>> +                            // See ParentNode.insertBefore(Node newChild, 
>>> Node refChild) for
>>> +                            // more information.
>>> +                               if (children.hasNext()) {
>>>                                        OMNode child = 
>>> (OMNode)children.next();
>>>                                        children.remove();
>>>                                        header.addChild(child);
>>>                                }
>>> -
>>> -                               element.detach();
>>> -
>>> +
>>>                                soapHeader.build();
>>>
>>>                                header.setProcessed();
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
>> For additional commands, e-mail: java-dev-h...@axis.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
> For additional commands, e-mail: java-dev-h...@axis.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@axis.apache.org
For additional commands, e-mail: java-dev-h...@axis.apache.org

Reply via email to