All Downloads are FREE. Search and download functionalities are using the official Maven repository.

msv.testharness.src.SAXONLiaison Maven / Gradle / Ivy

There is a newer version: 2.3.0
Show newest version
/*
 * @(#)$Id: SAXONLiaison.java 1287 2001-10-31 20:47:18Z kk122374 $
 *
 * Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
 * 
 * This software is the proprietary information of Sun Microsystems, Inc.  
 * Use is subject to license terms.
 * 
 */
import javax.xml.transform.*;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * XSLTLiaison implementation for SAXON.
 * 
 * 

* This class */ public class SAXONLiaison implements org.apache.tools.ant.taskdefs.XSLTLiaison { /** The trax TransformerFactory */ private TransformerFactory tfactory = null; /** stylesheet stream, close it asap */ private FileInputStream xslStream = null; /** Stylesheet template */ private Templates templates = null; /** transformer */ private Transformer transformer = null; public SAXONLiaison() throws Exception { tfactory = (TransformerFactory) Class.forName("com.icl.saxon.TransformerFactoryImpl").newInstance(); } //------------------- IMPORTANT // 1) Don't use the StreamSource(File) ctor. It won't work with // xalan prior to 2.2 because of systemid bugs. // 2) Use a stream so that you can close it yourself quickly // and avoid keeping the handle until the object is garbaged. // (always keep control), otherwise you won't be able to delete // the file quickly on windows. // 3) Always set the systemid to the source for imports, includes... // in xsl and xml... public void setStylesheet(File stylesheet) throws Exception { xslStream = new FileInputStream(stylesheet); StreamSource src = new StreamSource(xslStream); src.setSystemId(getSystemId(stylesheet)); templates = tfactory.newTemplates(src); transformer = templates.newTransformer(); } public void transform(File infile, File outfile) throws Exception { FileInputStream fis = null; FileOutputStream fos = null; try { fis = new FileInputStream(infile); fos = new FileOutputStream(outfile); StreamSource src = new StreamSource(fis); src.setSystemId(getSystemId(infile)); StreamResult res = new StreamResult(fos); // not sure what could be the need of this... res.setSystemId(getSystemId(outfile)); transformer.transform(src, res); } finally { // make sure to close all handles, otherwise the garbage // collector will close them...whenever possible and // Windows may complain about not being able to delete files. try { if (xslStream != null){ xslStream.close(); } } catch (IOException ignored){} try { if (fis != null){ fis.close(); } } catch (IOException ignored){} try { if (fos != null){ fos.close(); } } catch (IOException ignored){} } } // make sure that the systemid is made of '/' and not '\' otherwise // crimson will complain that it cannot resolve relative entities // because it grabs the base uri via lastIndexOf('/') without // making sure it is really a /'ed path protected String getSystemId(File file){ String path = file.getAbsolutePath(); path = path.replace('\\','/'); return FILE_PROTOCOL_PREFIX + path; } public void addParam(String name, String value){ transformer.setParameter(name, value); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy