Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Home » Tip Bank » XML » XSLT
Language: Java
Expertise: Advanced
Jul 29, 2008

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_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.length;i++)
          {
          threads[i]=new xslt(docs[i],i);
          threads[i].start();
          }
      }
}
Leonard Anghel
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap