On Wed, Apr 20, 2011 at 4:31 PM, Andreas Veithen
<andreas.veit...@gmail.com>wrote:

> Hiranya,
>
> There are a couple of ways to achieve this:
> * You can also call Iterator#remove() prior to adding the node to the
> envelope. This allows the iterator to update its state and move to the
> next node.
> * Instead of cloning the element and then iterating over the children,
> you can iterate over the children (actually child elements; other node
> types may not appear in the body or are irrelevant) and then clone
> each child before adding it to the other SOAP body.
>

Thanks again. I have locally tested and verified the 1st approach and I'm
going to implement that on the trunk. I think from the impl perspective that
is the closest to the old impl.

Thanks,
Hiranya


>
> Andreas
>
> On Wed, Apr 20, 2011 at 12:43, Hiranya Jayathilaka <hiranya...@gmail.com>
> wrote:
> >
> >
> > On Wed, Apr 20, 2011 at 3:01 PM, Andreas Veithen <
> andreas.veit...@gmail.com>
> > wrote:
> >>
> >> Hiranya,
> >>
> >> The release notes for Axiom 1.2.11 have a link to a section in the
> >> user guide that explains why this occurs.
> >
> > Thanks for the pointer Andreas. So I guess we cannot use the iterator for
> > this purpose anymore? I tried out the following bit of code and it seems
> to
> > work:
> >                 OMNode node =
> > envelope.getBody().cloneOMElement().getFirstOMChild();
> >                 while (node != null) {
> >                     OMNode nextNode = node.getNextOMSibling();
> >                     newEnvelope.getBody().addChild(node);
> >                     node = nextNode;
> >                 }
> >
> > Is this the proper way to solve this problem?
> > Thanks,
> > Hiranya
> >>
> >> Andreas
> >>
> >> On Wed, Apr 20, 2011 at 11:22, Hiranya Jayathilaka <
> hiranya...@gmail.com>
> >> wrote:
> >> > Hi Devs,
> >> > The clone mediator is having some issues in the latest trunk (with
> Axiom
> >> > 1.2.11 to be precise). We use the following bit of code to clone the
> >> > SOAP
> >> > envelope (in MessageHelper class):
> >> >                 Iterator itr =
> >> > envelope.getBody().cloneOMElement().getChildren();
> >> >                 while (itr.hasNext()) {
> >> >                     newEnvelope.getBody().addChild((OMNode)
> itr.next());
> >> >                 }
> >> > Now let's assume the following message:
> >> > <soapenv:Envelope
> >> > xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
> >> >>
> >> >    <soapenv:Body>
> >> >          <ser:echoString xmlns:ser="http://service.carbon.wso2.org";>
> >> >               <ser:s>Hello</ser:s>
> >> >          </ser:echoString>
> >> >     </soapenv:Body>
> >> > </soapenv:Envelope>
> >> > The child element iterator for this message, returned by the above
> code
> >> > will
> >> > initially have 3 elements (1 OMElement for the echoString element and
> 2
> >> > OMText objects for the white spaces around it). Once we have attached
> >> > the
> >> > first OMText to the new envelope, subsequent calls to hasNext method
> on
> >> > the
> >> > iterator will start returning false. So the resulting cloned envelope
> >> > will
> >> > only have a bit of white space in the SOAP body.
> >> > I can see that there are some changes in the OMAbstractIterator and
> >> > OMChildrenIterator between Axiom 1.2.8 and 1.2.11. I guess that's
> >> > probably
> >> > what's causing this. So any idea how we can fix this? One easy
> solution
> >> > is
> >> > to change the above code as follows:
> >> >                 Iterator itr =
> >> > envelope.getBody().cloneOMElement().getChildren();
> >> >                 while (itr.hasNext()) {
> >> >                     if (itr.next() instanceof OMText) {
> >> >                          continue; // ignore text elements for white
> >> > spaces
> >> >                     }
> >> >                     newEnvelope.getBody().addChild((OMNode)
> itr.next());
> >> >                 }
> >> > Thanks
> >> > --
> >> > Hiranya Jayathilaka
> >> > Senior Software Engineer;
> >> > WSO2 Inc.;  http://wso2.org
> >> > E-mail: hira...@wso2.com;  Mobile: +94 77 633 3491
> >> > Blog: http://techfeast-hiranya.blogspot.com
> >> >
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
> >> For additional commands, e-mail: dev-h...@synapse.apache.org
> >>
> >
> >
> >
> > --
> > Hiranya Jayathilaka
> > Senior Software Engineer;
> > WSO2 Inc.;  http://wso2.org
> > E-mail: hira...@wso2.com;  Mobile: +94 77 633 3491
> > Blog: http://techfeast-hiranya.blogspot.com
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
> For additional commands, e-mail: dev-h...@synapse.apache.org
>
>


-- 
Hiranya Jayathilaka
Senior Software Engineer;
WSO2 Inc.;  http://wso2.org
E-mail: hira...@wso2.com;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Reply via email to