Ruchith, Did you consider using the SAAJ stuff which already has dom interfaces?
-- dims On 5/16/05, Ruchith Fernando <[EMAIL PROTECTED]> wrote: > Hi All, > > In implementing WS-Security capabilities on Axis 2.0 we will have to > convert the OM to DOM and provide the complete SOAPEnvelope as a DOM > implementation. > The following changes and additions are proposed to the OM > implementation to support this. > > 1.) The org.w3c.dom.* interfaces will be implemented extending the OM > Impls. (org.apache.axis.dom.*) > Also there will be an implementation of org.apache.axis.soap.* > interfaces extending from the DOMImpls. (org.apache.axis.dom.soap.*) > In this situation we will have to change some of the method names in > the OM interfaces. E.g.: getNextSibling, getPreviousSibling in OMNode > > 2.) A DOMSOAPFactory implementing the SOAPFactory will be introduced > to provide the DOM_SOAP impls. to the StAXSOAPModelBuilder > > 3.) How to switch the builder when the security related handlers takes over: > > Since the security handlers depend on the DOM interfaces, they cannot > work with pure OM instances. They expect DOM impls. So now there's a > need to switch from normal OM factory to DOM factory. Therefore > following method is proposed to to handle this. > > There will be some processing of the SOAPEnvelope before it reaches > the security handlers. > And there will be a reference to this partially built SOAPEnvelope in > the MessageContext object. This SOAPEnvelope consists only of pure OM > based elements (org.apache.axis.soap.*). Now we get the pull parser > from the SOAPEvelope we have through the OMStAXWrapper (This is used > to get the pull events from OMElements, irrespectiveof their build > state) > > PullParser pp = messageContext.getSOAPEnvelope().getPullParser() > //Returns a pp pointing to the start of the document > > Then we create a new StAXSOAPModelBuilder passing the DOMSOAPFactory > together with the pull parser returned from the SOAPEnvelope. > > StAXSOAPModelBuilder builder = new StAXSOAPModelBuilder(pp, new DOMFactory()) > > At this point the SOAPEnvelope reference in the message context is > pointing to the older pure OM based SOAPEnvelope. > This will have to reassigned to the new OM+DOM based SOAPEnvelope, as > shown below: > > messageContext.setEnvelope(builder.getDocumentElement()); // This will > set the reference to the new DOMSOAPEnvelopeImpl > > Therefore to achieve this we need to have remember the following point > as a best practise : DON'T POINT TO THE SOAP ENVELOPE OF A MESSAGE, > JUST POINT TO THE MESSAGE_CONTEXT ONLY. > > I think this is one of the best use cases which shows the beauty of > the Factory and Builder concept used in Axis2 - OM design :) > > Thanks, > Ruchith > -- Davanum Srinivas - http://webservices.apache.org/~dims/
