You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by th...@apache.org on 2011/09/29 13:06:11 UTC
svn commit: r1177260 -
/axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
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();
Re: svn commit: r1177260 - /axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
Posted by Andreas Veithen <an...@gmail.com>.
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 <am...@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
> <an...@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, <th...@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-unsubscribe@axis.apache.org
>> For additional commands, e-mail: java-dev-help@axis.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
> For additional commands, e-mail: java-dev-help@axis.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org
Re: svn commit: r1177260 - /axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
Posted by Amila Jayasekara <am...@wso2.com>.
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
<an...@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, <th...@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-unsubscribe@axis.apache.org
> For additional commands, e-mail: java-dev-help@axis.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org
Re: svn commit: r1177260 - /axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
Posted by Thilina Mahesh Buddhika <th...@gmail.com>.
Thanks Andreas for applying the proper fix.
Thilina
On Fri, Sep 30, 2011 at 12:54 AM, Andreas Veithen <andreas.veithen@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, <th...@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-unsubscribe@axis.apache.org
> For additional commands, e-mail: java-dev-help@axis.apache.org
>
>
--
Thilina Mahesh Buddhika
http://blog.thilinamb.com
Re: svn commit: r1177260 - /axis/axis2/java/rampart/trunk/modules/rampart-core/src/main/java/org/apache/rampart/util/Axis2Util.java
Posted by Andreas Veithen <an...@gmail.com>.
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, <th...@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-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org