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(); } }}