I have a simple policy which encrypts a header. When the WSS for J decrypts I could see in the Dom model the decrypted header. Actually I have 3 headers of which one is encrypted in the Dom model. I see all the 3 headers after it is decrypted.
But when it is converted into the OOM model some of the headers disappear.
soapHeader.addHeaderBlock(element.getLocalName(), element.getNamespace()); statement
I noticed that the lastChild field of the SOAPHeader block points to a header element somewhere in the middle of the list instead of the last one
meaning if the Header block contains 3 headers HDR1 -> HDR2 -> HDR3
then the lastChild should point to HDR3; instead it points to HDR2
so when a new header HDR4 is added, instead of the list becoming HDR1 -> HDR2 -> HDR3 -> HDR4
it becomes HDR1 -> HDR2 -> HDR4 skipping HDR3
The defect is in org.apache.axiom.om.impl.dom.ParentNode.replaceChild(Node, Node) ,line 414, where
updating the last child is not correct unless we are replacing the last child.