<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
-->
<!-- $Id$ -->
<s1 title="Getting Started with &xslt4jc-short;">

<ul>
  <li><link anchor="intro">Introduction</link></li>
  <li><link anchor="classpath">Setting the system classpath for &xslt4jc-short;</link></li>
  <li><link anchor="compile">Compiling translets from the command line</link></li>
  <li><link anchor="run">Running translets from the command line</link></li>
  <li><link anchor="api">Calling &xslt4jc-short; with the JAXP API</link></li>
  <li><link anchor="xsltcsmart">Smart Transformer Switch</link></li>
  <li><link anchor="native_api">Calling &xslt4jc-short; with the native API</link></li>
  <li><link anchor="constraints">Usage constraints</link></li>
  <li><link idref="samples" anchor="translets">Sample translets</link></li>
  <li><link idref="extensions_xsltc">Extensions for &xslt4jc-short;</link></li>  
</ul>
<p>See also: <jump href="xsltc/index.html">&xslt4jc-short; Design</jump></p>
<note>Unless otherwise specified, the usage discussed in this section refers to 
the &xslt4j; Compiling processor, XSLTC. See <link idref="usagepatterns">Basic Usage 
Patterns</link> for information on using the &xslt4j; Interpretive processor.</note><br></br>

<anchor name="intro"/>
<s2 title="Introduction">
<p>&xslt4jc-short; provides a compiler and a runtime processor. 
Use the compiler to compile an XSL stylesheet into a translet (i.e., a set of
Java classes). Use the runtime processor to apply the translet to an XML
document and perform a transformation.</p>
</s2>

<anchor name="classpath"/>
<s2 title="Setting the system classpath for &xslt4jc-short;">
<p>The xalan.jar contains support for both &xslt4j; processors.  You
can use the JAXP <code>javax.xml.transform.TransformerFactory</code> property
(see <link anchor="api">"Calling &xslt4jc-short; with the JAXP API"</link> below) to
select which processor to use:  the Interpretive or the Compiling processor.</p>
<p>To use XSLTC, simply put xalan.jar, serializer.jar, xml-apis.jar, and xercesImpl.jar on
your classpath.</p>
<note>To compile and run translets, you must use JDK (or JRE) 1.3.1 or higher.</note>
<note>Although the &xslt4jc-short; developers make every effort to avoid changes that
affect binary compatibility, we cannot guarantee that a translet will work with
any version of the run-time processor other than the one that corresponds to
the version of the &xslt4jc-short; compiler that was used to create the translet.</note>
</s2>

<s3 title="Bundled System Classpath">
<p>
To use this newer approach, simply put xalan.jar, serializer.jar, xml-apis.jar and 
xercesImpl.jar in your classpath.  There is no need to include xsltc.jar, BCEL.jar, JLex.jar,
regexp.jar, java_cup.jar or runtime.jar as required in previous releases.
</p>
<note>In order to compile and run translets you must have a JAXP 1.3 compliant XML
parser installed. Our distribution includes <resource-ref idref='xml4j-used' />.
Include xercesImpl.jar and xml-apis.jar in your class path.</note>
</s3>

<s3 title="Unbundled System Classpath">
<p>The binary distribution contains &xslt4jc-short; and all its support classes bundled 
into xalan.jar. To use the unbundled approach, rebuild 
the xsltc.jar file using the xsltc.unbundledjar target. The support jars that 
you'll need to add to your classpath are available in the Xalan Java lib 
directory.</p>
<p>To compile translets, run translets, and use the &xslt4jc-short; API, using
the unbundled jar approach, put the following on the system classpath:</p>
<table>
<tr>
  <th>Classes or JAR</th>
  <th>To compile a translet</th>
  <th>To run a translet</th>
</tr>
<tr>
  <td>the translet</td>
  <td></td>
  <td>required</td>
</tr>
<tr>
  <td>xsltc.jar</td>
  <td>required</td>
  <td>required</td>
</tr>
<tr>
  <td>runtime.jar</td>
  <td>required</td>
  <td>required</td>
</tr>
<tr>
  <td>BCEL.jar</td>
  <td>required</td>
  <td></td>
</tr>
<tr>
  <td>JLex.jar</td>
  <td>required</td>
  <td></td>
</tr>
<tr>
  <td>java_cup.jar</td>
  <td>required</td>
  <td></td>
</tr>
<tr>
  <td>regexp.jar</td>
  <td>required</td>
  <td></td>
</tr>
<tr>
  <td>xml-dtm.jar</td>
  <td></td>
  <td>required</td>
</tr>
</table>
<p>The translet is the set of class files or the JAR file that you generate with
the compiler; see <link anchor="compile">Compiling translets</link>.</p>
</s3>

<anchor name="compile"/>
<s2 title="Compiling translets from the command line">
    <ul>
      <li><link anchor="comp-synopsis">Synopsis</link></li>
      <li><link anchor="comp-args">Flags and arguments</link></li>
      <li><link anchor="comp-examples">Examples</link></li>
    </ul>
    <p>The XSLT Compiler is a Java-based tool for compiling XSLT
    stylesheets into lightweight and portable Java byte codes 
    called translets.</p>  

    <p>To run the compiler from the command line or from a script, 
    <link anchor="classpath">set the classpath</link> and 
    run the class <code>org.apache.xalan.xsltc.cmdline.Compile</code>. The
    synopsis of the options and arguments accepted by this class is shown below.
    </p>
    <note>You can also use the
    <jump href="commandline.html">&xslt4j; command-line utility</jump>, to
          compile or run &xslt4jc-short; translets.</note>

<anchor name="comp-synopsis"/>
<s3 title="Synopsis">
<p>
<code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
<code>&nbsp;&nbsp;&nbsp;&nbsp;[-o &lt;output&gt;] [-d &lt;directory&gt;] [-j &lt;jarfile&gt;]</code><br/>
<code>&nbsp;&nbsp;&nbsp;&nbsp;[-p &lt;package name&gt;] [-n] [-x] [-v] [-u] [-h]<br/>
&nbsp;&nbsp;&nbsp;&nbsp;{&lt;stylesheet&gt; | -i }</code></p> 
</s3>

<anchor name="comp-args"/>
<s3 title="Flags and arguments">
    <p>The following flags and arguments are supported:</p>

<source>-o &lt;output&gt;
   Specifies the name of the generated translet class.
   If you omit this argument, the translet class is
   named &lt;stylesheet&gt;.  Translets are written as 
   .class files.

-d &lt;directory&gt;
   Specifies the destination directory.  If you omit
   this argument, the translet class files are placed
   in the current working directory.

-j &lt;jarfile&gt;
   Outputs the generated translet class files into a 
   jar file named &lt;jarfile&gt;.jar. When this option is 
   used, only the jar file is output.

-p &lt;package name&gt;
   Specifies a package name for the generated translet
   classes.

-n Enables template inlining (default behavior better on average).

-x Turns on additional debugging messages.

-s Disables calling System.exit

-u  &lt;stylesheet&gt;
  Specifies the stylesheet with a URI such as 
  'http://myserver/stylesheet1.xsl'.

   &lt;stylesheet&gt;
   (No flag) The pathname of the stylesheet file.

-i Force stylesheet to be read from stdin

-v Prints version of compiler

-h Prints usage statement</source>

<note>The translet name is the same as the name of the Java class that
implements the translet.  If the name specified by the <code>-o</code> option
or derived from the URL for the stylesheet contains characters that are not
permitted in a Java class name, any such character will be replaced with an
underscore.  For example, if the translet name specified by the <code>-o</code>
option is <code>my-stylesheet</code>, or if the URL of the stylesheet is
<code>http://example.org/my-stylesheet.xsl</code>, the translet will actually
be named <code>my_stylesheet</code>.
</note>
</s3>

<anchor name="comp-examples"/>
<s3 title="Examples">
    <p>The following examples assume that you have already set the
           classpath to include the translet and the required JAR
    files (see <link anchor="classpath">setting the system classpath</link>).</p>

    <p><em>Example 1:</em>  Creating a translet from the hamlet.xsl
       stylesheet.</p>
    <p><code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
    <code>&nbsp;&nbsp;&nbsp;&nbsp; hamlet.xsl</code></p>    
    <p>Example 1 produces a set of class files such as hamlet.class, hamlet$0.class, hamlet$1.class.</p>

    <p><em>Example 2:</em>  Outputting to a JAR file.</p>
    <p><code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
    <code>&nbsp;&nbsp;&nbsp;&nbsp; -j hamlet.jar hamlet.xsl</code></p>
    <p>Example 2 produces hamlet.jar, which contains the translet class
       files.</p>

    <p><em>Example 3:</em> Specifying the translet class name. </p> 
    <p><code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
    <code>&nbsp;&nbsp;&nbsp;&nbsp; -o newhamlet hamlet.xsl</code></p>
    <p>Example 3 produces a set of class files such as newhamlet.class,
       newhamlet$0.class, etc., rather than hamlet.class, hamlet$0.class,
       etc.</p>


    <p><em>Example 4:</em> Compiling multiple stylesheets.</p>
    <p><code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
    <code>&nbsp;&nbsp;&nbsp;&nbsp; hamlet1.xsl hamlet2.xsl hamlet3.xsl</code></p>
    <p>Example 4 produces three translets and set of class files derived from the three stylesheets.</p>

    <p><em>Example 5:</em> Package Specification.</p>
    <p><code>java org.apache.xalan.xsltc.cmdline.Compile</code><br/>
    <code>&nbsp;&nbsp;&nbsp;&nbsp; -p com.mycompany.translets hamlet.xsl</code></p>
    <p>Example 5 produces a set of class files such as com/mycompany/translets/hamlet.class,
    com/mycompany/translets/hamlet$0.class', etc.</p>
</s3>
</s2>

<anchor name="run"/>
<s2 title="Running translets from the command line">
    <ul>
      <li><link anchor="run-synopsis">Synopsis</link></li>
      <li><link anchor="run-args">Flags and arguments</link></li>
      <li><link anchor="run-examples">Examples</link></li>
    </ul>

    <p>The &xslt4jc-short; runtime processor is a Java-based tool for 
    transforming XML document files using a translet (compiled 
    stylesheet). </p>

    <p>The &xslt4jc-short; processor can be run on any platform including UNIX,
    Windows, NT, Mac that supports Java, including a Palm Pilot
    with J2ME CLDC (Java 2 Micro Edition, Connected Limited Device
    Configuration).</p>

    <p>To run a translet from the command line or a script,
     <link anchor="classpath">set the classpath</link> (be sure to include
     the translet) and run the translet with the appropriate flags and arguments
     (described below).</p>

    <note>You can also use the
    <jump href="commandline.html">&xslt4j; Command-line Utility</jump>, to
          compile or run &xslt4jc-short; translets.</note>

<anchor name="run-synopsis"/>
<s3 title="Synopsis">
<p><code>java org.apache.xalan.xsltc.cmdline.Transform</code><br/>
<code>&nbsp;&nbsp;&nbsp;&nbsp; [-j &lt;jarfile&gt;] [-x] {-u &lt;document_url&gt; | &lt;document&gt;} &lt;class&gt;</code><br/>
<code>&nbsp;&nbsp;&nbsp;&nbsp; [&lt;name1&gt;=&lt;value1&gt; ...]</code></p>
</s3>

<anchor name="run-args"/>
<s3 title="Flags and arguments">

    <p>The following flags and arguments are supported:</p>

<source>

-j Specifies &lt;jarfile&gt; from which to load translet.

-x Turns on debugging messages.

-s Disables calling System.exit

-u Specifies the XML input &lt;document&gt; with a URI,
   such as 'http://myserver/hamlet.xml'.

Arguments without flags:

   &lt;document&gt;
   Filename of the XML input document. 
   
   &lt;document_url&gt;
   URI of the XML input document (see the -u flag above). 

   &lt;class&gt;
   The translet that performs the transformation. The translet
   may take a set of stylesheet parameters specified as
   name-value pairs. The format for a name-value pair is
   &lt;name&gt;=&lt;value&gt;.</source>
</s3>

<anchor name="run-examples"/>
<s3 title="Examples">

    <p>The following examples assume that you have already set the classpath to include the translet and the required JAR
    files (see <link anchor="classpath">setting the system classpath</link>).</p>
    <p>A possible variation: You have set the classpath to include the required JAR files, but when you run the translet,
    you use the java -cp flag to add the current working directory (containing the translet class files you have just generated)
    to the classpath.</p>
    <p><ref>Windows:</ref><code> java -cp .;%CLASSPATH% ...</code><br/>
       <ref>UNIX:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</ref><code> java -cp .:$CLASSPATH ...</code></p>
    
    <p><em>Example 1:</em> Processing an XML document.</p>

    <p><code>java org.apache.xalan.xsltc.cmdline.Transform</code><br/>
       <code>&nbsp;&nbsp;&nbsp;&nbsp;  hamlet.xml hamlet</code></p> 

    <p>Example 1 uses the specified translet (hamlet) to transform the specified XML input document (hamlet.xml). 
    The XML input document is in the current working directory. The translet was created by using
    org.apache.xalan.xslt.cmdline.Compile to compile an XSL stylesheet (hamlet.xsl). </p>

    <p><em>Example 2:</em> Passing stylesheet parameters to the translet.</p>

    <p><code>java org.apache.xalan.xsltc.cmdline.Transform</code><br/>
       <code>&nbsp;&nbsp;&nbsp;&nbsp; hamlet.xml hamlet</code><br/>
       <code>&nbsp;&nbsp;&nbsp;&nbsp; speaker=HAMLET 'scene=SCENE IV'</code></p>

    <p>Example 2 passes "HAMLET" to the stylesheet for the stylesheet parameter named speaker, and "SCENE IV" for the
    stylesheet parameter named scene. The second name-value pair was placed in single quotes to 
    specify a value containing a space.</p>
    
    <p><em>Example 3:</em> Processing an XML input document specified with a URI.</p>

    <p><code>java org.apache.xalan.xsltc.cmdline.Transform</code><br/>
       <code>&nbsp;&nbsp;&nbsp;&nbsp;  -u http://zarya.east/test.xml hamlet</code></p>

    <p>Example 3 applies the translet (hamlet) to the XML input document (http://zarya.east/test.xml hamlet). Inclusion of
    the flag (-u) is optional.</p>
</s3>
</s2>

<anchor name="api"/>
<s2 title="Calling &xslt4jc-short; with the JAXP API">
<ul>
<li><link anchor="api-attributes">&xslt4jc-short; TransformerFactory attributes</link></li>
<li><link anchor="api-examples">Examples</link></li>
</ul>
<p>&xslt4jc-short; translets are integrated with the &jaxp13-short; API. Accordingly, it is now possible to set a 
system property and use a TransformerFactory to generate a Transformer that performs a transformation by compiling 
and running a translet.</p>

<p>When you use the &jaxp13-short; API to run &xslt4j;, the
<code>javax.xml.transform.TransformerFactory</code> system property is set to
<code>org.apache.xalan.processor.TransformerFactoryImpl</code>. As it currently
stands, this &xslt4j; implementation of TransformerFactory always uses the &xslt4j;
Interpretive processor to perform transformations.  To use translets to perform
transformations, set this system property to
<code>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</code>. For
information on setting this and related system properties designating XML
parsers and XSL transformers, see
<link idref="usagepatterns" anchor="plug">Plugging in a Transformer and XML
parser</link>.</p>

<p>To use the &jaxp13-short; API to perform transformations with translets do the
   following:</p>
<ol>
  <li>Set the <code>javax.xml.transform.TransformerFactory</code> system
      property as indicated above.<br/><br/></li>
  <li>Instantiate a <code>TransformerFactory</code>.<br/><br/></li>
  <li>Instantiate a <code>Transformer</code> object either directly from
      the <code>TransformerFactory</code> or through a <code>Templates</code>
      object.  A <code>Transformer</code> is a processed instance of a
      stylesheet (a translet) that can be used to perform a
      transformation.  See below for more information on when you should use
      a <code>Templates</code> object.<br/><br/></li>
  <li>Perform the transformation, using a StreamSource object for the XML
      input and a StreamResult object to hold the transformation output.</li>
</ol>
<p>Both a <code>Templates</code> object and a <code>Tranformer</code> object are
   processed representations of a stylesheet, but you cannot use a
   <code>Templates</code> object to perform transformations.  Instead,
   you can use a <code>Templates</code> object to create new
   <code>Transformer</code> instances, without having to reprocess the
   stylesheet each time.  You can use a <code>TransformerFactory</code> to
   generate a <code>Templates</code> object or a <code>Transformer</code>
   object directly.  You can use a <code>Transformer</code> more than once,
   but you cannot use it concurrently on more than one thread.  If you need
   to use the same stylesheet to perform transformations on more than one
   thread at the same time, use a <code>Templates</code> object and create
   as many <code>Transformer</code> objects as you require.</p>

<p>&xslt4jc-short; also defines a set of attributes that you can set on the
<code>TransformerFactory</code> in order to save and subsequently use those
translets by way of the JAXP Transform API - without having to recompile the
stylesheet each time.</p>

<anchor name="api-attributes"/>
<s3 title="&xslt4jc-short; TransformerFactory attributes">
The JAXP Transform API defines a <code>
<jump href="apidocs/javax/xml/transform/TransformerFactory.html#setAttribute(java.lang.String, java.lang.Object)">TransformerFactory.setAttribute</jump>
</code> method that you can use to set implementation-defined attributes.
<table>
<tr>
  <th>Attribute</th><th>Purpose</th>
  <th>Type of value</th><th>Default value</th>
</tr>
<tr>
  <td>translet-name</td>
  <td>Specifies the name of the translet</td>
  <td>String</td>
  <td>"GregorSamsa"</td>
</tr>
<tr>
  <td>destination-directory</td>
  <td>Specifies where to save translet class files</td>
  <td>String</td>
  <td>null</td>
</tr>
<tr>
  <td>package-name</td>
  <td>Specifies which package translet class files will be in</td>
  <td>String</td>
  <td>null</td>
</tr>
<tr>
  <td>jar-name</td>
  <td>Specifies the name of a jar file in which translets should be saved</td>
  <td>String</td>
  <td>null</td>
</tr>
<tr>
  <td>generate-translet</td>
  <td>Specifies whether translet class files should be generated</td>
  <td>Boolean</td>
  <td>Boolean.FALSE</td>
</tr>
<tr>
  <td>auto-translet</td>
  <td>Specifies that time-stamp of translet file, if any, should be compared with that of stylesheet to decide whether to recompile the stylesheet</td>
  <td>Boolean</td>
  <td>Boolean.FALSE</td>
</tr>
<tr>
  <td>use-classpath</td>
  <td>Specifies that precompiled translet classes should be looked up from the classpath when a new transformer or templates is created</td>
  <td>Boolean</td>
  <td>Boolean.FALSE</td>
</tr>
<tr>
  <td>enable-inlining</td>
  <td>Specifies whether methods that represent templates should be inlined.  See <link anchor="constraints">Usage constraints</link></td>
  <td>Boolean</td>
  <td>Boolean.FALSE</td>
</tr>
<tr>
  <td>debug</td>
  <td>Enables debugging messages</td>
  <td>Boolean</td>
  <td>Boolean.FALSE</td>
</tr>
</table>
<p>The <code>translet-name</code>, <code>destination-directory</code>,
<code>package-name</code> and <code>jar-name</code> attributes are transient.
They only apply to the next invocation of either the <code>newTemplates</code>
or the <code>newTransformer</code> method on that
<code>TransformerFactory</code>.</p>
<note>The translet name is the same as the name of the Java class that
implements the translet.  If the value specified for the
<code>translet-name</code> attribute contains characters that are not
permitted in a Java class name, any such character will be replaced with an
underscore.  For example, if the translet name specified was
<code>my-stylesheet</code>, the translet will actually be named
<code>my_stylesheet</code>.</note>
</s3>

<anchor name="api-examples"/>
<s3 title="Examples">
<p><em>Example 1:</em> Using a translet/Templates object for multiple
concurrent transformations</p>
<source>import java.util.Properties;
import javax.xml.transform.Transformer;
import java.io.FileOutputStream;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.Templates;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
...
// Set the TransformerFactory system property.
// Note: For more flexibility, load properties from a properties file.
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
Properties props = System.getProperties();
props.put(key, value);
System.setProperties(props);
...
String xslInURI;
// Instantiate the TransformerFactory, and use it with a StreamSource
// XSL stylesheet to create a translet as a Templates object.
TransformerFactory tFactory = TransformerFactory.newInstance();
Templates translet = tFactory.newTemplates(new StreamSource(xslInURI));
...
String xmlInURI;
String htmlOutURI;
String xmlInURI2;
String htmlOutURI2;
...
// For each thread, instantiate a new Transformer, and perform the
// transformations on that thread from a StreamSource to a StreamResult;
Transformer transformer = translet.newTransformer();
transformer.transform(new StreamSource(xmlInURI),
                  new StreamResult(new FileOutputStream(htmlOutURI)));
transformer.transform(new StreamSource(xmlInURI2),
                  new StreamResult(new FileOutputStream(htmlOutURI2)));
...</source>
<p>For a working sample that illustrates this usage pattern, see <link idref="samples" anchor="xsltc1">JAXPTransletOneTransformation</link>.</p>
<p><em>Example 2:</em> Compiling a translet/Templates object for a single transformation</p>
<source>import java.util.Properties;
import javax.xml.transform.TransformerFactory;
import java.io.FileOutputStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.stream.StreamSource;
import javax.xml.transform.stream.StreamResult;
...
// Set the TransformerFactory system property.
// Note: For more flexibility, load properties from a properties file.
String key = "javax.xml.transform.TransformerFactory";
String value = "org.apache.xalan.xsltc.trax.TransformerFactoryImpl";
Properties props = System.getProperties();
props.put(key, value);
System.setProperties(props);
...
String xslInURI;
String xmlInURI;
String xmlInURI2;
String htmlOutURI;
String htmlOutURI2;
// Instantiate the TransformerFactory, and use it along with a StreamSource
// XSL stylesheet to create a Transformer.
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer =
                 tFactory.newTransformer(new StreamSource(xslInURI));
// Perform the transformation from a StreamSource to a StreamResult;
transformer.transform(new StreamSource(xmlInURI),
                  new StreamResult(new FileOutputStream(htmlOutURI)));
// Re-use the same transformer for a second transformation
transformer.transform(new StreamSource(xmlInURI2),
                  new StreamResult(new FileOutputStream(htmlOutURI2)));</source>
<p>For a working sample that illustrates this usage pattern, see <link idref="samples" anchor="xsltc2">JAXPTransletMultipleTransformations</link>.</p>
</s3>
</s2>

<anchor name="xsltcsmart"/>
<s2 title="Smart Transformer Switch">
<p>As part of the JAXP API, a &quot;Smart Transformer Switch&quot; enables automatic switching 
between &xslt4ji; and &xslt4jc-short; processors within your application. It uses &xslt4ji; 
processor to create your <code>Transformer</code> objects, and uses &xslt4jc-short; to create your 
<code>Templates</code> objects.</p>
<p>To use the switch, you set the JAXP system property,
<code>javax.xml.transform.TransformerFactory</code>, to
<code>org.apache.xalan.xsltc.trax.SmartTransformerFactoryImpl</code>. 
For one-time transformations or transformations that require extensions
supported by &xslt4ji;, and not &xslt4jc-short;, you would use the
<code>SmartTransformerFactoryImpl</code> to create <code>Transformer</code>
objects. For a repeated transformation where performance is critical, you would
create a <code>Templates</code> object from which you would create your
<code>Transformer</code> objects.</p> 
</s2>

<anchor name="native_api"/>
<s2 title="Calling &xslt4jc-short; with the native API">
<p>The &xslt4jc-short; Native API is no longer supported.  Instead, you should always
use &xslt4jc-short; with the JAXP Transform API.</p>
</s2>

<anchor name="constraints"/>
<s2 title="Usage constraints">
<ul>
  <li>The default for template inlining has been changed. Previously,
    by default, inlining (putting all the templates into one big method) was on and 
    the <code>&quot;-n&quot;</code> option to the compile command line disabled inlining. 
    With inlining on, &xslt4jc-short; can generate methods that are too long (<em>&gt; 64K length</em>) 
    to run, or contain jump offsets that are too large for the JVM to handle. 
    Now the default is not to inline templates. Instead, compilation creates separate 
    methods for each template. Inlining was thought to improve performance, 
    but with recent hotspot technology in the Java 1.4.x JVM, performance is better with 
    inlining off. From the command line, you would use <code>&quot;-n&quot;</code> 
    to turn on inlining, or with JAXP set the &quot;enable-inlining&quot; attribute to the TransformerFactory. 
    For example, 
      <source>TransformerFactory tfac = new TransformerFactory(); 
tfac.setAttribute(&quot;enable-inlining&quot;, Boolean.TRUE);</source><br/></li>
  <li>&xslt4jc-short; tries to determine the order in which global variables are initialized 
    by tracking the dependencies between them. In some cases, the value of a variable 
    may depend on a template, e.g., if <code>xsl:call-template</code> is used to initialized
    a variable whose type is RTF. If this happens, a
    <code>NullPointerException</code> may be thrown at run-time 
    when the translet attempts to access a variable that has not been properly 
    initialized. In most cases, this problem can be avoided by reordering the 
    variable declarations.<br/></li>
</ul>
<p>To check on the open bugs in the current Apache xml-xalan/java repository, 
  follow the instructions below:</p>
<ol>
  <li>Go to <jump href="http://issues.apache.org/jira">http://issues.apache.org/jira</jump>.</li>
  <li>Select project <em>XalanJ2</em>.</li>
  <li>Select <em>XSLTC</em> from the Components list.</li> 
</ol>
</s2>
</s1>
