devxlogo

Using Templates for Concurrent XSLT Transformations

Using Templates for Concurrent XSLT Transformations

As you know, you may not use a Transformer object (from the TrAX API) in multiple threads running concurrently. To do this, you need to use Templates. The following three example threads demonstrate:

Used documents:

C:Data_LocalxmldocsAirWings_xslt.xmlC:Data_LocalxmldocsAirWings_xslt.xsl

Result documents:

three HTML documentsimport javax.xml.transform.*;import javax.xml.transform.stream.*;import java.io.*;class xslt extends Thread{String doc;int nr_doc=0;  public xslt(String doc,int nr_doc)      {     this.doc=doc;     this.nr_doc=nr_doc;     }  public void run()     {                //define the Source      Source sXML=new StreamSource(new File                  ("C://Data_Local//xml//docs//"+doc));            //define the Result     Result rXML=new StreamResult(new File        ("C://Data_Local//xml//docs//" +doc+String.valueOf                 (nr_doc)+".html"));                                            //get the Transformer   try{      Transformer tXML=(TrAX_templates.templateXML).                                                                                         newTransformer();      tXML.transform(sXML,rXML);      }catch(javax.xml.transform.TransformerConfigurationException e)           {System.out.println(e.getMessage());        }catch(javax.xml.transform.TransformerException e)           {System.out.println(e.getMessage());}              }}public class TrAX_templates{   static Templates templateXML=null;   public static void main(String[] args)      {      String[] docs={"AirWings_xslt.xml",                      "AirWings_xslt.xml","AirWings_xslt.xml"};      //get a TransformerFactory      TransformerFactory tfXML=TransformerFactory.newInstance();               //define the Source for AirWings_xslt.xsl      Source sXSL=new StreamSource(new File               ("C://Data_Local//xml//docs//AirWings_xslt.xsl"));                      //get a Templates object    try{       templateXML=tfXML.newTemplates(sXSL);       }catch(javax.xml.transform.TransformerConfigurationException e)            {System.out.println(e.getMessage());}            Thread[] threads=new Thread[docs.length];      for(int i=0;i<docs.length;i++)          {          threads[i]=new xslt(docs[i],i);          threads[i].start();          }      }}

devx-admin

Share the Post: