OMSource does Axiom -> SAX and the transformer will do SAX -> DOM. I
guess that the default transformer implementation is smart enough to
do that without going through another object model (or
serialization/deserialization step). Since SAX is just a sequence of
method calls, this means that no intermediate representation of the
XML will be created.

Andreas

On Thu, Mar 12, 2009 at 12:19, Xavier Drudis Ferran
<xdru...@ambarinformatica.com> wrote:
>
> I've tried axiom-1.2.8 and OMSource, and works fine. (Andreas alternative #2).
>
> Unless I misunderstood something, this alternative does not
> need a copy of the XML text in memory for the SAML assertion in
> addition of the DOM tree, only the DOM tree for it (else I wouldn't
> be able to use OpenSAML, I think).  Not sure if the TransformerFactory
> is heavier enough to warrant a ThreadLocal, though. I think the transformer
> should go in the ThreadLocal ,not only the factory.
>
> new imports:
> import org.w3c.dom.Document;
> import javax.xml.transform.Transformer;
> import javax.xml.transform.TransformerConfigurationException;
> import javax.xml.transform.TransformerException;
> import javax.xml.transform.TransformerFactory;
> import javax.xml.transform.dom.DOMResult;
> import org.apache.axiom.om.impl.jaxp.OMSource;
>
> new code:
>
>   private static final ThreadLocal<TransformerFactory> transFac =  new 
> ThreadLocal<TransformerFactory>() {
>           @Override
>        protected TransformerFactory initialValue() {
>             return TransformerFactory.newInstance();
>        }
>   };
>
>   public boolean assercioValida(OMElement assercio) {
>
>        OMSource source = new OMSource(assercio);
>        Element assercioSAMLDOM = null;
>        Transformer transformer;
>        try {
>            transformer = transFac.get().newTransformer();
>            DOMResult result = new  DOMResult();
>            transformer.transform(source, result);
>            assercioSAMLDOM = 
> ((Document)result.getNode()).getDocumentElement();                            
>                                                                
> logger.debug("obteained assertion DOM  \"on the fly\"");
>                                                                               
>          } catch (TransformerConfigurationException e2) {
>              logger.error(e2,e2);
>        } catch (TransformerException e) {
>              logger.error(e,e);
>        }
>
>        try {
>                if (assercioSAMLDOM==null) {
>            // worse solution, generates and parses XML (bytearray) but works 
> with axiom-1.2.7
>                 assercioSAMLDOM = XMLUtils.toDOM(assercio);
>                 logger.debug("obtained assertion DOM through XML (overhead)");
>          [...] Unmarshalling unchanged, as before
>            }
>  [...]
> }
>
>
>
>
> --
> Xavi Drudis Ferran
> xdru...@ambarinformatica.com
>

Reply via email to