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