jaxp/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xslt/Process.java
changeset 32054 51926b23f437
parent 32052 5b2b61c7d84d
parent 32053 3fe787cb58f4
child 32055 620051149184
equal deleted inserted replaced
32052:5b2b61c7d84d 32054:51926b23f437
     1 /*
       
     2  * reserved comment block
       
     3  * DO NOT REMOVE OR ALTER!
       
     4  */
       
     5 /*
       
     6  * Copyright 1999-2004 The Apache Software Foundation.
       
     7  *
       
     8  * Licensed under the Apache License, Version 2.0 (the "License");
       
     9  * you may not use this file except in compliance with the License.
       
    10  * You may obtain a copy of the License at
       
    11  *
       
    12  *     http://www.apache.org/licenses/LICENSE-2.0
       
    13  *
       
    14  * Unless required by applicable law or agreed to in writing, software
       
    15  * distributed under the License is distributed on an "AS IS" BASIS,
       
    16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       
    17  * See the License for the specific language governing permissions and
       
    18  * limitations under the License.
       
    19  */
       
    20 /*
       
    21  * $Id: Process.java,v 1.2.4.2 2005/09/15 18:21:57 jeffsuttor Exp $
       
    22  */
       
    23 package com.sun.org.apache.xalan.internal.xslt;
       
    24 
       
    25 import java.io.FileOutputStream;
       
    26 import java.io.FileWriter;
       
    27 import java.io.PrintWriter;
       
    28 import java.io.StringReader;
       
    29 import java.util.Properties;
       
    30 import java.util.ResourceBundle;
       
    31 import java.util.Vector;
       
    32 
       
    33 import javax.xml.XMLConstants;
       
    34 import javax.xml.parsers.DocumentBuilder;
       
    35 import javax.xml.parsers.DocumentBuilderFactory;
       
    36 import javax.xml.parsers.ParserConfigurationException;
       
    37 import javax.xml.transform.OutputKeys;
       
    38 import javax.xml.transform.Source;
       
    39 import javax.xml.transform.Templates;
       
    40 import javax.xml.transform.Transformer;
       
    41 import javax.xml.transform.TransformerConfigurationException;
       
    42 import javax.xml.transform.TransformerException;
       
    43 import javax.xml.transform.TransformerFactory;
       
    44 import javax.xml.transform.TransformerFactoryConfigurationError;
       
    45 import javax.xml.transform.URIResolver;
       
    46 import javax.xml.transform.dom.DOMResult;
       
    47 import javax.xml.transform.dom.DOMSource;
       
    48 import javax.xml.transform.sax.SAXResult;
       
    49 import javax.xml.transform.sax.SAXSource;
       
    50 import javax.xml.transform.sax.SAXTransformerFactory;
       
    51 import javax.xml.transform.sax.TransformerHandler;
       
    52 import javax.xml.transform.stream.StreamResult;
       
    53 import javax.xml.transform.stream.StreamSource;
       
    54 
       
    55 import com.sun.org.apache.xalan.internal.Version;
       
    56 import com.sun.org.apache.xalan.internal.res.XSLMessages;
       
    57 import com.sun.org.apache.xalan.internal.res.XSLTErrorResources;
       
    58 import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
       
    59 import com.sun.org.apache.xalan.internal.utils.ConfigurationError;
       
    60 import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
       
    61 
       
    62 //J2SE does not support Xalan interpretive
       
    63 /*
       
    64 import com.sun.org.apache.xalan.internal.trace.PrintTraceListener;
       
    65 import com.sun.org.apache.xalan.internal.trace.TraceManager;
       
    66 import com.sun.org.apache.xalan.internal.transformer.XalanProperties;
       
    67 */
       
    68 
       
    69 import com.sun.org.apache.xml.internal.utils.DefaultErrorHandler;
       
    70 
       
    71 import org.w3c.dom.Document;
       
    72 import org.w3c.dom.Node;
       
    73 
       
    74 import org.xml.sax.ContentHandler;
       
    75 import org.xml.sax.EntityResolver;
       
    76 import org.xml.sax.InputSource;
       
    77 import org.xml.sax.XMLReader;
       
    78 import org.xml.sax.helpers.XMLReaderFactory;
       
    79 
       
    80 /**
       
    81  * The main() method handles the Xalan command-line interface.
       
    82  * @xsl.usage general
       
    83  */
       
    84 public class Process
       
    85 {
       
    86   /**
       
    87    * Prints argument options.
       
    88    *
       
    89    * @param resbundle Resource bundle
       
    90    */
       
    91   protected static void printArgOptions(ResourceBundle resbundle)
       
    92   {
       
    93     System.out.println(resbundle.getString("xslProc_option"));  //"xslproc options: ");
       
    94     System.out.println("\n\t\t\t" + resbundle.getString("xslProc_common_options") + "\n");
       
    95     System.out.println(resbundle.getString("optionXSLTC"));  //"    [-XSLTC (use XSLTC for transformation)]
       
    96     System.out.println(resbundle.getString("optionIN"));  //"    [-IN inputXMLURL]");
       
    97     System.out.println(resbundle.getString("optionXSL"));  //"   [-XSL XSLTransformationURL]");
       
    98     System.out.println(resbundle.getString("optionOUT"));  //"   [-OUT outputFileName]");
       
    99 
       
   100     // System.out.println(resbundle.getString("optionE")); //"   [-E (Do not expand entity refs)]");
       
   101     System.out.println(resbundle.getString("optionV"));  //"   [-V (Version info)]");
       
   102 
       
   103     // System.out.println(resbundle.getString("optionVALIDATE")); //"   [-VALIDATE (Set whether validation occurs.  Validation is off by default.)]");
       
   104     System.out.println(resbundle.getString("optionEDUMP"));  //"   [-EDUMP {optional filename} (Do stackdump on error.)]");
       
   105     System.out.println(resbundle.getString("optionXML"));  //"   [-XML (Use XML formatter and add XML header.)]");
       
   106     System.out.println(resbundle.getString("optionTEXT"));  //"   [-TEXT (Use simple Text formatter.)]");
       
   107     System.out.println(resbundle.getString("optionHTML"));  //"   [-HTML (Use HTML formatter.)]");
       
   108     System.out.println(resbundle.getString("optionPARAM"));  //"   [-PARAM name expression (Set a stylesheet parameter)]");
       
   109 
       
   110     System.out.println(resbundle.getString("optionMEDIA"));
       
   111     System.out.println(resbundle.getString("optionFLAVOR"));
       
   112     System.out.println(resbundle.getString("optionDIAG"));
       
   113     System.out.println(resbundle.getString("optionURIRESOLVER"));  //"   [-URIRESOLVER full class name (URIResolver to be used to resolve URIs)]");
       
   114     System.out.println(resbundle.getString("optionENTITYRESOLVER"));  //"   [-ENTITYRESOLVER full class name (EntityResolver to be used to resolve entities)]");
       
   115     waitForReturnKey(resbundle);
       
   116     System.out.println(resbundle.getString("optionCONTENTHANDLER"));  //"   [-CONTENTHANDLER full class name (ContentHandler to be used to serialize output)]");
       
   117     System.out.println(resbundle.getString("optionSECUREPROCESSING")); //"   [-SECURE (set the secure processing feature to true)]");
       
   118 
       
   119     // J2SE does not support Xalan interpretive
       
   120     /*
       
   121     System.out.println("\n\t\t\t" + resbundle.getString("xslProc_xalan_options") + "\n");
       
   122 
       
   123     System.out.println(resbundle.getString("optionQC"));  //"   [-QC (Quiet Pattern Conflicts Warnings)]");
       
   124 
       
   125     // System.out.println(resbundle.getString("optionQ"));  //"   [-Q  (Quiet Mode)]"); // sc 28-Feb-01 commented out
       
   126     System.out.println(resbundle.getString("optionTT"));  //"   [-TT (Trace the templates as they are being called.)]");
       
   127     System.out.println(resbundle.getString("optionTG"));  //"   [-TG (Trace each generation event.)]");
       
   128     System.out.println(resbundle.getString("optionTS"));  //"   [-TS (Trace each selection event.)]");
       
   129     System.out.println(resbundle.getString("optionTTC"));  //"   [-TTC (Trace the template children as they are being processed.)]");
       
   130     System.out.println(resbundle.getString("optionTCLASS"));  //"   [-TCLASS (TraceListener class for trace extensions.)]");
       
   131     System.out.println(resbundle.getString("optionLINENUMBERS")); //"   [-L use line numbers]"
       
   132     System.out.println(resbundle.getString("optionINCREMENTAL"));
       
   133     System.out.println(resbundle.getString("optionNOOPTIMIMIZE"));
       
   134     System.out.println(resbundle.getString("optionRL"));
       
   135     */
       
   136 
       
   137     System.out.println("\n\t\t\t" + resbundle.getString("xslProc_xsltc_options") + "\n");
       
   138     System.out.println(resbundle.getString("optionXO"));
       
   139     waitForReturnKey(resbundle);
       
   140     System.out.println(resbundle.getString("optionXD"));
       
   141     System.out.println(resbundle.getString("optionXJ"));
       
   142     System.out.println(resbundle.getString("optionXP"));
       
   143     System.out.println(resbundle.getString("optionXN"));
       
   144     System.out.println(resbundle.getString("optionXX"));
       
   145     System.out.println(resbundle.getString("optionXT"));
       
   146   }
       
   147 
       
   148   /**
       
   149    * Command line interface to transform an XML document according to
       
   150    * the instructions found in an XSL stylesheet.
       
   151    * <p>The Process class provides basic functionality for
       
   152    * performing transformations from the command line.  To see a
       
   153    * list of arguments supported, call with zero arguments.</p>
       
   154    * <p>To set stylesheet parameters from the command line, use
       
   155    * <code>-PARAM name expression</code>. If you want to set the
       
   156    * parameter to a string value, simply pass the string value
       
   157    * as-is, and it will be interpreted as a string.  (Note: if
       
   158    * the value has spaces in it, you may need to quote it depending
       
   159    * on your shell environment).</p>
       
   160    *
       
   161    * @param argv Input parameters from command line
       
   162    */
       
   163   // J2SE does not support Xalan interpretive
       
   164   // main -> _main
       
   165   public static void _main(String argv[])
       
   166   {
       
   167 
       
   168     // Runtime.getRuntime().traceMethodCalls(false); // turns Java tracing off
       
   169     boolean doStackDumpOnError = false;
       
   170     boolean setQuietMode = false;
       
   171     boolean doDiag = false;
       
   172     String msg = null;
       
   173     boolean isSecureProcessing = false;
       
   174 
       
   175     // Runtime.getRuntime().traceMethodCalls(false);
       
   176     // Runtime.getRuntime().traceInstructions(false);
       
   177 
       
   178     /**
       
   179      * The default diagnostic writer...
       
   180      */
       
   181     java.io.PrintWriter diagnosticsWriter = new PrintWriter(System.err, true);
       
   182     java.io.PrintWriter dumpWriter = diagnosticsWriter;
       
   183     ResourceBundle resbundle =
       
   184       (SecuritySupport.getResourceBundle(
       
   185         com.sun.org.apache.xml.internal.utils.res.XResourceBundle.ERROR_RESOURCES));
       
   186     String flavor = "s2s";
       
   187 
       
   188     if (argv.length < 1)
       
   189     {
       
   190       printArgOptions(resbundle);
       
   191     }
       
   192     else
       
   193     {
       
   194         // J2SE does not support Xalan interpretive
       
   195         // false -> true
       
   196         boolean useXSLTC = true;
       
   197       for (int i = 0; i < argv.length; i++)
       
   198       {
       
   199         if ("-XSLTC".equalsIgnoreCase(argv[i]))
       
   200         {
       
   201           useXSLTC = true;
       
   202         }
       
   203       }
       
   204 
       
   205       TransformerFactory tfactory;
       
   206       if (useXSLTC)
       
   207       {
       
   208          String key = "javax.xml.transform.TransformerFactory";
       
   209          String value = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl";
       
   210          Properties props = System.getProperties();
       
   211          props.put(key, value);
       
   212          System.setProperties(props);
       
   213       }
       
   214 
       
   215       try
       
   216       {
       
   217         tfactory = TransformerFactory.newInstance();
       
   218         tfactory.setErrorListener(new DefaultErrorHandler());
       
   219       }
       
   220       catch (TransformerFactoryConfigurationError pfe)
       
   221       {
       
   222         pfe.printStackTrace(dumpWriter);
       
   223 //      "XSL Process was not successful.");
       
   224         msg = XSLMessages.createMessage(
       
   225             XSLTErrorResources.ER_NOT_SUCCESSFUL, null);
       
   226         diagnosticsWriter.println(msg);
       
   227 
       
   228         tfactory = null;  // shut up compiler
       
   229 
       
   230         doExit(msg);
       
   231       }
       
   232 
       
   233       boolean formatOutput = false;
       
   234       boolean useSourceLocation = false;
       
   235       String inFileName = null;
       
   236       String outFileName = null;
       
   237       String dumpFileName = null;
       
   238       String xslFileName = null;
       
   239       String treedumpFileName = null;
       
   240       // J2SE does not support Xalan interpretive
       
   241       /*
       
   242       PrintTraceListener tracer = null;
       
   243       */
       
   244       String outputType = null;
       
   245       String media = null;
       
   246       Vector params = new Vector();
       
   247       boolean quietConflictWarnings = false;
       
   248       URIResolver uriResolver = null;
       
   249       EntityResolver entityResolver = null;
       
   250       ContentHandler contentHandler = null;
       
   251       int recursionLimit=-1;
       
   252 
       
   253       for (int i = 0; i < argv.length; i++)
       
   254       {
       
   255         if ("-XSLTC".equalsIgnoreCase(argv[i]))
       
   256         {
       
   257           // The -XSLTC option has been processed.
       
   258         }
       
   259         // J2SE does not support Xalan interpretive
       
   260         /*
       
   261         else if ("-TT".equalsIgnoreCase(argv[i]))
       
   262         {
       
   263           if (!useXSLTC)
       
   264           {
       
   265             if (null == tracer)
       
   266               tracer = new PrintTraceListener(diagnosticsWriter);
       
   267 
       
   268             tracer.m_traceTemplates = true;
       
   269           }
       
   270           else
       
   271             printInvalidXSLTCOption("-TT");
       
   272 
       
   273           // tfactory.setTraceTemplates(true);
       
   274         }
       
   275         else if ("-TG".equalsIgnoreCase(argv[i]))
       
   276         {
       
   277           if (!useXSLTC)
       
   278           {
       
   279             if (null == tracer)
       
   280               tracer = new PrintTraceListener(diagnosticsWriter);
       
   281 
       
   282             tracer.m_traceGeneration = true;
       
   283           }
       
   284           else
       
   285             printInvalidXSLTCOption("-TG");
       
   286 
       
   287           // tfactory.setTraceSelect(true);
       
   288         }
       
   289         else if ("-TS".equalsIgnoreCase(argv[i]))
       
   290         {
       
   291           if (!useXSLTC)
       
   292           {
       
   293             if (null == tracer)
       
   294               tracer = new PrintTraceListener(diagnosticsWriter);
       
   295 
       
   296             tracer.m_traceSelection = true;
       
   297           }
       
   298           else
       
   299             printInvalidXSLTCOption("-TS");
       
   300 
       
   301           // tfactory.setTraceTemplates(true);
       
   302         }
       
   303         else if ("-TTC".equalsIgnoreCase(argv[i]))
       
   304         {
       
   305           if (!useXSLTC)
       
   306           {
       
   307             if (null == tracer)
       
   308               tracer = new PrintTraceListener(diagnosticsWriter);
       
   309 
       
   310             tracer.m_traceElements = true;
       
   311           }
       
   312           else
       
   313             printInvalidXSLTCOption("-TTC");
       
   314 
       
   315           // tfactory.setTraceTemplateChildren(true);
       
   316         }
       
   317         */
       
   318         else if ("-INDENT".equalsIgnoreCase(argv[i]))
       
   319         {
       
   320           int indentAmount;
       
   321 
       
   322           if (((i + 1) < argv.length) && (argv[i + 1].charAt(0) != '-'))
       
   323           {
       
   324             indentAmount = Integer.parseInt(argv[++i]);
       
   325           }
       
   326           else
       
   327           {
       
   328             indentAmount = 0;
       
   329           }
       
   330 
       
   331           // TBD:
       
   332           // xmlProcessorLiaison.setIndent(indentAmount);
       
   333         }
       
   334         else if ("-IN".equalsIgnoreCase(argv[i]))
       
   335         {
       
   336           if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   337             inFileName = argv[++i];
       
   338           else
       
   339             System.err.println(
       
   340               XSLMessages.createMessage(
       
   341                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   342                 new Object[]{ "-IN" }));  //"Missing argument for);
       
   343         }
       
   344         else if ("-MEDIA".equalsIgnoreCase(argv[i]))
       
   345         {
       
   346           if (i + 1 < argv.length)
       
   347             media = argv[++i];
       
   348           else
       
   349             System.err.println(
       
   350               XSLMessages.createMessage(
       
   351                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   352                 new Object[]{ "-MEDIA" }));  //"Missing argument for);
       
   353         }
       
   354         else if ("-OUT".equalsIgnoreCase(argv[i]))
       
   355         {
       
   356           if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   357             outFileName = argv[++i];
       
   358           else
       
   359             System.err.println(
       
   360               XSLMessages.createMessage(
       
   361                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   362                 new Object[]{ "-OUT" }));  //"Missing argument for);
       
   363         }
       
   364         else if ("-XSL".equalsIgnoreCase(argv[i]))
       
   365         {
       
   366           if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   367             xslFileName = argv[++i];
       
   368           else
       
   369             System.err.println(
       
   370               XSLMessages.createMessage(
       
   371                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   372                 new Object[]{ "-XSL" }));  //"Missing argument for);
       
   373         }
       
   374         else if ("-FLAVOR".equalsIgnoreCase(argv[i]))
       
   375         {
       
   376           if (i + 1 < argv.length)
       
   377           {
       
   378             flavor = argv[++i];
       
   379           }
       
   380           else
       
   381             System.err.println(
       
   382               XSLMessages.createMessage(
       
   383                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   384                 new Object[]{ "-FLAVOR" }));  //"Missing argument for);
       
   385         }
       
   386         else if ("-PARAM".equalsIgnoreCase(argv[i]))
       
   387         {
       
   388           if (i + 2 < argv.length)
       
   389           {
       
   390             String name = argv[++i];
       
   391 
       
   392             params.addElement(name);
       
   393 
       
   394             String expression = argv[++i];
       
   395 
       
   396             params.addElement(expression);
       
   397           }
       
   398           else
       
   399             System.err.println(
       
   400               XSLMessages.createMessage(
       
   401                 XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   402                 new Object[]{ "-PARAM" }));  //"Missing argument for);
       
   403         }
       
   404         else if ("-E".equalsIgnoreCase(argv[i]))
       
   405         {
       
   406 
       
   407           // TBD:
       
   408           // xmlProcessorLiaison.setShouldExpandEntityRefs(false);
       
   409         }
       
   410         else if ("-V".equalsIgnoreCase(argv[i]))
       
   411         {
       
   412           diagnosticsWriter.println(resbundle.getString("version")  //">>>>>>> Xalan Version "
       
   413                                     + Version.getVersion() + ", " +
       
   414 
       
   415           /* xmlProcessorLiaison.getParserDescription()+ */
       
   416           resbundle.getString("version2"));  // "<<<<<<<");
       
   417         }
       
   418         // J2SE does not support Xalan interpretive
       
   419         /*
       
   420         else if ("-QC".equalsIgnoreCase(argv[i]))
       
   421         {
       
   422           if (!useXSLTC)
       
   423             quietConflictWarnings = true;
       
   424           else
       
   425             printInvalidXSLTCOption("-QC");
       
   426         }
       
   427         */
       
   428         else if ("-Q".equalsIgnoreCase(argv[i]))
       
   429         {
       
   430           setQuietMode = true;
       
   431         }
       
   432         else if ("-DIAG".equalsIgnoreCase(argv[i]))
       
   433         {
       
   434           doDiag = true;
       
   435         }
       
   436         else if ("-XML".equalsIgnoreCase(argv[i]))
       
   437         {
       
   438           outputType = "xml";
       
   439         }
       
   440         else if ("-TEXT".equalsIgnoreCase(argv[i]))
       
   441         {
       
   442           outputType = "text";
       
   443         }
       
   444         else if ("-HTML".equalsIgnoreCase(argv[i]))
       
   445         {
       
   446           outputType = "html";
       
   447         }
       
   448         else if ("-EDUMP".equalsIgnoreCase(argv[i]))
       
   449         {
       
   450           doStackDumpOnError = true;
       
   451 
       
   452           if (((i + 1) < argv.length) && (argv[i + 1].charAt(0) != '-'))
       
   453           {
       
   454             dumpFileName = argv[++i];
       
   455           }
       
   456         }
       
   457         else if ("-URIRESOLVER".equalsIgnoreCase(argv[i]))
       
   458         {
       
   459           if (i + 1 < argv.length)
       
   460           {
       
   461             try
       
   462             {
       
   463               uriResolver = (URIResolver) ObjectFactory.newInstance(argv[++i], true);
       
   464 
       
   465               tfactory.setURIResolver(uriResolver);
       
   466             }
       
   467             catch (ConfigurationError cnfe)
       
   468             {
       
   469                 msg = XSLMessages.createMessage(
       
   470                     XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
       
   471                     new Object[]{ "-URIResolver" });
       
   472               System.err.println(msg);
       
   473               doExit(msg);
       
   474             }
       
   475           }
       
   476           else
       
   477           {
       
   478             msg = XSLMessages.createMessage(
       
   479                     XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   480                     new Object[]{ "-URIResolver" });  //"Missing argument for);
       
   481             System.err.println(msg);
       
   482             doExit(msg);
       
   483           }
       
   484         }
       
   485         else if ("-ENTITYRESOLVER".equalsIgnoreCase(argv[i]))
       
   486         {
       
   487           if (i + 1 < argv.length)
       
   488           {
       
   489             try
       
   490             {
       
   491               entityResolver = (EntityResolver) ObjectFactory.newInstance(argv[++i], true);
       
   492             }
       
   493             catch (ConfigurationError cnfe)
       
   494             {
       
   495                 msg = XSLMessages.createMessage(
       
   496                     XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
       
   497                     new Object[]{ "-EntityResolver" });
       
   498               System.err.println(msg);
       
   499               doExit(msg);
       
   500             }
       
   501           }
       
   502           else
       
   503           {
       
   504 //            "Missing argument for);
       
   505               msg = XSLMessages.createMessage(
       
   506                     XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   507                     new Object[]{ "-EntityResolver" });
       
   508             System.err.println(msg);
       
   509             doExit(msg);
       
   510           }
       
   511         }
       
   512         else if ("-CONTENTHANDLER".equalsIgnoreCase(argv[i]))
       
   513         {
       
   514           if (i + 1 < argv.length)
       
   515           {
       
   516             try
       
   517             {
       
   518               contentHandler = (ContentHandler) ObjectFactory.newInstance(argv[++i], true);
       
   519             }
       
   520             catch (ConfigurationError cnfe)
       
   521             {
       
   522                 msg = XSLMessages.createMessage(
       
   523                     XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION,
       
   524                     new Object[]{ "-ContentHandler" });
       
   525               System.err.println(msg);
       
   526               doExit(msg);
       
   527             }
       
   528           }
       
   529           else
       
   530           {
       
   531 //            "Missing argument for);
       
   532               msg = XSLMessages.createMessage(
       
   533                     XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   534                     new Object[]{ "-ContentHandler" });
       
   535             System.err.println(msg);
       
   536             doExit(msg);
       
   537           }
       
   538         }
       
   539         // J2SE does not support Xalan interpretive
       
   540         /*
       
   541         else if ("-L".equalsIgnoreCase(argv[i]))
       
   542         {
       
   543           if (!useXSLTC)
       
   544             tfactory.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
       
   545           else
       
   546             printInvalidXSLTCOption("-L");
       
   547         }
       
   548         else if ("-INCREMENTAL".equalsIgnoreCase(argv[i]))
       
   549         {
       
   550           if (!useXSLTC)
       
   551             tfactory.setAttribute
       
   552               ("http://xml.apache.org/xalan/features/incremental",
       
   553                java.lang.Boolean.TRUE);
       
   554           else
       
   555             printInvalidXSLTCOption("-INCREMENTAL");
       
   556         }
       
   557         else if ("-NOOPTIMIZE".equalsIgnoreCase(argv[i]))
       
   558         {
       
   559           // Default is true.
       
   560           //
       
   561           // %REVIEW% We should have a generalized syntax for negative
       
   562           // switches...  and probably should accept the inverse even
       
   563           // if it is the default.
       
   564           if (!useXSLTC)
       
   565             tfactory.setAttribute
       
   566               ("http://xml.apache.org/xalan/features/optimize",
       
   567                java.lang.Boolean.FALSE);
       
   568           else
       
   569             printInvalidXSLTCOption("-NOOPTIMIZE");
       
   570         }
       
   571         else if ("-RL".equalsIgnoreCase(argv[i]))
       
   572         {
       
   573           if (!useXSLTC)
       
   574           {
       
   575             if (i + 1 < argv.length)
       
   576               recursionLimit = Integer.parseInt(argv[++i]);
       
   577             else
       
   578               System.err.println(
       
   579                 XSLMessages.createMessage(
       
   580                   XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   581                   new Object[]{ "-rl" }));  //"Missing argument for);
       
   582           }
       
   583           else
       
   584           {
       
   585             if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   586              i++;
       
   587 
       
   588             printInvalidXSLTCOption("-RL");
       
   589           }
       
   590         }
       
   591         */
       
   592         // Generate the translet class and optionally specify the name
       
   593         // of the translet class.
       
   594         else if ("-XO".equalsIgnoreCase(argv[i]))
       
   595         {
       
   596           if (useXSLTC)
       
   597           {
       
   598             if (i + 1 < argv.length && argv[i+1].charAt(0) != '-')
       
   599             {
       
   600               tfactory.setAttribute("generate-translet", "true");
       
   601               tfactory.setAttribute("translet-name", argv[++i]);
       
   602             }
       
   603             else
       
   604               tfactory.setAttribute("generate-translet", "true");
       
   605           }
       
   606           else
       
   607           {
       
   608             if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   609              i++;
       
   610             printInvalidXalanOption("-XO");
       
   611           }
       
   612         }
       
   613         // Specify the destination directory for the translet classes.
       
   614         else if ("-XD".equalsIgnoreCase(argv[i]))
       
   615         {
       
   616           if (useXSLTC)
       
   617           {
       
   618             if (i + 1 < argv.length && argv[i+1].charAt(0) != '-')
       
   619               tfactory.setAttribute("destination-directory", argv[++i]);
       
   620             else
       
   621               System.err.println(
       
   622                 XSLMessages.createMessage(
       
   623                   XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   624                   new Object[]{ "-XD" }));  //"Missing argument for);
       
   625 
       
   626           }
       
   627           else
       
   628           {
       
   629             if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   630              i++;
       
   631 
       
   632             printInvalidXalanOption("-XD");
       
   633           }
       
   634         }
       
   635         // Specify the jar file name which the translet classes are packaged into.
       
   636         else if ("-XJ".equalsIgnoreCase(argv[i]))
       
   637         {
       
   638           if (useXSLTC)
       
   639           {
       
   640             if (i + 1 < argv.length && argv[i+1].charAt(0) != '-')
       
   641             {
       
   642               tfactory.setAttribute("generate-translet", "true");
       
   643               tfactory.setAttribute("jar-name", argv[++i]);
       
   644             }
       
   645             else
       
   646               System.err.println(
       
   647                 XSLMessages.createMessage(
       
   648                   XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   649                   new Object[]{ "-XJ" }));  //"Missing argument for);
       
   650           }
       
   651           else
       
   652           {
       
   653             if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   654              i++;
       
   655 
       
   656             printInvalidXalanOption("-XJ");
       
   657           }
       
   658 
       
   659         }
       
   660         // Specify the package name prefix for the generated translet classes.
       
   661         else if ("-XP".equalsIgnoreCase(argv[i]))
       
   662         {
       
   663           if (useXSLTC)
       
   664           {
       
   665             if (i + 1 < argv.length && argv[i+1].charAt(0) != '-')
       
   666               tfactory.setAttribute("package-name", argv[++i]);
       
   667             else
       
   668               System.err.println(
       
   669                 XSLMessages.createMessage(
       
   670                   XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION,
       
   671                   new Object[]{ "-XP" }));  //"Missing argument for);
       
   672           }
       
   673           else
       
   674           {
       
   675             if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-')
       
   676              i++;
       
   677 
       
   678             printInvalidXalanOption("-XP");
       
   679           }
       
   680 
       
   681         }
       
   682         // Enable template inlining.
       
   683         else if ("-XN".equalsIgnoreCase(argv[i]))
       
   684         {
       
   685           if (useXSLTC)
       
   686           {
       
   687             tfactory.setAttribute("enable-inlining", "true");
       
   688           }
       
   689           else
       
   690             printInvalidXalanOption("-XN");
       
   691         }
       
   692         // Turns on additional debugging message output
       
   693         else if ("-XX".equalsIgnoreCase(argv[i]))
       
   694         {
       
   695           if (useXSLTC)
       
   696           {
       
   697             tfactory.setAttribute("debug", "true");
       
   698           }
       
   699           else
       
   700             printInvalidXalanOption("-XX");
       
   701         }
       
   702         // Create the Transformer from the translet if the translet class is newer
       
   703         // than the stylesheet.
       
   704         else if ("-XT".equalsIgnoreCase(argv[i]))
       
   705         {
       
   706           if (useXSLTC)
       
   707           {
       
   708             tfactory.setAttribute("auto-translet", "true");
       
   709           }
       
   710           else
       
   711             printInvalidXalanOption("-XT");
       
   712         }
       
   713         else if ("-SECURE".equalsIgnoreCase(argv[i]))
       
   714         {
       
   715           isSecureProcessing = true;
       
   716           try
       
   717           {
       
   718             tfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       
   719           }
       
   720           catch (TransformerConfigurationException e) {}
       
   721         }
       
   722         else
       
   723           System.err.println(
       
   724             XSLMessages.createMessage(
       
   725               XSLTErrorResources.ER_INVALID_OPTION, new Object[]{ argv[i] }));  //"Invalid argument:);
       
   726       }
       
   727 
       
   728       // Print usage instructions if no xml and xsl file is specified in the command line
       
   729       if (inFileName == null && xslFileName == null)
       
   730       {
       
   731           msg = resbundle.getString("xslProc_no_input");
       
   732         System.err.println(msg);
       
   733         doExit(msg);
       
   734       }
       
   735 
       
   736       // Note that there are usage cases for calling us without a -IN arg
       
   737       // The main XSL transformation occurs here!
       
   738       try
       
   739       {
       
   740         long start = System.currentTimeMillis();
       
   741 
       
   742         if (null != dumpFileName)
       
   743         {
       
   744           dumpWriter = new PrintWriter(new FileWriter(dumpFileName));
       
   745         }
       
   746 
       
   747         Templates stylesheet = null;
       
   748 
       
   749         if (null != xslFileName)
       
   750         {
       
   751           if (flavor.equals("d2d"))
       
   752           {
       
   753 
       
   754             // Parse in the xml data into a DOM
       
   755             DocumentBuilderFactory dfactory =
       
   756               DocumentBuilderFactory.newInstance();
       
   757 
       
   758             dfactory.setNamespaceAware(true);
       
   759 
       
   760             if (isSecureProcessing)
       
   761             {
       
   762               try
       
   763               {
       
   764                 dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       
   765               }
       
   766               catch (ParserConfigurationException pce) {}
       
   767             }
       
   768 
       
   769             DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
       
   770             Node xslDOM = docBuilder.parse(new InputSource(xslFileName));
       
   771 
       
   772             stylesheet = tfactory.newTemplates(new DOMSource(xslDOM,
       
   773                     xslFileName));
       
   774           }
       
   775           else
       
   776           {
       
   777             // System.out.println("Calling newTemplates: "+xslFileName);
       
   778             stylesheet = tfactory.newTemplates(new StreamSource(xslFileName));
       
   779             // System.out.println("Done calling newTemplates: "+xslFileName);
       
   780           }
       
   781         }
       
   782 
       
   783         PrintWriter resultWriter;
       
   784         StreamResult strResult;
       
   785 
       
   786         if (null != outFileName)
       
   787         {
       
   788           strResult = new StreamResult(new FileOutputStream(outFileName));
       
   789           // One possible improvement might be to ensure this is
       
   790           //  a valid URI before setting the systemId, but that
       
   791           //  might have subtle changes that pre-existing users
       
   792           //  might notice; we can think about that later -sc r1.46
       
   793           strResult.setSystemId(outFileName);
       
   794         }
       
   795         else
       
   796         {
       
   797           strResult = new StreamResult(System.out);
       
   798           // We used to default to incremental mode in this case.
       
   799           // We've since decided that since the -INCREMENTAL switch is
       
   800           // available, that default is probably not necessary nor
       
   801           // necessarily a good idea.
       
   802         }
       
   803 
       
   804         SAXTransformerFactory stf = (SAXTransformerFactory) tfactory;
       
   805 
       
   806         // J2SE does not support Xalan interpretive
       
   807         /*
       
   808                 // This is currently controlled via TransformerFactoryImpl.
       
   809         if (!useXSLTC && useSourceLocation)
       
   810            stf.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
       
   811         */
       
   812 
       
   813         // Did they pass in a stylesheet, or should we get it from the
       
   814         // document?
       
   815         if (null == stylesheet)
       
   816         {
       
   817           Source source =
       
   818             stf.getAssociatedStylesheet(new StreamSource(inFileName), media,
       
   819                                         null, null);
       
   820 
       
   821           if (null != source)
       
   822             stylesheet = tfactory.newTemplates(source);
       
   823           else
       
   824           {
       
   825             if (null != media)
       
   826               throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_STYLESHEET_IN_MEDIA, new Object[]{inFileName, media})); //"No stylesheet found in: "
       
   827                                             // + inFileName + ", media="
       
   828                                             // + media);
       
   829             else
       
   830               throw new TransformerException(XSLMessages.createMessage(XSLTErrorResources.ER_NO_STYLESHEET_PI, new Object[]{inFileName})); //"No xml-stylesheet PI found in: "
       
   831                                              //+ inFileName);
       
   832           }
       
   833         }
       
   834 
       
   835         if (null != stylesheet)
       
   836         {
       
   837           Transformer transformer = flavor.equals("th") ? null : stylesheet.newTransformer();
       
   838           transformer.setErrorListener(new DefaultErrorHandler());
       
   839 
       
   840           // Override the output format?
       
   841           if (null != outputType)
       
   842           {
       
   843             transformer.setOutputProperty(OutputKeys.METHOD, outputType);
       
   844           }
       
   845 
       
   846           // J2SE does not support Xalan interpretive
       
   847           /*
       
   848           if (transformer instanceof com.sun.org.apache.xalan.internal.transformer.TransformerImpl)
       
   849           {
       
   850             com.sun.org.apache.xalan.internal.transformer.TransformerImpl impl = (com.sun.org.apache.xalan.internal.transformer.TransformerImpl)transformer;
       
   851             TraceManager tm = impl.getTraceManager();
       
   852 
       
   853             if (null != tracer)
       
   854               tm.addTraceListener(tracer);
       
   855 
       
   856             impl.setQuietConflictWarnings(quietConflictWarnings);
       
   857 
       
   858                         // This is currently controlled via TransformerFactoryImpl.
       
   859             if (useSourceLocation)
       
   860               impl.setProperty(XalanProperties.SOURCE_LOCATION, Boolean.TRUE);
       
   861 
       
   862             if(recursionLimit>0)
       
   863               impl.setRecursionLimit(recursionLimit);
       
   864 
       
   865             // sc 28-Feb-01 if we re-implement this, please uncomment helpmsg in printArgOptions
       
   866             // impl.setDiagnosticsOutput( setQuietMode ? null : diagnosticsWriter );
       
   867           }
       
   868           */
       
   869 
       
   870           int nParams = params.size();
       
   871 
       
   872           for (int i = 0; i < nParams; i += 2)
       
   873           {
       
   874             transformer.setParameter((String) params.elementAt(i),
       
   875                                      (String) params.elementAt(i + 1));
       
   876           }
       
   877 
       
   878           if (uriResolver != null)
       
   879             transformer.setURIResolver(uriResolver);
       
   880 
       
   881           if (null != inFileName)
       
   882           {
       
   883             if (flavor.equals("d2d"))
       
   884             {
       
   885 
       
   886               // Parse in the xml data into a DOM
       
   887               DocumentBuilderFactory dfactory =
       
   888                 DocumentBuilderFactory.newInstance();
       
   889 
       
   890               dfactory.setCoalescing(true);
       
   891               dfactory.setNamespaceAware(true);
       
   892 
       
   893               if (isSecureProcessing)
       
   894               {
       
   895                 try
       
   896                 {
       
   897                   dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       
   898                 }
       
   899                 catch (ParserConfigurationException pce) {}
       
   900               }
       
   901 
       
   902               DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
       
   903 
       
   904               if (entityResolver != null)
       
   905                 docBuilder.setEntityResolver(entityResolver);
       
   906 
       
   907               Node xmlDoc = docBuilder.parse(new InputSource(inFileName));
       
   908               Document doc = docBuilder.newDocument();
       
   909               org.w3c.dom.DocumentFragment outNode =
       
   910                 doc.createDocumentFragment();
       
   911 
       
   912               transformer.transform(new DOMSource(xmlDoc, inFileName),
       
   913                                     new DOMResult(outNode));
       
   914 
       
   915               // Now serialize output to disk with identity transformer
       
   916               Transformer serializer = stf.newTransformer();
       
   917               serializer.setErrorListener(new DefaultErrorHandler());
       
   918 
       
   919               Properties serializationProps =
       
   920                 stylesheet.getOutputProperties();
       
   921 
       
   922               serializer.setOutputProperties(serializationProps);
       
   923 
       
   924               if (contentHandler != null)
       
   925               {
       
   926                 SAXResult result = new SAXResult(contentHandler);
       
   927 
       
   928                 serializer.transform(new DOMSource(outNode), result);
       
   929               }
       
   930               else
       
   931                 serializer.transform(new DOMSource(outNode), strResult);
       
   932             }
       
   933             else if (flavor.equals("th"))
       
   934             {
       
   935               for (int i = 0; i < 1; i++) // Loop for diagnosing bugs with inconsistent behavior
       
   936               {
       
   937               // System.out.println("Testing the TransformerHandler...");
       
   938 
       
   939               XMLReader reader = null;
       
   940 
       
   941               // Use JAXP1.1 ( if possible )
       
   942               try
       
   943               {
       
   944                 javax.xml.parsers.SAXParserFactory factory =
       
   945                   javax.xml.parsers.SAXParserFactory.newInstance();
       
   946 
       
   947                 factory.setNamespaceAware(true);
       
   948 
       
   949                 if (isSecureProcessing)
       
   950                 {
       
   951                   try
       
   952                   {
       
   953                     factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       
   954                   }
       
   955                   catch (org.xml.sax.SAXException se) {}
       
   956                 }
       
   957 
       
   958                 javax.xml.parsers.SAXParser jaxpParser =
       
   959                   factory.newSAXParser();
       
   960 
       
   961                 reader = jaxpParser.getXMLReader();
       
   962               }
       
   963               catch (javax.xml.parsers.ParserConfigurationException ex)
       
   964               {
       
   965                 throw new org.xml.sax.SAXException(ex);
       
   966               }
       
   967               catch (javax.xml.parsers.FactoryConfigurationError ex1)
       
   968               {
       
   969                 throw new org.xml.sax.SAXException(ex1.toString());
       
   970               }
       
   971               catch (NoSuchMethodError ex2){}
       
   972               catch (AbstractMethodError ame){}
       
   973 
       
   974               if (null == reader)
       
   975               {
       
   976                 reader = XMLReaderFactory.createXMLReader();
       
   977               }
       
   978 
       
   979               // J2SE does not support Xalan interpretive
       
   980               /*
       
   981               if (!useXSLTC)
       
   982                 stf.setAttribute(com.sun.org.apache.xalan.internal.processor.TransformerFactoryImpl.FEATURE_INCREMENTAL,
       
   983                    Boolean.TRUE);
       
   984               */
       
   985 
       
   986               TransformerHandler th = stf.newTransformerHandler(stylesheet);
       
   987 
       
   988               reader.setContentHandler(th);
       
   989               reader.setDTDHandler(th);
       
   990 
       
   991               if(th instanceof org.xml.sax.ErrorHandler)
       
   992                 reader.setErrorHandler((org.xml.sax.ErrorHandler)th);
       
   993 
       
   994               try
       
   995               {
       
   996                 reader.setProperty(
       
   997                   "http://xml.org/sax/properties/lexical-handler", th);
       
   998               }
       
   999               catch (org.xml.sax.SAXNotRecognizedException e){}
       
  1000               catch (org.xml.sax.SAXNotSupportedException e){}
       
  1001               try
       
  1002               {
       
  1003                 reader.setFeature("http://xml.org/sax/features/namespace-prefixes",
       
  1004                                   true);
       
  1005               } catch (org.xml.sax.SAXException se) {}
       
  1006 
       
  1007               th.setResult(strResult);
       
  1008 
       
  1009               reader.parse(new InputSource(inFileName));
       
  1010               }
       
  1011             }
       
  1012             else
       
  1013             {
       
  1014               if (entityResolver != null)
       
  1015               {
       
  1016                 XMLReader reader = null;
       
  1017 
       
  1018                 // Use JAXP1.1 ( if possible )
       
  1019                 try
       
  1020                 {
       
  1021                   javax.xml.parsers.SAXParserFactory factory =
       
  1022                     javax.xml.parsers.SAXParserFactory.newInstance();
       
  1023 
       
  1024                   factory.setNamespaceAware(true);
       
  1025 
       
  1026                   if (isSecureProcessing)
       
  1027                   {
       
  1028                     try
       
  1029                     {
       
  1030                       factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
       
  1031                     }
       
  1032                     catch (org.xml.sax.SAXException se) {}
       
  1033                   }
       
  1034 
       
  1035                   javax.xml.parsers.SAXParser jaxpParser =
       
  1036                     factory.newSAXParser();
       
  1037 
       
  1038                   reader = jaxpParser.getXMLReader();
       
  1039                 }
       
  1040                 catch (javax.xml.parsers.ParserConfigurationException ex)
       
  1041                 {
       
  1042                   throw new org.xml.sax.SAXException(ex);
       
  1043                 }
       
  1044                 catch (javax.xml.parsers.FactoryConfigurationError ex1)
       
  1045                 {
       
  1046                   throw new org.xml.sax.SAXException(ex1.toString());
       
  1047                 }
       
  1048                 catch (NoSuchMethodError ex2){}
       
  1049                 catch (AbstractMethodError ame){}
       
  1050 
       
  1051                 if (null == reader)
       
  1052                 {
       
  1053                   reader = XMLReaderFactory.createXMLReader();
       
  1054                 }
       
  1055 
       
  1056                 reader.setEntityResolver(entityResolver);
       
  1057 
       
  1058                 if (contentHandler != null)
       
  1059                 {
       
  1060                   SAXResult result = new SAXResult(contentHandler);
       
  1061 
       
  1062                   transformer.transform(
       
  1063                     new SAXSource(reader, new InputSource(inFileName)),
       
  1064                     result);
       
  1065                 }
       
  1066                 else
       
  1067                 {
       
  1068                   transformer.transform(
       
  1069                     new SAXSource(reader, new InputSource(inFileName)),
       
  1070                     strResult);
       
  1071                 }
       
  1072               }
       
  1073               else if (contentHandler != null)
       
  1074               {
       
  1075                 SAXResult result = new SAXResult(contentHandler);
       
  1076 
       
  1077                 transformer.transform(new StreamSource(inFileName), result);
       
  1078               }
       
  1079               else
       
  1080               {
       
  1081                 // System.out.println("Starting transform");
       
  1082                 transformer.transform(new StreamSource(inFileName),
       
  1083                                       strResult);
       
  1084                 // System.out.println("Done with transform");
       
  1085               }
       
  1086             }
       
  1087           }
       
  1088           else
       
  1089           {
       
  1090             StringReader reader =
       
  1091               new StringReader("<?xml version=\"1.0\"?> <doc/>");
       
  1092 
       
  1093             transformer.transform(new StreamSource(reader), strResult);
       
  1094           }
       
  1095         }
       
  1096         else
       
  1097         {
       
  1098 //          "XSL Process was not successful.");
       
  1099             msg = XSLMessages.createMessage(
       
  1100                 XSLTErrorResources.ER_NOT_SUCCESSFUL, null);
       
  1101           diagnosticsWriter.println(msg);
       
  1102           doExit(msg);
       
  1103         }
       
  1104 
       
  1105         // close output streams
       
  1106         if (null != outFileName && strResult!=null)
       
  1107         {
       
  1108           java.io.OutputStream out = strResult.getOutputStream();
       
  1109           java.io.Writer writer = strResult.getWriter();
       
  1110           try
       
  1111           {
       
  1112             if (out != null) out.close();
       
  1113             if (writer != null) writer.close();
       
  1114           }
       
  1115           catch(java.io.IOException ie) {}
       
  1116         }
       
  1117 
       
  1118         long stop = System.currentTimeMillis();
       
  1119         long millisecondsDuration = stop - start;
       
  1120 
       
  1121         if (doDiag)
       
  1122         {
       
  1123                 Object[] msgArgs = new Object[]{ inFileName, xslFileName, new Long(millisecondsDuration) };
       
  1124             msg = XSLMessages.createMessage("diagTiming", msgArgs);
       
  1125                 diagnosticsWriter.println('\n');
       
  1126                 diagnosticsWriter.println(msg);
       
  1127         }
       
  1128 
       
  1129       }
       
  1130       catch (Throwable throwable)
       
  1131       {
       
  1132         while (throwable
       
  1133                instanceof com.sun.org.apache.xml.internal.utils.WrappedRuntimeException)
       
  1134         {
       
  1135           throwable =
       
  1136             ((com.sun.org.apache.xml.internal.utils.WrappedRuntimeException) throwable).getException();
       
  1137         }
       
  1138 
       
  1139         if ((throwable instanceof NullPointerException)
       
  1140                 || (throwable instanceof ClassCastException))
       
  1141           doStackDumpOnError = true;
       
  1142 
       
  1143         diagnosticsWriter.println();
       
  1144 
       
  1145         if (doStackDumpOnError)
       
  1146           throwable.printStackTrace(dumpWriter);
       
  1147         else
       
  1148         {
       
  1149           DefaultErrorHandler.printLocation(diagnosticsWriter, throwable);
       
  1150           diagnosticsWriter.println(
       
  1151             XSLMessages.createMessage(XSLTErrorResources.ER_XSLT_ERROR, null)
       
  1152             + " (" + throwable.getClass().getName() + "): "
       
  1153             + throwable.getMessage());
       
  1154         }
       
  1155 
       
  1156         // diagnosticsWriter.println(XSLMessages.createMessage(XSLTErrorResources.ER_NOT_SUCCESSFUL, null)); //"XSL Process was not successful.");
       
  1157         if (null != dumpFileName)
       
  1158         {
       
  1159           dumpWriter.close();
       
  1160         }
       
  1161 
       
  1162         doExit(throwable.getMessage());
       
  1163       }
       
  1164 
       
  1165       if (null != dumpFileName)
       
  1166       {
       
  1167         dumpWriter.close();
       
  1168       }
       
  1169 
       
  1170       if (null != diagnosticsWriter)
       
  1171       {
       
  1172 
       
  1173         // diagnosticsWriter.close();
       
  1174       }
       
  1175 
       
  1176       // if(!setQuietMode)
       
  1177       //  diagnosticsWriter.println(resbundle.getString("xsldone")); //"Xalan: done");
       
  1178       // else
       
  1179       // diagnosticsWriter.println("");  //"Xalan: done");
       
  1180     }
       
  1181   }
       
  1182 
       
  1183   /** It is _much_ easier to debug under VJ++ if I can set a single breakpoint
       
  1184    * before this blows itself out of the water...
       
  1185    * (I keep checking this in, it keeps vanishing. Grr!)
       
  1186    * */
       
  1187   static void doExit(String msg)
       
  1188   {
       
  1189     throw new RuntimeException(msg);
       
  1190   }
       
  1191 
       
  1192   /**
       
  1193    * Wait for a return key to continue
       
  1194    *
       
  1195    * @param resbundle The resource bundle
       
  1196    */
       
  1197   private static void waitForReturnKey(ResourceBundle resbundle)
       
  1198   {
       
  1199     System.out.println(resbundle.getString("xslProc_return_to_continue"));
       
  1200     try
       
  1201     {
       
  1202       while (System.in.read() != '\n');
       
  1203     }
       
  1204     catch (java.io.IOException e) { }
       
  1205   }
       
  1206 
       
  1207   /**
       
  1208    * Print a message if an option cannot be used with -XSLTC.
       
  1209    *
       
  1210    * @param option The option String
       
  1211    */
       
  1212   private static void printInvalidXSLTCOption(String option)
       
  1213   {
       
  1214     System.err.println(XSLMessages.createMessage("xslProc_invalid_xsltc_option", new Object[]{option}));
       
  1215   }
       
  1216 
       
  1217   /**
       
  1218    * Print a message if an option can only be used with -XSLTC.
       
  1219    *
       
  1220    * @param option The option String
       
  1221    */
       
  1222   private static void printInvalidXalanOption(String option)
       
  1223   {
       
  1224     System.err.println(XSLMessages.createMessage("xslProc_invalid_xalan_option", new Object[]{option}));
       
  1225   }
       
  1226 }