/** * Report version info from DOM interfaces. * * <p>Currently distinguishes between pre-DOM level 2, the DOM level 2 working draft, the DOM * level 2 final draft, and not found. * * @param h Hashtable to put information in */ protected void checkDOMVersion(Hashtable h) { if (null == h) h = new Hashtable(); final String DOM_LEVEL2_CLASS = "org.w3c.dom.Document"; final String DOM_LEVEL2_METHOD = "createElementNS"; // String, String final String DOM_LEVEL3_METHOD = "getDoctype"; // no parameter final String DOM_LEVEL2WD_CLASS = "org.w3c.dom.Node"; final String DOM_LEVEL2WD_METHOD = "supported"; // String, String final String DOM_LEVEL2FD_CLASS = "org.w3c.dom.Node"; final String DOM_LEVEL2FD_METHOD = "isSupported"; // String, String final Class twoStringArgs[] = {java.lang.String.class, java.lang.String.class}; try { Class clazz = ObjectFactory.findProviderClass(DOM_LEVEL2_CLASS, true); Method method = clazz.getMethod(DOM_LEVEL2_METHOD, twoStringArgs); // If we succeeded, we have loaded interfaces from a // level 2 DOM somewhere h.put(VERSION + "DOM", "2.0"); try { // Check for the working draft version, which is // commonly found, but won't work anymore clazz = ObjectFactory.findProviderClass(DOM_LEVEL2WD_CLASS, true); method = clazz.getMethod(DOM_LEVEL2WD_METHOD, twoStringArgs); h.put(ERROR + VERSION + "DOM.draftlevel", "2.0wd"); h.put(ERROR, ERROR_FOUND); } catch (Exception e2) { try { // Check for the final draft version as well clazz = ObjectFactory.findProviderClass(DOM_LEVEL2FD_CLASS, true); method = clazz.getMethod(DOM_LEVEL2FD_METHOD, twoStringArgs); h.put(VERSION + "DOM.draftlevel", "2.0fd"); } catch (Exception e3) { h.put(ERROR + VERSION + "DOM.draftlevel", "2.0unknown"); h.put(ERROR, ERROR_FOUND); } } } catch (Exception e) { h.put(ERROR + VERSION + "DOM", "ERROR attempting to load DOM level 2 class: " + e.toString()); h.put(ERROR, ERROR_FOUND); } // @todo load an actual DOM implmementation and query it as well // @todo load an actual DOM implmementation and check if // isNamespaceAware() == true, which is needed to parse // xsl stylesheet files into a DOM }
/** * Report product version information from common parsers. * * <p>Looks for version info in xerces.jar/xercesImpl.jar/crimson.jar. * * <p>//@todo actually look up version info in crimson manifest * * @param h Hashtable to put information in */ protected void checkParserVersion(Hashtable h) { if (null == h) h = new Hashtable(); try { final String XERCES1_VERSION_CLASS = "com.sun.org.apache.xerces.internal.framework.Version"; Class clazz = ObjectFactory.findProviderClass(XERCES1_VERSION_CLASS, true); // Found Xerces-J 1.x, grab it's version fields Field f = clazz.getField("fVersion"); String parserVersion = (String) f.get(null); h.put(VERSION + "xerces1", parserVersion); } catch (Exception e) { h.put(VERSION + "xerces1", CLASS_NOTPRESENT); } // Look for xerces1 and xerces2 parsers separately try { final String XERCES2_VERSION_CLASS = "com.sun.org.apache.xerces.internal.impl.Version"; Class clazz = ObjectFactory.findProviderClass(XERCES2_VERSION_CLASS, true); // Found Xerces-J 2.x, grab it's version fields Field f = clazz.getField("fVersion"); String parserVersion = (String) f.get(null); h.put(VERSION + "xerces2", parserVersion); } catch (Exception e) { h.put(VERSION + "xerces2", CLASS_NOTPRESENT); } try { final String CRIMSON_CLASS = "org.apache.crimson.parser.Parser2"; Class clazz = ObjectFactory.findProviderClass(CRIMSON_CLASS, true); // @todo determine specific crimson version h.put(VERSION + "crimson", CLASS_PRESENT); } catch (Exception e) { h.put(VERSION + "crimson", CLASS_NOTPRESENT); } }
/** * Report version information about JAXP interfaces. * * <p>Currently distinguishes between JAXP 1.0.1 and JAXP 1.1, and not found; only tests the * interfaces, and does not check for reference implementation versions. * * @param h Hashtable to put information in */ protected void checkJAXPVersion(Hashtable h) { if (null == h) h = new Hashtable(); Class clazz = null; try { final String JAXP1_CLASS = "javax.xml.stream.XMLStreamConstants"; clazz = ObjectFactory.findProviderClass(JAXP1_CLASS, true); // If we succeeded, we have JAXP 1.4 available h.put(VERSION + "JAXP", "1.4"); } catch (Exception e) { h.put(ERROR + VERSION + "JAXP", "1.3"); h.put(ERROR, ERROR_FOUND); } }
/** * Report product version information from Ant. * * @param h Hashtable to put information in */ protected void checkAntVersion(Hashtable h) { if (null == h) h = new Hashtable(); try { final String ANT_VERSION_CLASS = "org.apache.tools.ant.Main"; final String ANT_VERSION_METHOD = "getAntVersion"; // noArgs final Class noArgs[] = new Class[0]; Class clazz = ObjectFactory.findProviderClass(ANT_VERSION_CLASS, true); Method method = clazz.getMethod(ANT_VERSION_METHOD, noArgs); Object returnValue = method.invoke(null, new Object[0]); h.put(VERSION + "ant", (String) returnValue); } catch (Exception e) { h.put(VERSION + "ant", CLASS_NOTPRESENT); } }
/** * Report version info from DOM interfaces. * * @param h Hashtable to put information in */ protected boolean checkDOML3(Hashtable h) { if (null == h) h = new Hashtable(); final String DOM_CLASS = "org.w3c.dom.Document"; final String DOM_LEVEL3_METHOD = "getDoctype"; // no parameter try { Class clazz = ObjectFactory.findProviderClass(DOM_CLASS, true); Method method = clazz.getMethod(DOM_LEVEL3_METHOD, (Class<?>[]) null); // If we succeeded, we have loaded interfaces from a // level 3 DOM somewhere h.put(VERSION + "DOM", "3.0"); return true; } catch (Exception e) { return false; } }
/* */ public final void initialize(int node, int last, DOM dom, SortSettings settings) /* */ throws TransletException /* */ { /* 104 */ this._dom = dom; /* 105 */ this._node = node; /* 106 */ this._last = last; /* 107 */ this._settings = settings; /* */ /* 109 */ int levels = settings.getSortOrders().length; /* 110 */ this._values = new Object[levels]; /* */ /* 112 */ String colFactClassname = null; /* */ try /* */ { /* 115 */ colFactClassname = SecuritySupport.getSystemProperty( "com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY"); /* */ } /* */ catch (SecurityException e) /* */ { /* */ } /* */ /* 122 */ if (colFactClassname != null) { /* */ try { /* 124 */ Object candObj = ObjectFactory.findProviderClass(colFactClassname, true); /* 125 */ this._collatorFactory = ((CollatorFactory) candObj); /* */ } catch (ClassNotFoundException e) { /* 127 */ throw new TransletException(e); /* */ } /* 129 */ Locale[] locales = settings.getLocales(); /* 130 */ this._collators = new Collator[levels]; /* 131 */ for (int i = 0; i < levels; i++) { /* 132 */ this._collators[i] = this._collatorFactory.getCollator(locales[i]); /* */ } /* 134 */ this._collator = this._collators[0]; /* */ } else { /* 136 */ this._collators = settings.getCollators(); /* 137 */ this._collator = this._collators[0]; /* */ } /* */ }
/** * Returns a serializer for the specified output method. The output method is specified by the * value of the property associated with the "method" key. If no implementation exists that * supports the specified output method an exception of some type will be thrown. For a list of * the output "method" key values see {@link Method}. * * @param format The output format, minimally the "method" property must be set. * @return A suitable serializer. * @throws IllegalArgumentException if method is null or an appropriate serializer can't be found * @throws Exception if the class for the serializer is found but does not implement * ContentHandler. * @throws WrappedRuntimeException if an exception is thrown while trying to find serializer */ public static Serializer getSerializer(Properties format) { Serializer ser; try { String method = format.getProperty(OutputKeys.METHOD); if (method == null) { String msg = Utils.messages.createMessage( MsgKey.ER_FACTORY_PROPERTY_MISSING, new Object[] {OutputKeys.METHOD}); throw new IllegalArgumentException(msg); } String className = format.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER); if (null == className) { // Missing Content Handler property, load default using OutputPropertiesFactory Properties methodDefaults = OutputPropertiesFactory.getDefaultMethodProperties(method); className = methodDefaults.getProperty(OutputPropertiesFactory.S_KEY_CONTENT_HANDLER); if (null == className) { String msg = Utils.messages.createMessage( MsgKey.ER_FACTORY_PROPERTY_MISSING, new Object[] {OutputPropertiesFactory.S_KEY_CONTENT_HANDLER}); throw new IllegalArgumentException(msg); } } Class cls = ObjectFactory.findProviderClass(className, true); // _serializers.put(method, cls); Object obj = cls.newInstance(); if (obj instanceof SerializationHandler) { // this is one of the supplied serializers ser = (Serializer) cls.newInstance(); ser.setOutputFormat(format); } else { /* * This must be a user defined Serializer. * It had better implement ContentHandler. */ if (obj instanceof ContentHandler) { /* * The user defined serializer defines ContentHandler, * but we need to wrap it with ToXMLSAXHandler which * will collect SAX-like events and emit true * SAX ContentHandler events to the users handler. */ className = SerializerConstants.DEFAULT_SAX_SERIALIZER; cls = ObjectFactory.findProviderClass(className, true); SerializationHandler sh = (SerializationHandler) cls.newInstance(); sh.setContentHandler((ContentHandler) obj); sh.setOutputFormat(format); ser = sh; } else { // user defined serializer does not implement // ContentHandler, ... very bad throw new Exception( Utils.messages.createMessage( MsgKey.ER_SERIALIZER_NOT_CONTENTHANDLER, new Object[] {className})); } } } catch (Exception e) { throw new com.sun.org.apache.xml.internal.serializer.utils.WrappedRuntimeException(e); } // If we make it to here ser is not null. return ser; }
/** * Report version info from SAX interfaces. * * <p>Currently distinguishes between SAX 2, SAX 2.0beta2, SAX1, and not found. * * @param h Hashtable to put information in */ protected void checkSAXVersion(Hashtable h) { if (null == h) h = new Hashtable(); final String SAX_VERSION1_CLASS = "org.xml.sax.Parser"; final String SAX_VERSION1_METHOD = "parse"; // String final String SAX_VERSION2_CLASS = "org.xml.sax.XMLReader"; final String SAX_VERSION2_METHOD = "parse"; // String final String SAX_VERSION2BETA_CLASSNF = "org.xml.sax.helpers.AttributesImpl"; final String SAX_VERSION2BETA_METHODNF = "setAttributes"; // Attributes final Class oneStringArg[] = {java.lang.String.class}; // Note this introduces a minor compile dependency on SAX... final Class attributesArg[] = {org.xml.sax.Attributes.class}; try { // This method was only added in the final SAX 2.0 release; // see changes.html "Changes from SAX 2.0beta2 to SAX 2.0prerelease" Class clazz = ObjectFactory.findProviderClass(SAX_VERSION2BETA_CLASSNF, true); Method method = clazz.getMethod(SAX_VERSION2BETA_METHODNF, attributesArg); // If we succeeded, we have loaded interfaces from a // real, final SAX version 2.0 somewhere h.put(VERSION + "SAX", "2.0"); } catch (Exception e) { // If we didn't find the SAX 2.0 class, look for a 2.0beta2 h.put( ERROR + VERSION + "SAX", "ERROR attempting to load SAX version 2 class: " + e.toString()); h.put(ERROR, ERROR_FOUND); try { Class clazz = ObjectFactory.findProviderClass(SAX_VERSION2_CLASS, true); Method method = clazz.getMethod(SAX_VERSION2_METHOD, oneStringArg); // If we succeeded, we have loaded interfaces from a // SAX version 2.0beta2 or earlier; these might work but // you should really have the final SAX 2.0 h.put(VERSION + "SAX-backlevel", "2.0beta2-or-earlier"); } catch (Exception e2) { // If we didn't find the SAX 2.0beta2 class, look for a 1.0 one h.put( ERROR + VERSION + "SAX", "ERROR attempting to load SAX version 2 class: " + e.toString()); h.put(ERROR, ERROR_FOUND); try { Class clazz = ObjectFactory.findProviderClass(SAX_VERSION1_CLASS, true); Method method = clazz.getMethod(SAX_VERSION1_METHOD, oneStringArg); // If we succeeded, we have loaded interfaces from a // SAX version 1.0 somewhere; which won't work very // well for JAXP 1.1 or beyond! h.put(VERSION + "SAX-backlevel", "1.0"); } catch (Exception e3) { // If we didn't find the SAX 2.0 class, look for a 1.0 one // Note that either 1.0 or no SAX are both errors h.put( ERROR + VERSION + "SAX-backlevel", "ERROR attempting to load SAX version 1 class: " + e3.toString()); } } } }
/** * Report product version information from Xalan-J. * * <p>Looks for version info in xalan.jar from Xalan-J products. * * @param h Hashtable to put information in */ protected void checkProcessorVersion(Hashtable h) { if (null == h) h = new Hashtable(); try { final String XALAN1_VERSION_CLASS = "com.sun.org.apache.xalan.internal.xslt.XSLProcessorVersion"; Class clazz = ObjectFactory.findProviderClass(XALAN1_VERSION_CLASS, true); // Found Xalan-J 1.x, grab it's version fields StringBuffer buf = new StringBuffer(); Field f = clazz.getField("PRODUCT"); buf.append(f.get(null)); buf.append(';'); f = clazz.getField("LANGUAGE"); buf.append(f.get(null)); buf.append(';'); f = clazz.getField("S_VERSION"); buf.append(f.get(null)); buf.append(';'); h.put(VERSION + "xalan1", buf.toString()); } catch (Exception e1) { h.put(VERSION + "xalan1", CLASS_NOTPRESENT); } try { // NOTE: This is the old Xalan 2.0, 2.1, 2.2 version class, // is being replaced by class below final String XALAN2_VERSION_CLASS = "com.sun.org.apache.xalan.internal.processor.XSLProcessorVersion"; Class clazz = ObjectFactory.findProviderClass(XALAN2_VERSION_CLASS, true); // Found Xalan-J 2.x, grab it's version fields StringBuffer buf = new StringBuffer(); Field f = clazz.getField("S_VERSION"); buf.append(f.get(null)); h.put(VERSION + "xalan2x", buf.toString()); } catch (Exception e2) { h.put(VERSION + "xalan2x", CLASS_NOTPRESENT); } try { // NOTE: This is the new Xalan 2.2+ version class final String XALAN2_2_VERSION_CLASS = "com.sun.org.apache.xalan.internal.Version"; final String XALAN2_2_VERSION_METHOD = "getVersion"; final Class noArgs[] = new Class[0]; Class clazz = ObjectFactory.findProviderClass(XALAN2_2_VERSION_CLASS, true); Method method = clazz.getMethod(XALAN2_2_VERSION_METHOD, noArgs); Object returnValue = method.invoke(null, new Object[0]); h.put(VERSION + "xalan2_2", (String) returnValue); } catch (Exception e2) { h.put(VERSION + "xalan2_2", CLASS_NOTPRESENT); } }
/* */ private void doTransform() { /* */ try { /* 101 */ Class clazz = ObjectFactory.findProviderClass(this._className, true); /* 102 */ AbstractTranslet translet = (AbstractTranslet) clazz.newInstance(); /* 103 */ translet.postInitialization(); /* */ /* 106 */ SAXParserFactory factory = SAXParserFactory.newInstance(); /* */ try { /* 108 */ factory.setFeature("http://xml.org/sax/features/namespaces", true); /* */ } /* */ catch (Exception e) { /* 111 */ factory.setNamespaceAware(true); /* */ } /* 113 */ SAXParser parser = factory.newSAXParser(); /* 114 */ XMLReader reader = parser.getXMLReader(); /* */ /* 117 */ XSLTCDTMManager dtmManager = (XSLTCDTMManager) XSLTCDTMManager.getDTMManagerClass().newInstance(); /* */ DTMWSFilter wsfilter; /* */ DTMWSFilter wsfilter; /* 122 */ if ((translet != null) && ((translet instanceof StripFilter))) /* 123 */ wsfilter = new DOMWSFilter(translet); /* */ else { /* 125 */ wsfilter = null; /* */ } /* */ /* 128 */ DOMEnhancedForDTM dom = (DOMEnhancedForDTM) dtmManager.getDTM( new SAXSource(reader, new InputSource(this._fileName)), false, wsfilter, true, false, translet.hasIdCall()); /* */ /* 133 */ dom.setDocumentURI(this._fileName); /* 134 */ translet.prepassDocument(dom); /* */ /* 137 */ int n = this._params.size(); /* 138 */ for (int i = 0; i < n; i++) { /* 139 */ Parameter param = (Parameter) this._params.elementAt(i); /* 140 */ translet.addParameter(param._name, param._value); /* */ } /* */ /* 144 */ TransletOutputHandlerFactory tohFactory = TransletOutputHandlerFactory.newInstance(); /* */ /* 146 */ tohFactory.setOutputType(0); /* 147 */ tohFactory.setEncoding(translet._encoding); /* 148 */ tohFactory.setOutputMethod(translet._method); /* */ /* 150 */ if (this._iterations == -1) { /* 151 */ translet.transform(dom, tohFactory.getSerializationHandler()); /* */ } /* 153 */ else if (this._iterations > 0) { /* 154 */ long mm = System.currentTimeMillis(); /* 155 */ for (int i = 0; i < this._iterations; i++) { /* 156 */ translet.transform(dom, tohFactory.getSerializationHandler()); /* */ } /* */ /* 159 */ mm = System.currentTimeMillis() - mm; /* */ /* 161 */ System.err.println("\n<!--"); /* 162 */ System.err.println(" transform = " + mm / this._iterations + " ms"); /* */ /* 165 */ System.err.println( " throughput = " + 1000.0D / (mm / this._iterations) + " tps"); /* */ /* 169 */ System.err.println("-->"); /* */ } /* */ } /* */ catch (TransletException e) { /* 173 */ if (this._debug) e.printStackTrace(); /* 174 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + e.getMessage()); /* */ } /* */ catch (RuntimeException e) /* */ { /* 178 */ if (this._debug) e.printStackTrace(); /* 179 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + e.getMessage()); /* */ } /* */ catch (FileNotFoundException e) /* */ { /* 183 */ if (this._debug) e.printStackTrace(); /* 184 */ ErrorMsg err = new ErrorMsg("FILE_NOT_FOUND_ERR", this._fileName); /* 185 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + err.toString()); /* */ } /* */ catch (MalformedURLException e) /* */ { /* 189 */ if (this._debug) e.printStackTrace(); /* 190 */ ErrorMsg err = new ErrorMsg("INVALID_URI_ERR", this._fileName); /* 191 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + err.toString()); /* */ } /* */ catch (ClassNotFoundException e) /* */ { /* 195 */ if (this._debug) e.printStackTrace(); /* 196 */ ErrorMsg err = new ErrorMsg("CLASS_NOT_FOUND_ERR", this._className); /* 197 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + err.toString()); /* */ } /* */ catch (UnknownHostException e) /* */ { /* 201 */ if (this._debug) e.printStackTrace(); /* 202 */ ErrorMsg err = new ErrorMsg("INVALID_URI_ERR", this._fileName); /* 203 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + err.toString()); /* */ } /* */ catch (SAXException e) /* */ { /* 207 */ Exception ex = e.getException(); /* 208 */ if (this._debug) { /* 209 */ if (ex != null) ex.printStackTrace(); /* 210 */ e.printStackTrace(); /* */ } /* 212 */ System.err.print(new ErrorMsg("RUNTIME_ERROR_KEY")); /* 213 */ if (ex != null) /* 214 */ System.err.println(ex.getMessage()); /* */ else /* 216 */ System.err.println(e.getMessage()); /* */ } /* */ catch (Exception e) { /* 219 */ if (this._debug) e.printStackTrace(); /* 220 */ System.err.println(new ErrorMsg("RUNTIME_ERROR_KEY") + e.getMessage()); /* */ } /* */ }