| package aQute.libg.xslt; |
| |
| import java.io.*; |
| import java.net.*; |
| import java.util.*; |
| import java.util.concurrent.*; |
| |
| import javax.xml.transform.*; |
| import javax.xml.transform.stream.*; |
| |
| public class Transform { |
| static TransformerFactory transformerFactory = TransformerFactory |
| .newInstance(); |
| |
| static Map<URL, Templates> cache = new ConcurrentHashMap<URL, Templates>(); |
| |
| public static void transform(TransformerFactory transformerFactory, URL xslt, InputStream in, OutputStream out) |
| throws Exception { |
| if ( xslt == null ) |
| throw new IllegalArgumentException("No source template specified"); |
| |
| Templates templates = cache.get(xslt); |
| if (templates == null) { |
| InputStream xsltIn = xslt.openStream(); |
| try { |
| templates = transformerFactory |
| .newTemplates(new StreamSource(xsltIn)); |
| |
| cache.put(xslt, templates); |
| } finally { |
| in.close(); |
| } |
| } |
| Result xmlResult = new StreamResult(out); |
| Source xmlSource = new StreamSource(in); |
| Transformer t = templates.newTransformer(); |
| t.transform(xmlSource, xmlResult); |
| out.flush(); |
| } |
| |
| public static void transform(URL xslt, InputStream in, OutputStream out) throws Exception { |
| transform(transformerFactory,xslt, in, out); |
| } |
| } |