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_Local\xml\docs\AirWings_xslt.xml
C:\Data_Local\xml\docs\AirWings_xslt.xsl
Result documents:
three HTML documents
import 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.lengthi++)
{
threads[i]=new xslt(docs[i],i);
threads[i].start();
}
}
}