File: xsltc_usage.xml

package info (click to toggle)
libxalan2-java 2.7.1-5
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 19,468 kB
  • ctags: 26,006
  • sloc: java: 175,784; xml: 28,073; sh: 164; jsp: 43; makefile: 43; sql: 6
file content (623 lines) | stat: -rw-r--r-- 27,561 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
<?xml version="1.0" standalone="no"?>
<!DOCTYPE s1 SYSTEM "../../style/dtd/document.dtd">
<!--
 * Copyright 1999-2004 The Apache Software Foundation.
 *
 * Licensed 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: xsltc_usage.xml 338218 2005-07-19 17:38:45Z mcnamara $ -->
<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>