package nl.nn.adapterframework.testtool; import java.io.IOException; import java.io.File; import java.io.FileInputStream; import java.util.Map; import javax.xml.transform.stream.StreamSource; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import nl.nn.adapterframework.util.ClassUtils; import nl.nn.adapterframework.util.DomBuilderException; import nl.nn.adapterframework.core.ListenerException; import nl.nn.adapterframework.util.TransformerPool; /** * XSLT provider listener for the Test Tool. * * @author Jaco de Groot */ public class XsltProviderListener { String filename; boolean fromClasspath = false; boolean xslt2 = false; boolean namespaceAware = true; TransformerPool transformerPool = null; String result; public void init() throws ListenerException { try { if (fromClasspath) { transformerPool = new TransformerPool(ClassUtils.getResourceURL(this, filename), xslt2); } else { File file = new File(filename); StreamSource streamSource = new StreamSource(file); transformerPool = new TransformerPool(streamSource, xslt2); } } catch (Exception e) { throw new ListenerException("Exception creating transformer pool for file '" + filename + "': " + e.getMessage(), e); } } public void processRequest(String message, Map parameters) throws ListenerException { try { result = transformerPool.transform(message, parameters, namespaceAware); } catch (IOException e) { throw new ListenerException("IOException transforming xml: " + e.getMessage(), e); } catch (TransformerException e) { throw new ListenerException("TransformerException transforming xml: " + e.getMessage(), e); } catch (DomBuilderException e) { throw new ListenerException("DomBuilderException transforming xml: " + e.getMessage(), e); } } public String getResult() { String result = this.result; this.result = null; return result; } public void setFilename(String filename) { this.filename = filename; } public void setFromClasspath(boolean fromClasspath) { this.fromClasspath = fromClasspath; } public void setXslt2(boolean xslt2) { this.xslt2 = xslt2; } /** * Set namespace aware. * * @param namespaceAware */ public void setNamespaceAware(boolean namespaceAware) { this.namespaceAware = namespaceAware; } }