/** * Sets the XSLT transformer from a Source * * @param source the source * @throws TransformerConfigurationException is thrown if creating a XSLT transformer failed. */ public void setTransformerSource(Source source) throws TransformerConfigurationException { TransformerFactory factory = converter.getTransformerFactory(); if (errorListener != null) { factory.setErrorListener(errorListener); } else { // use a logger error listener so users can see from the logs what the error may be factory.setErrorListener(new XsltErrorListener()); } if (getUriResolver() != null) { factory.setURIResolver(getUriResolver()); } // Check that the call to newTemplates() returns a valid template instance. // In case of an xslt parse error, it will return null and we should stop the // deployment and raise an exception as the route will not be setup properly. Templates templates = factory.newTemplates(source); if (templates != null) { setTemplate(templates); } else { throw new TransformerConfigurationException( "Error creating XSLT template. " + "This is most likely be caused by a XML parse error. " + "Please verify your XSLT file configured."); } }
/** Gets an XSLT template from the given resource location. */ public static Templates getStylesheet(String resourcePath, Class<?> sourceClass) { InputStream xsltStream; if (sourceClass == null) { try { xsltStream = new FileInputStream(resourcePath); } catch (IOException exc) { LOGGER.debug("Could not open file", exc); return null; } } else { xsltStream = sourceClass.getResourceAsStream(resourcePath); } try { StreamSource xsltSource = new StreamSource(xsltStream); // Java XML factories are not declared to be thread safe TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setErrorListener(new XMLListener()); return transformerFactory.newTemplates(xsltSource); } catch (TransformerConfigurationException exc) { LOGGER.debug("Could not construct template", exc); } finally { try { if (xsltStream != null) xsltStream.close(); } catch (IOException e) { LOGGER.debug("Could not close file", e); } } return null; }
public void configure(final JSONObject config) throws PluginBuildException { if (null == config) { throw new PluginBuildException("Cannot build plugin with null configuration"); } String xsltUrl = config.getString("stylesheet_url"); InputStream content; try { URLConnection connection = new URL(xsltUrl).openConnection(); connection.connect(); content = (InputStream) connection.getContent(); } catch (IOException e) { log.fatal(e); String msg = "Unable to read stylesheet"; notifier.notify(NotificationType.Unavailable, msg + ": " + e.getMessage()); throw new PluginBuildException(msg + ".", e); } StreamSource xsltSource = new StreamSource(content); TransformerFactory factory = TransformerFactory.newInstance(); factory.setErrorListener(xsltErrorLogger); Transformer temp; try { temp = factory.newTransformer(xsltSource); } catch (TransformerConfigurationException e) { log.fatal(e); String msg = "Cannot compile configured stylesheet"; notifier.notify(NotificationType.FatalError, msg + ":" + e.getMessage()); throw new PluginBuildException(msg, e); } transformer = temp; transformer.setErrorListener(xsltErrorLogger); registerInput("input", input); }
/** * Transforms the specifed input file to the specifed output file using the specified stylehseet. * The entries of the map <code>params</code> are passed as parameters to the stylesheet. The keys * of the map must be strings, the values may be arbitrary objects. <code>outputFilename</code> * may also be <code>null</code>, in which case the output is sent stdout. * * @param stylesheetFilename filename of the XSL stylesheet * @param inputFilename filename of the input * @param outputFilename filename of the output, or <code>null</code> if the output shout go to * stdout * @param params parameters to pass to the stylesheet * @throws Exception if something goes wrong */ public static void transform( String stylesheetFilename, String inputFilename, String outputFilename, Map params) throws Exception { // Get the stylesheet source object: Source stylesheet = new StreamSource(new File(stylesheetFilename)); // Get the input source object: Source input = new StreamSource(new File(inputFilename)); // Get the output result object: Result output = (outputFilename != null ? new StreamResult(new File(outputFilename)) : new StreamResult(System.out)); // Get the transformer: TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setErrorListener(new XSLErrorListener()); Transformer transformer = transformerFactory.newTransformer(stylesheet); transformer.setErrorListener(new XSLErrorListener()); // Pass parameters to the transformer: if (params != null) { Iterator iterator = params.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = (Map.Entry) iterator.next(); transformer.setParameter((String) entry.getKey(), entry.getValue()); } } // Transform: transformer.transform(input, output); }
public Schema createSchema(InputSource in, PropertyMap properties) throws IOException, SAXException, IncorrectSchemaException { ErrorHandler eh = ValidateProperty.ERROR_HANDLER.get(properties); SAXErrorListener errorListener = new SAXErrorListener(eh, in.getSystemId()); UserWrapErrorHandler ueh1 = new UserWrapErrorHandler(eh); UserWrapErrorHandler ueh2 = new UserWrapErrorHandler(eh); try { PropertyMapBuilder builder = new PropertyMapBuilder(properties); ValidateProperty.ERROR_HANDLER.put(builder, ueh1); SAXSource source = createValidatingSource(in, builder.toPropertyMap(), ueh1); source = createTransformingSource( source, SchematronProperty.PHASE.get(properties), properties.contains(SchematronProperty.DIAGNOSE), in.getSystemId(), ueh2); TransformerFactory transformerFactory = (TransformerFactory) transformerFactoryClass.newInstance(); initTransformerFactory(transformerFactory); transformerFactory.setErrorListener(errorListener); Templates templates = transformerFactory.newTemplates(source); return new SchemaImpl(templates, properties, supportedPropertyIds); } catch (TransformerConfigurationException e) { throw toSAXException( e, errorListener.getHadError() || ueh1.getHadErrorOrFatalError() || ueh2.getHadErrorOrFatalError()); } catch (InstantiationException e) { throw new SAXException(e); } catch (IllegalAccessException e) { throw new SAXException(e); } }
/** Converts the given DOM back to a string. */ public static String getXML(Document doc) throws TransformerConfigurationException, TransformerException { Source source = new DOMSource(doc); StringWriter stringWriter = new StringWriter(); Result result = new StreamResult(stringWriter); // Java XML factories are not declared to be thread safe TransformerFactory factory = TransformerFactory.newInstance(); factory.setErrorListener(new XMLListener()); Transformer transformer = factory.newTransformer(); transformer.transform(source, result); return stringWriter.getBuffer().toString(); }
protected String doTransform( ThemeDisplay themeDisplay, Map<String, String> tokens, String viewMode, String languageId, String xml, String script) throws Exception { UnsyncByteArrayOutputStream unsyncByteArrayOutputStream = new UnsyncByteArrayOutputStream(); long companyId = GetterUtil.getLong(tokens.get("company_id")); Company company = CompanyLocalServiceUtil.getCompanyById(companyId); long groupId = GetterUtil.getLong(tokens.get("group_id")); String journalTemplatesPath = VelocityResourceListener.JOURNAL_SEPARATOR + StringPool.SLASH + companyId + StringPool.SLASH + groupId; String randomNamespace = PwdGenerator.getPassword(PwdGenerator.KEY3, 4) + StringPool.UNDERLINE; Locale locale = LocaleUtil.fromLanguageId(languageId); XSLErrorListener xslErrorListener = new XSLErrorListener(locale); StreamSource xmlSource = new StreamSource(new UnsyncStringReader(xml)); TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setURIResolver(new URIResolver(tokens, languageId)); transformerFactory.setErrorListener(xslErrorListener); try { StreamSource scriptSource = new StreamSource(new UnsyncStringReader(script)); Transformer transformer = transformerFactory.newTransformer(scriptSource); transformer.setParameter("company", company); transformer.setParameter("companyId", new Long(companyId)); transformer.setParameter("groupId", String.valueOf(groupId)); transformer.setParameter("journalTemplatesPath", journalTemplatesPath); transformer.setParameter("viewMode", viewMode); transformer.setParameter("locale", locale); transformer.setParameter("permissionChecker", PermissionThreadLocal.getPermissionChecker()); transformer.setParameter("randomNamespace", randomNamespace); transformer.transform(xmlSource, new StreamResult(unsyncByteArrayOutputStream)); } catch (Exception e1) { String errorTemplate = ContentUtil.get(PropsValues.JOURNAL_ERROR_TEMPLATE_XSL); StreamSource scriptSource = new StreamSource(new UnsyncStringReader(errorTemplate)); Transformer transformer = transformerFactory.newTransformer(scriptSource); transformer.setParameter("company", company); transformer.setParameter("companyId", new Long(companyId)); transformer.setParameter("groupId", String.valueOf(groupId)); transformer.setParameter("journalTemplatesPath", journalTemplatesPath); transformer.setParameter("locale", locale); transformer.setParameter("randomNamespace", randomNamespace); transformer.setParameter("exception", xslErrorListener.getMessageAndLocation()); transformer.setParameter("script", script); if (xslErrorListener.getLocation() != null) { transformer.setParameter("column", new Integer(xslErrorListener.getColumnNumber())); transformer.setParameter("line", new Integer(xslErrorListener.getLineNumber())); } transformer.transform(xmlSource, new StreamResult(unsyncByteArrayOutputStream)); } return unsyncByteArrayOutputStream.toString(StringPool.UTF8); }
public void apply(File xmlSourceDirectory, File targetDirectory, DocErrorReporter reporter) throws DocTransletException { PrintStream err = System.err; try { URL mainResourceURL = classLoader == null ? ClassLoader.getSystemResource(mainResourceFilename) : classLoader.getResource(mainResourceFilename); if (null == mainResourceURL) { throw new DocTransletException("Cannot find resource '" + mainResourceFilename + "'"); } Map parameters = new HashMap(); parameters.put("gjdoc.xmldoclet.version", Driver.XMLDOCLET_VERSION); parameters.put("gjdoc.option.nonavbar", xsltBoolean(options.nonavbar)); parameters.put("gjdoc.option.noindex", xsltBoolean(options.noindex)); parameters.put("gjdoc.option.notree", xsltBoolean(options.notree)); parameters.put("gjdoc.option.nocomment", xsltBoolean(options.nocomment)); parameters.put("gjdoc.option.nohelp", xsltBoolean(options.nohelp)); parameters.put("gjdoc.option.splitindex", xsltBoolean(options.splitindex)); parameters.put("gjdoc.option.linksource", xsltBoolean(options.linksource)); parameters.put("gjdoc.option.nodeprecatedlist", xsltBoolean(options.nodeprecatedlist)); parameters.put("gjdoc.option.uses", xsltBoolean(options.uses)); parameters.put("gjdoc.option.windowtitle", options.windowtitle); parameters.put("gjdoc.option.helpfile", options.helpfile); parameters.put("gjdoc.option.stylesheetfile", options.stylesheetfile); parameters.put("gjdoc.option.header", options.header); parameters.put("gjdoc.option.footer", options.footer); parameters.put("gjdoc.option.bottom", options.bottom); parameters.put("gjdoc.option.doctitle", options.doctitle); List outputFileList = getOutputFileList(mainResourceURL, xmlSourceDirectory, parameters); reporter.printNotice("Running DocTranslet..."); TransformerFactory transformerFactory = TransformerFactory.newInstance(); transformerFactory.setErrorListener(this); boolean isLibxmlJ = transformerFactory .getClass() .getName() .equals("gnu.xml.libxmlj.transform.TransformerFactoryImpl"); for (Iterator it = outputFileList.iterator(); it.hasNext(); ) { if (isLibxmlJ) { System.gc(); Runtime.getRuntime().runFinalization(); } OutputFileInfo fileInfo = (OutputFileInfo) it.next(); File targetFile = new File(targetDirectory, fileInfo.getName()); File packageTargetDir = getParentFile(targetFile); if (!packageTargetDir.exists() && !packageTargetDir.mkdirs()) { throw new DocTransletException( "Target directory " + packageTargetDir + " does not exist and cannot be created."); } if (options.linksource) { File sourceTargetDirectory = new File(targetDirectory, "src-html"); File sourceTargetFile = new File(sourceTargetDirectory, fileInfo.getName()); File sourcePackageTargetDir = getParentFile(sourceTargetFile); if (!sourcePackageTargetDir.exists() && !sourcePackageTargetDir.mkdirs()) { throw new DocTransletException( "Target directory " + packageTargetDir + " does not exist and cannot be created."); } } if (options.uses) { File usesTargetDirectory = new File(targetDirectory, "class-use"); File usesTargetFile = new File(usesTargetDirectory, fileInfo.getName()); File usesPackageTargetDir = getParentFile(usesTargetFile); if (!usesPackageTargetDir.exists() && !usesPackageTargetDir.mkdirs()) { throw new DocTransletException( "Target directory " + packageTargetDir + " does not exist and cannot be created."); } } if (null != fileInfo.getSource()) { reporter.printNotice("Copying " + fileInfo.getComment() + "..."); InputStream in = new URL(mainResourceURL, fileInfo.getSource()).openStream(); FileOutputStream out = new FileOutputStream(targetFile.getAbsolutePath()); IOToolkit.copyStream(in, out); in.close(); out.close(); } else { reporter.printNotice("Generating " + fileInfo.getComment() + "..."); String pathToRoot = ""; for (File file = getParentFile(targetFile); !equalsFile(file, targetDirectory); file = getParentFile(file)) { pathToRoot += "../"; } StreamResult out = new StreamResult(targetFile.getAbsolutePath()); StreamSource in = new StreamSource(new File(xmlSourceDirectory, "index.xml").getAbsolutePath()); URL resource = new URL(mainResourceURL, fileInfo.getSheet()); StreamSource xsltSource = new StreamSource(resource.toExternalForm()); if (null != fileInfo.getInfo()) { parameters.put("gjdoc.outputfile.info", fileInfo.getInfo()); } parameters.put("gjdoc.pathtoroot", pathToRoot); Transformer transformer; transformer = (Transformer) transformerMap.get(xsltSource.getSystemId()); if (null == transformer) { transformer = transformerFactory.newTransformer(xsltSource); if (cacheXSLTSheets) { transformerMap.put(xsltSource.getSystemId(), transformer); } } transformer.clearParameters(); for (Iterator pit = parameters.keySet().iterator(); pit.hasNext(); ) { String key = (String) pit.next(); String value = (String) parameters.get(key); transformer.setParameter(key, value); } transformer.setErrorListener(this); DocErrorReporterOutputStream errorReporterOut = new DocErrorReporterOutputStream(reporter); System.setErr(new PrintStream(errorReporterOut)); transformer.transform(in, out); errorReporterOut.flush(); } } } catch (MalformedURLException e) { throw new DocTransletException(e); } catch (TransformerFactoryConfigurationError e) { throw new DocTransletException(e); } catch (TransformerException e) { throw new DocTransletException(e.getMessageAndLocation(), e); } catch (IOException e) { throw new DocTransletException(e); } finally { System.setErr(err); } }
// J2SE does not support Xalan interpretive // main -> _main public static void _main(String argv[]) { // Runtime.getRuntime().traceMethodCalls(false); // turns Java tracing off boolean doStackDumpOnError = false; boolean setQuietMode = false; boolean doDiag = false; String msg = null; boolean isSecureProcessing = false; // Runtime.getRuntime().traceMethodCalls(false); // Runtime.getRuntime().traceInstructions(false); /** The default diagnostic writer... */ java.io.PrintWriter diagnosticsWriter = new PrintWriter(System.err, true); java.io.PrintWriter dumpWriter = diagnosticsWriter; ResourceBundle resbundle = (SecuritySupport.getResourceBundle( com.sun.org.apache.xml.internal.utils.res.XResourceBundle.ERROR_RESOURCES)); String flavor = "s2s"; if (argv.length < 1) { printArgOptions(resbundle); } else { // J2SE does not support Xalan interpretive // false -> true boolean useXSLTC = true; for (int i = 0; i < argv.length; i++) { if ("-XSLTC".equalsIgnoreCase(argv[i])) { useXSLTC = true; } } TransformerFactory tfactory; if (useXSLTC) { String key = "javax.xml.transform.TransformerFactory"; String value = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"; Properties props = System.getProperties(); props.put(key, value); System.setProperties(props); } try { tfactory = TransformerFactory.newInstance(); tfactory.setErrorListener(new DefaultErrorHandler()); } catch (TransformerFactoryConfigurationError pfe) { pfe.printStackTrace(dumpWriter); // "XSL Process was not successful."); msg = XSLMessages.createMessage(XSLTErrorResources.ER_NOT_SUCCESSFUL, null); diagnosticsWriter.println(msg); tfactory = null; // shut up compiler doExit(msg); } boolean formatOutput = false; boolean useSourceLocation = false; String inFileName = null; String outFileName = null; String dumpFileName = null; String xslFileName = null; String treedumpFileName = null; // J2SE does not support Xalan interpretive /* PrintTraceListener tracer = null; */ String outputType = null; String media = null; Vector params = new Vector(); boolean quietConflictWarnings = false; URIResolver uriResolver = null; EntityResolver entityResolver = null; ContentHandler contentHandler = null; int recursionLimit = -1; for (int i = 0; i < argv.length; i++) { if ("-XSLTC".equalsIgnoreCase(argv[i])) { // The -XSLTC option has been processed. } // J2SE does not support Xalan interpretive /* else if ("-TT".equalsIgnoreCase(argv[i])) { if (!useXSLTC) { if (null == tracer) tracer = new PrintTraceListener(diagnosticsWriter); tracer.m_traceTemplates = true; } else printInvalidXSLTCOption("-TT"); // tfactory.setTraceTemplates(true); } else if ("-TG".equalsIgnoreCase(argv[i])) { if (!useXSLTC) { if (null == tracer) tracer = new PrintTraceListener(diagnosticsWriter); tracer.m_traceGeneration = true; } else printInvalidXSLTCOption("-TG"); // tfactory.setTraceSelect(true); } else if ("-TS".equalsIgnoreCase(argv[i])) { if (!useXSLTC) { if (null == tracer) tracer = new PrintTraceListener(diagnosticsWriter); tracer.m_traceSelection = true; } else printInvalidXSLTCOption("-TS"); // tfactory.setTraceTemplates(true); } else if ("-TTC".equalsIgnoreCase(argv[i])) { if (!useXSLTC) { if (null == tracer) tracer = new PrintTraceListener(diagnosticsWriter); tracer.m_traceElements = true; } else printInvalidXSLTCOption("-TTC"); // tfactory.setTraceTemplateChildren(true); } */ else if ("-INDENT".equalsIgnoreCase(argv[i])) { int indentAmount; if (((i + 1) < argv.length) && (argv[i + 1].charAt(0) != '-')) { indentAmount = Integer.parseInt(argv[++i]); } else { indentAmount = 0; } // TBD: // xmlProcessorLiaison.setIndent(indentAmount); } else if ("-IN".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') inFileName = argv[++i]; else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-IN"})); // "Missing argument for); } else if ("-MEDIA".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length) media = argv[++i]; else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-MEDIA"})); // "Missing argument for); } else if ("-OUT".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') outFileName = argv[++i]; else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-OUT"})); // "Missing argument for); } else if ("-XSL".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') xslFileName = argv[++i]; else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-XSL"})); // "Missing argument for); } else if ("-FLAVOR".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length) { flavor = argv[++i]; } else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-FLAVOR"})); // "Missing argument for); } else if ("-PARAM".equalsIgnoreCase(argv[i])) { if (i + 2 < argv.length) { String name = argv[++i]; params.addElement(name); String expression = argv[++i]; params.addElement(expression); } else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-PARAM"})); // "Missing argument for); } else if ("-E".equalsIgnoreCase(argv[i])) { // TBD: // xmlProcessorLiaison.setShouldExpandEntityRefs(false); } else if ("-V".equalsIgnoreCase(argv[i])) { diagnosticsWriter.println( resbundle.getString("version") // ">>>>>>> Xalan Version " + Version.getVersion() + ", " + /* xmlProcessorLiaison.getParserDescription()+ */ resbundle.getString("version2")); // "<<<<<<<"); } // J2SE does not support Xalan interpretive /* else if ("-QC".equalsIgnoreCase(argv[i])) { if (!useXSLTC) quietConflictWarnings = true; else printInvalidXSLTCOption("-QC"); } */ else if ("-Q".equalsIgnoreCase(argv[i])) { setQuietMode = true; } else if ("-DIAG".equalsIgnoreCase(argv[i])) { doDiag = true; } else if ("-XML".equalsIgnoreCase(argv[i])) { outputType = "xml"; } else if ("-TEXT".equalsIgnoreCase(argv[i])) { outputType = "text"; } else if ("-HTML".equalsIgnoreCase(argv[i])) { outputType = "html"; } else if ("-EDUMP".equalsIgnoreCase(argv[i])) { doStackDumpOnError = true; if (((i + 1) < argv.length) && (argv[i + 1].charAt(0) != '-')) { dumpFileName = argv[++i]; } } else if ("-URIRESOLVER".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length) { try { uriResolver = (URIResolver) ObjectFactory.newInstance(argv[++i], true); tfactory.setURIResolver(uriResolver); } catch (ConfigurationError cnfe) { msg = XSLMessages.createMessage( XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION, new Object[] {"-URIResolver"}); System.err.println(msg); doExit(msg); } } else { msg = XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-URIResolver"}); // "Missing argument for); System.err.println(msg); doExit(msg); } } else if ("-ENTITYRESOLVER".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length) { try { entityResolver = (EntityResolver) ObjectFactory.newInstance(argv[++i], true); } catch (ConfigurationError cnfe) { msg = XSLMessages.createMessage( XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION, new Object[] {"-EntityResolver"}); System.err.println(msg); doExit(msg); } } else { // "Missing argument for); msg = XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-EntityResolver"}); System.err.println(msg); doExit(msg); } } else if ("-CONTENTHANDLER".equalsIgnoreCase(argv[i])) { if (i + 1 < argv.length) { try { contentHandler = (ContentHandler) ObjectFactory.newInstance(argv[++i], true); } catch (ConfigurationError cnfe) { msg = XSLMessages.createMessage( XSLTErrorResources.ER_CLASS_NOT_FOUND_FOR_OPTION, new Object[] {"-ContentHandler"}); System.err.println(msg); doExit(msg); } } else { // "Missing argument for); msg = XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-ContentHandler"}); System.err.println(msg); doExit(msg); } } // J2SE does not support Xalan interpretive /* else if ("-L".equalsIgnoreCase(argv[i])) { if (!useXSLTC) tfactory.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE); else printInvalidXSLTCOption("-L"); } else if ("-INCREMENTAL".equalsIgnoreCase(argv[i])) { if (!useXSLTC) tfactory.setAttribute ("http://xml.apache.org/xalan/features/incremental", java.lang.Boolean.TRUE); else printInvalidXSLTCOption("-INCREMENTAL"); } else if ("-NOOPTIMIZE".equalsIgnoreCase(argv[i])) { // Default is true. // // %REVIEW% We should have a generalized syntax for negative // switches... and probably should accept the inverse even // if it is the default. if (!useXSLTC) tfactory.setAttribute ("http://xml.apache.org/xalan/features/optimize", java.lang.Boolean.FALSE); else printInvalidXSLTCOption("-NOOPTIMIZE"); } else if ("-RL".equalsIgnoreCase(argv[i])) { if (!useXSLTC) { if (i + 1 < argv.length) recursionLimit = Integer.parseInt(argv[++i]); else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[]{ "-rl" })); //"Missing argument for); } else { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') i++; printInvalidXSLTCOption("-RL"); } } */ // Generate the translet class and optionally specify the name // of the translet class. else if ("-XO".equalsIgnoreCase(argv[i])) { if (useXSLTC) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') { tfactory.setAttribute("generate-translet", "true"); tfactory.setAttribute("translet-name", argv[++i]); } else tfactory.setAttribute("generate-translet", "true"); } else { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') i++; printInvalidXalanOption("-XO"); } } // Specify the destination directory for the translet classes. else if ("-XD".equalsIgnoreCase(argv[i])) { if (useXSLTC) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') tfactory.setAttribute("destination-directory", argv[++i]); else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-XD"})); // "Missing argument for); } else { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') i++; printInvalidXalanOption("-XD"); } } // Specify the jar file name which the translet classes are packaged into. else if ("-XJ".equalsIgnoreCase(argv[i])) { if (useXSLTC) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') { tfactory.setAttribute("generate-translet", "true"); tfactory.setAttribute("jar-name", argv[++i]); } else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-XJ"})); // "Missing argument for); } else { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') i++; printInvalidXalanOption("-XJ"); } } // Specify the package name prefix for the generated translet classes. else if ("-XP".equalsIgnoreCase(argv[i])) { if (useXSLTC) { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') tfactory.setAttribute("package-name", argv[++i]); else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_MISSING_ARG_FOR_OPTION, new Object[] {"-XP"})); // "Missing argument for); } else { if (i + 1 < argv.length && argv[i + 1].charAt(0) != '-') i++; printInvalidXalanOption("-XP"); } } // Enable template inlining. else if ("-XN".equalsIgnoreCase(argv[i])) { if (useXSLTC) { tfactory.setAttribute("enable-inlining", "true"); } else printInvalidXalanOption("-XN"); } // Turns on additional debugging message output else if ("-XX".equalsIgnoreCase(argv[i])) { if (useXSLTC) { tfactory.setAttribute("debug", "true"); } else printInvalidXalanOption("-XX"); } // Create the Transformer from the translet if the translet class is newer // than the stylesheet. else if ("-XT".equalsIgnoreCase(argv[i])) { if (useXSLTC) { tfactory.setAttribute("auto-translet", "true"); } else printInvalidXalanOption("-XT"); } else if ("-SECURE".equalsIgnoreCase(argv[i])) { isSecureProcessing = true; try { tfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (TransformerConfigurationException e) { } } else System.err.println( XSLMessages.createMessage( XSLTErrorResources.ER_INVALID_OPTION, new Object[] {argv[i]})); // "Invalid argument:); } // Print usage instructions if no xml and xsl file is specified in the command line if (inFileName == null && xslFileName == null) { msg = resbundle.getString("xslProc_no_input"); System.err.println(msg); doExit(msg); } // Note that there are usage cases for calling us without a -IN arg // The main XSL transformation occurs here! try { long start = System.currentTimeMillis(); if (null != dumpFileName) { dumpWriter = new PrintWriter(new FileWriter(dumpFileName)); } Templates stylesheet = null; if (null != xslFileName) { if (flavor.equals("d2d")) { // Parse in the xml data into a DOM DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); dfactory.setNamespaceAware(true); if (isSecureProcessing) { try { dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (ParserConfigurationException pce) { } } DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); Node xslDOM = docBuilder.parse(new InputSource(xslFileName)); stylesheet = tfactory.newTemplates(new DOMSource(xslDOM, xslFileName)); } else { // System.out.println("Calling newTemplates: "+xslFileName); stylesheet = tfactory.newTemplates(new StreamSource(xslFileName)); // System.out.println("Done calling newTemplates: "+xslFileName); } } PrintWriter resultWriter; StreamResult strResult; if (null != outFileName) { strResult = new StreamResult(new FileOutputStream(outFileName)); // One possible improvement might be to ensure this is // a valid URI before setting the systemId, but that // might have subtle changes that pre-existing users // might notice; we can think about that later -sc r1.46 strResult.setSystemId(outFileName); } else { strResult = new StreamResult(System.out); // We used to default to incremental mode in this case. // We've since decided that since the -INCREMENTAL switch is // available, that default is probably not necessary nor // necessarily a good idea. } SAXTransformerFactory stf = (SAXTransformerFactory) tfactory; // J2SE does not support Xalan interpretive /* // This is currently controlled via TransformerFactoryImpl. if (!useXSLTC && useSourceLocation) stf.setAttribute(XalanProperties.SOURCE_LOCATION, Boolean.TRUE); */ // Did they pass in a stylesheet, or should we get it from the // document? if (null == stylesheet) { Source source = stf.getAssociatedStylesheet(new StreamSource(inFileName), media, null, null); if (null != source) stylesheet = tfactory.newTemplates(source); else { if (null != media) throw new TransformerException( XSLMessages.createMessage( XSLTErrorResources.ER_NO_STYLESHEET_IN_MEDIA, new Object[] {inFileName, media})); // "No stylesheet found in: " // + inFileName + ", media=" // + media); else throw new TransformerException( XSLMessages.createMessage( XSLTErrorResources.ER_NO_STYLESHEET_PI, new Object[] {inFileName})); // "No xml-stylesheet PI found in: " // + inFileName); } } if (null != stylesheet) { Transformer transformer = flavor.equals("th") ? null : stylesheet.newTransformer(); transformer.setErrorListener(new DefaultErrorHandler()); // Override the output format? if (null != outputType) { transformer.setOutputProperty(OutputKeys.METHOD, outputType); } // J2SE does not support Xalan interpretive /* if (transformer instanceof com.sun.org.apache.xalan.internal.transformer.TransformerImpl) { com.sun.org.apache.xalan.internal.transformer.TransformerImpl impl = (com.sun.org.apache.xalan.internal.transformer.TransformerImpl)transformer; TraceManager tm = impl.getTraceManager(); if (null != tracer) tm.addTraceListener(tracer); impl.setQuietConflictWarnings(quietConflictWarnings); // This is currently controlled via TransformerFactoryImpl. if (useSourceLocation) impl.setProperty(XalanProperties.SOURCE_LOCATION, Boolean.TRUE); if(recursionLimit>0) impl.setRecursionLimit(recursionLimit); // sc 28-Feb-01 if we re-implement this, please uncomment helpmsg in printArgOptions // impl.setDiagnosticsOutput( setQuietMode ? null : diagnosticsWriter ); } */ int nParams = params.size(); for (int i = 0; i < nParams; i += 2) { transformer.setParameter( (String) params.elementAt(i), (String) params.elementAt(i + 1)); } if (uriResolver != null) transformer.setURIResolver(uriResolver); if (null != inFileName) { if (flavor.equals("d2d")) { // Parse in the xml data into a DOM DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); dfactory.setCoalescing(true); dfactory.setNamespaceAware(true); if (isSecureProcessing) { try { dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (ParserConfigurationException pce) { } } DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); if (entityResolver != null) docBuilder.setEntityResolver(entityResolver); Node xmlDoc = docBuilder.parse(new InputSource(inFileName)); Document doc = docBuilder.newDocument(); org.w3c.dom.DocumentFragment outNode = doc.createDocumentFragment(); transformer.transform(new DOMSource(xmlDoc, inFileName), new DOMResult(outNode)); // Now serialize output to disk with identity transformer Transformer serializer = stf.newTransformer(); serializer.setErrorListener(new DefaultErrorHandler()); Properties serializationProps = stylesheet.getOutputProperties(); serializer.setOutputProperties(serializationProps); if (contentHandler != null) { SAXResult result = new SAXResult(contentHandler); serializer.transform(new DOMSource(outNode), result); } else serializer.transform(new DOMSource(outNode), strResult); } else if (flavor.equals("th")) { for (int i = 0; i < 1; i++) // Loop for diagnosing bugs with inconsistent behavior { // System.out.println("Testing the TransformerHandler..."); XMLReader reader = null; // Use JAXP1.1 ( if possible ) try { javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance(); factory.setNamespaceAware(true); if (isSecureProcessing) { try { factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (org.xml.sax.SAXException se) { } } javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser(); reader = jaxpParser.getXMLReader(); } catch (javax.xml.parsers.ParserConfigurationException ex) { throw new org.xml.sax.SAXException(ex); } catch (javax.xml.parsers.FactoryConfigurationError ex1) { throw new org.xml.sax.SAXException(ex1.toString()); } catch (NoSuchMethodError ex2) { } catch (AbstractMethodError ame) { } if (null == reader) { reader = XMLReaderFactory.createXMLReader(); } // J2SE does not support Xalan interpretive /* if (!useXSLTC) stf.setAttribute(com.sun.org.apache.xalan.internal.processor.TransformerFactoryImpl.FEATURE_INCREMENTAL, Boolean.TRUE); */ TransformerHandler th = stf.newTransformerHandler(stylesheet); reader.setContentHandler(th); reader.setDTDHandler(th); if (th instanceof org.xml.sax.ErrorHandler) reader.setErrorHandler((org.xml.sax.ErrorHandler) th); try { reader.setProperty("http://xml.org/sax/properties/lexical-handler", th); } catch (org.xml.sax.SAXNotRecognizedException e) { } catch (org.xml.sax.SAXNotSupportedException e) { } try { reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true); } catch (org.xml.sax.SAXException se) { } th.setResult(strResult); reader.parse(new InputSource(inFileName)); } } else { if (entityResolver != null) { XMLReader reader = null; // Use JAXP1.1 ( if possible ) try { javax.xml.parsers.SAXParserFactory factory = javax.xml.parsers.SAXParserFactory.newInstance(); factory.setNamespaceAware(true); if (isSecureProcessing) { try { factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (org.xml.sax.SAXException se) { } } javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser(); reader = jaxpParser.getXMLReader(); } catch (javax.xml.parsers.ParserConfigurationException ex) { throw new org.xml.sax.SAXException(ex); } catch (javax.xml.parsers.FactoryConfigurationError ex1) { throw new org.xml.sax.SAXException(ex1.toString()); } catch (NoSuchMethodError ex2) { } catch (AbstractMethodError ame) { } if (null == reader) { reader = XMLReaderFactory.createXMLReader(); } reader.setEntityResolver(entityResolver); if (contentHandler != null) { SAXResult result = new SAXResult(contentHandler); transformer.transform(new SAXSource(reader, new InputSource(inFileName)), result); } else { transformer.transform( new SAXSource(reader, new InputSource(inFileName)), strResult); } } else if (contentHandler != null) { SAXResult result = new SAXResult(contentHandler); transformer.transform(new StreamSource(inFileName), result); } else { // System.out.println("Starting transform"); transformer.transform(new StreamSource(inFileName), strResult); // System.out.println("Done with transform"); } } } else { StringReader reader = new StringReader("<?xml version=\"1.0\"?> <doc/>"); transformer.transform(new StreamSource(reader), strResult); } } else { // "XSL Process was not successful."); msg = XSLMessages.createMessage(XSLTErrorResources.ER_NOT_SUCCESSFUL, null); diagnosticsWriter.println(msg); doExit(msg); } // close output streams if (null != outFileName && strResult != null) { java.io.OutputStream out = strResult.getOutputStream(); java.io.Writer writer = strResult.getWriter(); try { if (out != null) out.close(); if (writer != null) writer.close(); } catch (java.io.IOException ie) { } } long stop = System.currentTimeMillis(); long millisecondsDuration = stop - start; if (doDiag) { Object[] msgArgs = new Object[] {inFileName, xslFileName, new Long(millisecondsDuration)}; msg = XSLMessages.createMessage("diagTiming", msgArgs); diagnosticsWriter.println('\n'); diagnosticsWriter.println(msg); } } catch (Throwable throwable) { while (throwable instanceof com.sun.org.apache.xml.internal.utils.WrappedRuntimeException) { throwable = ((com.sun.org.apache.xml.internal.utils.WrappedRuntimeException) throwable) .getException(); } if ((throwable instanceof NullPointerException) || (throwable instanceof ClassCastException)) doStackDumpOnError = true; diagnosticsWriter.println(); if (doStackDumpOnError) throwable.printStackTrace(dumpWriter); else { DefaultErrorHandler.printLocation(diagnosticsWriter, throwable); diagnosticsWriter.println( XSLMessages.createMessage(XSLTErrorResources.ER_XSLT_ERROR, null) + " (" + throwable.getClass().getName() + "): " + throwable.getMessage()); } // diagnosticsWriter.println(XSLMessages.createMessage(XSLTErrorResources.ER_NOT_SUCCESSFUL, // null)); //"XSL Process was not successful."); if (null != dumpFileName) { dumpWriter.close(); } doExit(throwable.getMessage()); } if (null != dumpFileName) { dumpWriter.close(); } if (null != diagnosticsWriter) { // diagnosticsWriter.close(); } // if(!setQuietMode) // diagnosticsWriter.println(resbundle.getString("xsldone")); //"Xalan: done"); // else // diagnosticsWriter.println(""); //"Xalan: done"); } }