<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.invoker</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.invoker</strong></font><br>
               Class IProcessorInvoker</h2><br><hr><pre>public class <strong>IProcessorInvoker</strong>
extends </pre>Interface used by the launched process to define the XSL transformation pipeline.
 The <code>setFeatures</code> and <code>addStylesheet</code> methods should be called
 before calling <code>transform</code> to do the actual transformation.
 
 <p>
 If <code>addStylesheet</code> is not called before <code>transform</code>, then
 it is assumed that the source document contains and embedded stylesheet instruction.
 </p><p></p><hr><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_addStylesheet">addStylesheet</a>(java.net.URL stylesheet
         ,
      java.util.Map parameters
         ,
      java.util.Properties outputProperties
         ,
      javax.xml.transform.URIResolver resolver)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Add a stylesheet to the pipeline (order is important).</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setFeatures">setFeatures</a>(java.util.Map features)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the processor-specific features to use.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_transform">transform</a>(java.net.URL source
         ,
      javax.xml.transform.Result res)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform the actual transformation.</td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_addStylesheet">addStylesheet</a></h2><p><code>public void <strong>addStylesheet</strong>(java.net.URL stylesheet
         ,
      java.util.Map parameters
         ,
      java.util.Properties outputProperties
         ,
      javax.xml.transform.URIResolver resolver)</code></p><p>Add a stylesheet to the pipeline (order is important).</p><h3>Parameters</h3><p><code>stylesheet</code> - the URL of the stylesheet to add</p><p><code>parameters</code> - the map of parameters for the stylesheet</p><p><code>outputProperties</code> - the output properties</p><p><code>resolver</code> - the <code>URIResolver</code> to use</p><h3>Throws:</h3><p><code>javax.xml.transform.TransformerConfigurationException - if stylesheet could not be added</code></p><hr><h2><a name="method_setFeatures">setFeatures</a></h2><p><code>public void <strong>setFeatures</strong>(java.util.Map features)</code></p><p>Set the processor-specific features to use.</p><h3>Parameters</h3><p><code>features</code> - a map of String v. String features</p><hr><h2><a name="method_transform">transform</a></h2><p><code>public void <strong>transform</strong>(java.net.URL source
         ,
      javax.xml.transform.Result res)</code></p><p>Perform the actual transformation.</p><h3>Parameters</h3><p><code>source</code> - the URL of the XML source document</p><p><code>res</code> - the transformation result</p><h3>Throws:</h3><p><code>org.eclipse.wst.xsl.invoker.TransformationException - if the transformation failed</code></p><hr></body></html>