# HG changeset patch # User dfuchs # Date 1435658667 -7200 # Node ID e4bc32cbffadb2453599eb069f1de80e87762796 # Parent a3200b88f259f904876b9ab13fd4c4ec2726f8ba 8130051: Cleanup usage of reflection in jaxp Summary: replaced usage of reflection with direct access where possible, removed obsolete code where possible. Reviewed-by: joehw diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/JavaWrapper.java --- a/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/util/JavaWrapper.java Sun Jun 28 16:39:27 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/* - * reserved comment block - * DO NOT REMOVE OR ALTER! - */ -package com.sun.org.apache.bcel.internal.util; - -/* ==================================================================== - * The Apache Software License, Version 1.1 - * - * Copyright (c) 2001 The Apache Software Foundation. All rights - * reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The end-user documentation included with the redistribution, - * if any, must include the following acknowledgment: - * "This product includes software developed by the - * Apache Software Foundation (http://www.apache.org/)." - * Alternately, this acknowledgment may appear in the software itself, - * if and wherever such third-party acknowledgments normally appear. - * - * 4. The names "Apache" and "Apache Software Foundation" and - * "Apache BCEL" must not be used to endorse or promote products - * derived from this software without prior written permission. For - * written permission, please contact apache@apache.org. - * - * 5. Products derived from this software may not be called "Apache", - * "Apache BCEL", nor may "Apache" appear in their name, without - * prior written permission of the Apache Software Foundation. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * ==================================================================== - * - * This software consists of voluntary contributions made by many - * individuals on behalf of the Apache Software Foundation. For more - * information on the Apache Software Foundation, please see - * . - */ - -import java.lang.reflect.*; - -/** - * Java interpreter replacement, i.e., wrapper that uses its own ClassLoader - * to modify/generate classes as they're requested. You can take this as a template - * for your own applications.
- * Call this wrapper with - *
java com.sun.org.apache.bcel.internal.util.JavaWrapper <real.class.name> [arguments]
- *

- * To use your own class loader you can set the "bcel.classloader" system property - * which defaults to "com.sun.org.apache.bcel.internal.util.ClassLoader", e.g., with - *

java com.sun.org.apache.bcel.internal.util.JavaWrapper -Dbcel.classloader=foo.MyLoader <real.class.name> [arguments]
- *

- * - * @author M. Dahm - * @see ClassLoader - */ -public class JavaWrapper { - private java.lang.ClassLoader loader; - - private static java.lang.ClassLoader getClassLoader() { - String s = SecuritySupport.getSystemProperty("bcel.classloader"); - - if((s == null) || "".equals(s)) - s = "com.sun.org.apache.bcel.internal.util.ClassLoader"; - - try { - return (java.lang.ClassLoader)Class.forName(s).newInstance(); - } catch(Exception e) { - throw new RuntimeException(e.toString()); - } - } - - public JavaWrapper(java.lang.ClassLoader loader) { - this.loader = loader; - } - - public JavaWrapper() { - this(getClassLoader()); - } - - /** Runs the _main method of the given class with the arguments passed in argv - * - * @param class_name the fully qualified class name - * @param argv the arguments just as you would pass them directly - */ - public void runMain(String class_name, String[] argv) throws ClassNotFoundException - { - Class cl = loader.loadClass(class_name); - Method method = null; - - try { - method = cl.getMethod("_main", new Class[] { argv.getClass() }); - - /* Method _main is sane ? - */ - int m = method.getModifiers(); - Class r = method.getReturnType(); - - if(!(Modifier.isPublic(m) && Modifier.isStatic(m)) || - Modifier.isAbstract(m) || (r != Void.TYPE)) - throw new NoSuchMethodException(); - } catch(NoSuchMethodException no) { - System.out.println("In class " + class_name + - ": public static void _main(String[] argv) is not defined"); - return; - } - - try { - method.invoke(null, new Object[] { argv }); - } catch(Exception ex) { - ex.printStackTrace(); - } - } - - /** Default _main method used as wrapper, expects the fully qualified class name - * of the real class as the first argument. - */ - public static void _main(String[] argv) throws Exception { - /* Expects class name as first argument, other arguments are by-passed. - */ - if(argv.length == 0) { - System.out.println("Missing class name."); - return; - } - - String class_name = argv[0]; - String[] new_argv = new String[argv.length - 1]; - System.arraycopy(argv, 1, new_argv, 0, new_argv.length); - - JavaWrapper wrapper = new JavaWrapper(); - wrapper.runMain(class_name, new_argv); - } -} diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java --- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/lib/Extensions.java Tue Jun 30 12:04:27 2015 +0200 @@ -22,20 +22,16 @@ */ package com.sun.org.apache.xalan.internal.lib; -import java.util.Hashtable; import java.util.StringTokenizer; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import com.sun.org.apache.xalan.internal.extensions.ExpressionContext; -import com.sun.org.apache.xalan.internal.xslt.EnvironmentCheck; import com.sun.org.apache.xpath.internal.NodeSet; import com.sun.org.apache.xpath.internal.objects.XBoolean; import com.sun.org.apache.xpath.internal.objects.XNumber; import com.sun.org.apache.xpath.internal.objects.XObject; -import com.sun.org.apache.xalan.internal.utils.ObjectFactory; import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; @@ -275,102 +271,6 @@ return tokenize(toTokenize, " \t\n\r"); } - /** - * Return a Node of basic debugging information from the - * EnvironmentCheck utility about the Java environment. - * - *

Simply calls the {@link com.sun.org.apache.xalan.internal.xslt.EnvironmentCheck} - * utility to grab info about the Java environment and CLASSPATH, - * etc., and then returns the resulting Node. Stylesheets can - * then maniuplate this data or simply xsl:copy-of the Node. Note - * that we first attempt to load the more advanced - * org.apache.env.Which utility by reflection; only if that fails - * to we still use the internal version. Which is available from - * http://xml.apache.org/commons/.

- * - *

We throw a WrappedRuntimeException in the unlikely case - * that reading information from the environment throws us an - * exception. (Is this really the best thing to do?)

- * - * @param myContext an ExpressionContext passed in by the - * extension mechanism. This must be an XPathContext. - * @return a Node as described above. - */ - public static Node checkEnvironment(ExpressionContext myContext) - { - - Document factoryDocument = getDocument(); - - Node resultNode = null; - try - { - // First use reflection to try to load Which, which is a - // better version of EnvironmentCheck - resultNode = checkEnvironmentUsingWhich(myContext, factoryDocument); - - if (null != resultNode) - return resultNode; - - // If reflection failed, fallback to our internal EnvironmentCheck - EnvironmentCheck envChecker = new EnvironmentCheck(); - Hashtable h = envChecker.getEnvironmentHash(); - resultNode = factoryDocument.createElement("checkEnvironmentExtension"); - envChecker.appendEnvironmentReport(resultNode, factoryDocument, h); - envChecker = null; - } - catch(Exception e) - { - throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e); - } - - return resultNode; - } - - /** - * Private worker method to attempt to use org.apache.env.Which. - * - * @param myContext an ExpressionContext passed in by the - * extension mechanism. This must be an XPathContext. - * @param factoryDocument providing createElement services, etc. - * @return a Node with environment info; null if any error - */ - private static Node checkEnvironmentUsingWhich(ExpressionContext myContext, - Document factoryDocument) - { - final String WHICH_CLASSNAME = "org.apache.env.Which"; - final String WHICH_METHODNAME = "which"; - final Class WHICH_METHOD_ARGS[] = { java.util.Hashtable.class, - java.lang.String.class, - java.lang.String.class }; - try - { - // Use reflection to try to find xml-commons utility 'Which' - Class clazz = ObjectFactory.findProviderClass(WHICH_CLASSNAME, true); - if (null == clazz) - return null; - - // Fully qualify names since this is the only method they're used in - java.lang.reflect.Method method = clazz.getMethod(WHICH_METHODNAME, WHICH_METHOD_ARGS); - Hashtable report = new Hashtable(); - - // Call the method with our Hashtable, common options, and ignore return value - Object[] methodArgs = { report, "XmlCommons;Xalan;Xerces;Crimson;Ant", "" }; - Object returnValue = method.invoke(null, methodArgs); - - // Create a parent to hold the report and append hash to it - Node resultNode = factoryDocument.createElement("checkEnvironmentExtension"); - com.sun.org.apache.xml.internal.utils.Hashtree2Node.appendHashToNode(report, "whichReport", - resultNode, factoryDocument); - - return resultNode; - } - catch (Throwable t) - { - // Simply return null; no need to report error - return null; - } - } - /** * @return an instance of DOM Document */ diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java --- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java Tue Jun 30 12:04:27 2015 +0200 @@ -121,22 +121,7 @@ public static Object newInstance(String className, boolean doFallback) throws ConfigurationError { - if (System.getSecurityManager()!=null) { - return newInstance(className, null, doFallback); - } else { - return newInstance(className, - findClassLoader (), doFallback); - } - } - - /** - * Create an instance of a class using the specified ClassLoader - */ - static Object newInstance(String className, ClassLoader cl, - boolean doFallback) - throws ConfigurationError - { - // assert(className != null); + ClassLoader cl = System.getSecurityManager()!=null ? null : findClassLoader(); try{ Class providerClass = findProviderClass(className, cl, doFallback); Object instance = providerClass.newInstance(); diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java --- a/src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SmartTransformerFactoryImpl.java Sun Jun 28 16:39:27 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,455 +0,0 @@ -/* - * reserved comment block - * DO NOT REMOVE OR ALTER! - */ -/* - * Copyright 2001-2004 The Apache Software Foundation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/* - * $Id: SmartTransformerFactoryImpl.java,v 1.2.4.1 2005/09/14 09:57:13 pvedula Exp $ - */ - - -package com.sun.org.apache.xalan.internal.xsltc.trax; - -import javax.xml.XMLConstants; -import javax.xml.transform.ErrorListener; -import javax.xml.transform.Source; -import javax.xml.transform.Templates; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.URIResolver; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.sax.SAXResult; -import javax.xml.transform.sax.SAXSource; -import javax.xml.transform.sax.SAXTransformerFactory; -import javax.xml.transform.sax.TemplatesHandler; -import javax.xml.transform.sax.TransformerHandler; -import javax.xml.transform.stream.StreamResult; -import javax.xml.transform.stream.StreamSource; - -import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg; -import com.sun.org.apache.xalan.internal.utils.ObjectFactory; -import org.xml.sax.XMLFilter; - -/** - * Implementation of a transformer factory that uses an XSLTC - * transformer factory for the creation of Templates objects - * and uses the Xalan processor transformer factory for the - * creation of Transformer objects. - * @author G. Todd Miller - */ -public class SmartTransformerFactoryImpl extends SAXTransformerFactory -{ - /** - *

Name of class as a constant to use for debugging.

- */ - private static final String CLASS_NAME = "SmartTransformerFactoryImpl"; - - private SAXTransformerFactory _xsltcFactory = null; - private SAXTransformerFactory _xalanFactory = null; - private SAXTransformerFactory _currFactory = null; - private ErrorListener _errorlistener = null; - private URIResolver _uriresolver = null; - - /** - *

State of secure processing feature.

- */ - private boolean featureSecureProcessing = false; - - /** - * implementation of the SmartTransformerFactory. This factory - * uses com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory - * to return Templates objects; and uses - * com.sun.org.apache.xalan.internal.processor.TransformerFactory - * to return Transformer objects. - */ - public SmartTransformerFactoryImpl() { } - - private void createXSLTCTransformerFactory() { - _xsltcFactory = new TransformerFactoryImpl(); - _currFactory = _xsltcFactory; - } - - private void createXalanTransformerFactory() { - final String xalanMessage = - "com.sun.org.apache.xalan.internal.xsltc.trax.SmartTransformerFactoryImpl "+ - "could not create an "+ - "com.sun.org.apache.xalan.internal.processor.TransformerFactoryImpl."; - // try to create instance of Xalan factory... - try { - Class xalanFactClass = ObjectFactory.findProviderClass( - "com.sun.org.apache.xalan.internal.processor.TransformerFactoryImpl", - true); - _xalanFactory = (SAXTransformerFactory) - xalanFactClass.newInstance(); - } - catch (ClassNotFoundException e) { - System.err.println(xalanMessage); - } - catch (InstantiationException e) { - System.err.println(xalanMessage); - } - catch (IllegalAccessException e) { - System.err.println(xalanMessage); - } - _currFactory = _xalanFactory; - } - - public void setErrorListener(ErrorListener listener) - throws IllegalArgumentException - { - _errorlistener = listener; - } - - public ErrorListener getErrorListener() { - return _errorlistener; - } - - public Object getAttribute(String name) - throws IllegalArgumentException - { - // GTM: NB: 'debug' should change to something more unique... - if ((name.equals("translet-name")) || (name.equals("debug"))) { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - return _xsltcFactory.getAttribute(name); - } - else { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - return _xalanFactory.getAttribute(name); - } - } - - public void setAttribute(String name, Object value) - throws IllegalArgumentException { - // GTM: NB: 'debug' should change to something more unique... - if ((name.equals("translet-name")) || (name.equals("debug"))) { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - _xsltcFactory.setAttribute(name, value); - } - else { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - _xalanFactory.setAttribute(name, value); - } - } - - /** - *

Set a feature for this SmartTransformerFactory and Transformers - * or Templates created by this factory.

- * - *

- * Feature names are fully qualified {@link java.net.URI}s. - * Implementations may define their own features. - * An {@link TransformerConfigurationException} is thrown if this TransformerFactory or the - * Transformers or Templates it creates cannot support the feature. - * It is possible for an TransformerFactory to expose a feature value but be unable to change its state. - *

- * - *

See {@link javax.xml.transform.TransformerFactory} for full documentation of specific features.

- * - * @param name Feature name. - * @param value Is feature state true or false. - * - * @throws TransformerConfigurationException if this TransformerFactory - * or the Transformers or Templates it creates cannot support this feature. - * @throws NullPointerException If the name parameter is null. - */ - public void setFeature(String name, boolean value) - throws TransformerConfigurationException { - - // feature name cannot be null - if (name == null) { - ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_SET_FEATURE_NULL_NAME); - throw new NullPointerException(err.toString()); - } - // secure processing? - else if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) { - featureSecureProcessing = value; - // all done processing feature - return; - } - else { - // unknown feature - ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_UNSUPPORTED_FEATURE, name); - throw new TransformerConfigurationException(err.toString()); - } - } - - /** - * javax.xml.transform.sax.TransformerFactory implementation. - * Look up the value of a feature (to see if it is supported). - * This method must be updated as the various methods and features of this - * class are implemented. - * - * @param name The feature name - * @return 'true' if feature is supported, 'false' if not - */ - public boolean getFeature(String name) { - // All supported features should be listed here - String[] features = { - DOMSource.FEATURE, - DOMResult.FEATURE, - SAXSource.FEATURE, - SAXResult.FEATURE, - StreamSource.FEATURE, - StreamResult.FEATURE - }; - - // feature name cannot be null - if (name == null) { - ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_GET_FEATURE_NULL_NAME); - throw new NullPointerException(err.toString()); - } - - // Inefficient, but it really does not matter in a function like this - for (int i = 0; i < features.length; i++) { - if (name.equals(features[i])) - return true; - } - - // secure processing? - if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) { - return featureSecureProcessing; - } - - // unknown feature - return false; - } - - public URIResolver getURIResolver() { - return _uriresolver; - } - - public void setURIResolver(URIResolver resolver) { - _uriresolver = resolver; - } - - public Source getAssociatedStylesheet(Source source, String media, - String title, String charset) - throws TransformerConfigurationException - { - if (_currFactory == null) { - createXSLTCTransformerFactory(); - } - return _currFactory.getAssociatedStylesheet(source, media, - title, charset); - } - - /** - * Create a Transformer object that copies the input document to the - * result. Uses the com.sun.org.apache.xalan.internal.processor.TransformerFactory. - * @return A Transformer object. - */ - public Transformer newTransformer() - throws TransformerConfigurationException - { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - if (_errorlistener != null) { - _xalanFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xalanFactory.setURIResolver(_uriresolver); - } - _currFactory = _xalanFactory; - return _currFactory.newTransformer(); - } - - /** - * Create a Transformer object that from the input stylesheet - * Uses the com.sun.org.apache.xalan.internal.processor.TransformerFactory. - * @param source the stylesheet. - * @return A Transformer object. - */ - public Transformer newTransformer(Source source) throws - TransformerConfigurationException - { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - if (_errorlistener != null) { - _xalanFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xalanFactory.setURIResolver(_uriresolver); - } - _currFactory = _xalanFactory; - return _currFactory.newTransformer(source); - } - - /** - * Create a Templates object that from the input stylesheet - * Uses the com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory. - * @param source the stylesheet. - * @return A Templates object. - */ - public Templates newTemplates(Source source) - throws TransformerConfigurationException - { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - if (_errorlistener != null) { - _xsltcFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xsltcFactory.setURIResolver(_uriresolver); - } - _currFactory = _xsltcFactory; - return _currFactory.newTemplates(source); - } - - /** - * Get a TemplatesHandler object that can process SAX ContentHandler - * events into a Templates object. Uses the - * com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory. - */ - public TemplatesHandler newTemplatesHandler() - throws TransformerConfigurationException - { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - if (_errorlistener != null) { - _xsltcFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xsltcFactory.setURIResolver(_uriresolver); - } - return _xsltcFactory.newTemplatesHandler(); - } - - /** - * Get a TransformerHandler object that can process SAX ContentHandler - * events based on a copy transformer. - * Uses com.sun.org.apache.xalan.internal.processor.TransformerFactory. - */ - public TransformerHandler newTransformerHandler() - throws TransformerConfigurationException - { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - if (_errorlistener != null) { - _xalanFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xalanFactory.setURIResolver(_uriresolver); - } - return _xalanFactory.newTransformerHandler(); - } - - /** - * Get a TransformerHandler object that can process SAX ContentHandler - * events based on a transformer specified by the stylesheet Source. - * Uses com.sun.org.apache.xalan.internal.processor.TransformerFactory. - */ - public TransformerHandler newTransformerHandler(Source src) - throws TransformerConfigurationException - { - if (_xalanFactory == null) { - createXalanTransformerFactory(); - } - if (_errorlistener != null) { - _xalanFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xalanFactory.setURIResolver(_uriresolver); - } - return _xalanFactory.newTransformerHandler(src); - } - - - /** - * Get a TransformerHandler object that can process SAX ContentHandler - * events based on a transformer specified by the stylesheet Source. - * Uses com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory. - */ - public TransformerHandler newTransformerHandler(Templates templates) - throws TransformerConfigurationException - { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - if (_errorlistener != null) { - _xsltcFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xsltcFactory.setURIResolver(_uriresolver); - } - return _xsltcFactory.newTransformerHandler(templates); - } - - - /** - * Create an XMLFilter that uses the given source as the - * transformation instructions. Uses - * com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory. - */ - public XMLFilter newXMLFilter(Source src) - throws TransformerConfigurationException { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - if (_errorlistener != null) { - _xsltcFactory.setErrorListener(_errorlistener); - } - if (_uriresolver != null) { - _xsltcFactory.setURIResolver(_uriresolver); - } - Templates templates = _xsltcFactory.newTemplates(src); - if (templates == null ) return null; - return newXMLFilter(templates); - } - - /* - * Create an XMLFilter that uses the given source as the - * transformation instructions. Uses - * com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactory. - */ - public XMLFilter newXMLFilter(Templates templates) - throws TransformerConfigurationException { - try { - return new com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter(templates); - } - catch(TransformerConfigurationException e1) { - if (_xsltcFactory == null) { - createXSLTCTransformerFactory(); - } - ErrorListener errorListener = _xsltcFactory.getErrorListener(); - if(errorListener != null) { - try { - errorListener.fatalError(e1); - return null; - } - catch( TransformerException e2) { - new TransformerConfigurationException(e2); - } - } - throw e1; - } - } -} diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/dom/CoreDOMImplementationImpl.java Tue Jun 30 12:04:27 2015 +0200 @@ -371,11 +371,7 @@ // to restrict the number of validation handlers being // requested if(freeValidatorIndex < 0) { - return (RevalidationHandler) (ObjectFactory - .newInstance( - "com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator", - ObjectFactory.findClassLoader(), - true)); + return new com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator(); } // return first available validator RevalidationHandler val = validators[freeValidatorIndex]; @@ -384,11 +380,7 @@ } else if(schemaType == XMLGrammarDescription.XML_DTD) { if(freeDTDValidatorIndex < 0) { - return (RevalidationHandler) (ObjectFactory - .newInstance( - "com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator", - ObjectFactory.findClassLoader(), - true)); + return new com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator(); } // return first available validator RevalidationHandler val = dtdValidators[freeDTDValidatorIndex]; diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java Tue Jun 30 12:04:27 2015 +0200 @@ -638,7 +638,7 @@ // set preference for redirection followRedirects = httpInputSource.getFollowHTTPRedirects(); if (!followRedirects) { - setInstanceFollowRedirects(urlConnection, followRedirects); + urlConnection.setInstanceFollowRedirects(followRedirects); } } @@ -2193,20 +2193,6 @@ } // expandSystemIdStrictOn(String,String):String /** - * Attempt to set whether redirects will be followed for an HttpURLConnection. - * This may fail on earlier JDKs which do not support setting this preference. - */ - public static void setInstanceFollowRedirects(HttpURLConnection urlCon, boolean followRedirects) { - try { - Method method = HttpURLConnection.class.getMethod("setInstanceFollowRedirects", new Class[] {Boolean.TYPE}); - method.invoke(urlCon, new Object[] {followRedirects ? Boolean.TRUE : Boolean.FALSE}); - } - // setInstanceFollowRedirects doesn't exist. - catch (Exception exc) {} - } - - - /** * Helper method for expandSystemId(String,String,boolean):String */ private static String expandSystemIdStrictOff(String systemId, String baseSystemId) diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/DOMUtil.java --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/DOMUtil.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/DOMUtil.java Tue Jun 30 12:04:27 2015 +0200 @@ -845,13 +845,7 @@ */ public static DOMException createDOMException(short code, Throwable cause) { DOMException de = new DOMException(code, cause != null ? cause.getMessage() : null); - if (cause != null && ThrowableMethods.fgThrowableMethodsAvailable) { - try { - ThrowableMethods.fgThrowableInitCauseMethod.invoke(de, new Object [] {cause}); - } - // Something went wrong. There's not much we can do about it. - catch (Exception e) {} - } + if (cause != null) de.initCause(cause); return de; } @@ -860,42 +854,8 @@ */ public static LSException createLSException(short code, Throwable cause) { LSException lse = new LSException(code, cause != null ? cause.getMessage() : null); - if (cause != null && ThrowableMethods.fgThrowableMethodsAvailable) { - try { - ThrowableMethods.fgThrowableInitCauseMethod.invoke(lse, new Object [] {cause}); - } - // Something went wrong. There's not much we can do about it. - catch (Exception e) {} - } + if (cause != null) lse.initCause(cause); return lse; } - /** - * Holder of methods from java.lang.Throwable. - */ - static class ThrowableMethods { - - // Method: java.lang.Throwable.initCause(java.lang.Throwable) - private static java.lang.reflect.Method fgThrowableInitCauseMethod = null; - - // Flag indicating whether or not Throwable methods available. - private static boolean fgThrowableMethodsAvailable = false; - - private ThrowableMethods() {} - - // Attempt to get methods for java.lang.Throwable on class initialization. - static { - try { - fgThrowableInitCauseMethod = Throwable.class.getMethod("initCause", new Class [] {Throwable.class}); - fgThrowableMethodsAvailable = true; - } - // ClassNotFoundException, NoSuchMethodException or SecurityException - // Whatever the case, we cannot use java.lang.Throwable.initCause(java.lang.Throwable). - catch (Exception exc) { - fgThrowableInitCauseMethod = null; - fgThrowableMethodsAvailable = false; - } - } - } - } // class DOMUtil diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xinclude/XIncludeTextReader.java Tue Jun 30 12:04:27 2015 +0200 @@ -140,7 +140,7 @@ // set preference for redirection boolean followRedirects = httpInputSource.getFollowHTTPRedirects(); if (!followRedirects) { - XMLEntityManager.setInstanceFollowRedirects(urlConnection, followRedirects); + urlConnection.setInstanceFollowRedirects(followRedirects); } } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/DTMException.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/DTMException.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/DTMException.java Tue Jun 30 12:04:27 2015 +0200 @@ -323,63 +323,5 @@ super.printStackTrace(s); } catch (Throwable e) {} - boolean isJdk14OrHigher = false; - try { - Throwable.class.getMethod("getCause", (Class[]) null); - isJdk14OrHigher = true; - } catch (NoSuchMethodException nsme) { - // do nothing - } - - // The printStackTrace method of the Throwable class in jdk 1.4 - // and higher will include the cause when printing the backtrace. - // The following code is only required when using jdk 1.3 or lower - if (!isJdk14OrHigher) { - Throwable exception = getException(); - - for (int i = 0; (i < 10) && (null != exception); i++) { - s.println("---------"); - - try { - if (exception instanceof DTMException) { - String locInfo = - ((DTMException) exception) - .getLocationAsString(); - - if (null != locInfo) { - s.println(locInfo); - } - } - - exception.printStackTrace(s); - } catch (Throwable e) { - s.println("Could not print stack trace..."); - } - - try { - Method meth = - ((Object) exception).getClass().getMethod("getException", - (Class[]) null); - - if (null != meth) { - Throwable prev = exception; - - exception = (Throwable) meth.invoke(exception, (Object[]) null); - - if (prev == exception) { - break; - } - } else { - exception = null; - } - } catch (InvocationTargetException ite) { - exception = null; - } catch (IllegalAccessException iae) { - exception = null; - } catch (NoSuchMethodException nsme) { - exception = null; - } - } - } } } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java Tue Jun 30 12:04:27 2015 +0200 @@ -348,8 +348,7 @@ if (haveXercesParser) { // IncrementalSAXSource_Xerces to avoid threading. try { - coParser =(IncrementalSAXSource) - Class.forName("com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces").newInstance(); + coParser = new com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces(); } catch( Exception ex ) { ex.printStackTrace(); coParser=null; diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/dtm/ref/IncrementalSAXSource_Xerces.java Tue Jun 30 12:04:27 2015 +0200 @@ -87,6 +87,9 @@ { try { + // This should be cleaned up and the use of reflection + // removed - see JDK-8129880 + // Xerces-2 incremental parsing support (as of Beta 3) // ContentHandlers still get set on fIncrementalParser (to get // conversion from XNI events to SAX events), but diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/resolver/readers/SAXCatalogReader.java Tue Jun 30 12:04:27 2015 +0200 @@ -233,7 +233,13 @@ } parser.parse(new InputSource(is), spHandler); } else { - Parser parser = (Parser) ReflectUtil.forName(parserClass).newInstance(); + Class c = ReflectUtil.forName(parserClass); + if (!Parser.class.isAssignableFrom(c)) { + throw new ClassCastException(parserClass + + " cannot be cast to " + + Parser.class.getName()); + } + Parser parser = (Parser) c.newInstance(); parser.setDocumentHandler(this); if (bResolver != null) { parser.setEntityResolver(bResolver); diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/BaseMarkupSerializer.java Tue Jun 30 12:04:27 2015 +0200 @@ -1220,37 +1220,13 @@ if ( internal != null && internal.length() > 0 ) _printer.printText( internal ); endDTD(); - } - // DOM Level 1 -- does implementation have methods? - catch (NoSuchMethodError nsme) { - Class docTypeClass = docType.getClass(); - - String docTypePublicId = null; - String docTypeSystemId = null; - try { - java.lang.reflect.Method getPublicId = docTypeClass.getMethod("getPublicId", (Class[]) null); - if (getPublicId.getReturnType().equals(String.class)) { - docTypePublicId = (String)getPublicId.invoke(docType, (Object[]) null); - } - } - catch (Exception e) { - // ignore - } - try { - java.lang.reflect.Method getSystemId = docTypeClass.getMethod("getSystemId", (Class[]) null); - if (getSystemId.getReturnType().equals(String.class)) { - docTypeSystemId = (String)getSystemId.invoke(docType, (Object[]) null); - } - } - catch (Exception e) { - // ignore - } + } catch (Exception e) { + // ignore _printer.enterDTD(); - _docTypePublicId = docTypePublicId; - _docTypeSystemId = docTypeSystemId; + _docTypePublicId = null; + _docTypeSystemId = null; endDTD(); } - serializeDTD(docType.getName()); } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/DOMSerializerImpl.java Tue Jun 30 12:04:27 2015 +0200 @@ -54,7 +54,6 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.ProcessingInstruction; -import org.w3c.dom.Text; import org.w3c.dom.ls.LSException; import org.w3c.dom.ls.LSOutput; import org.w3c.dom.ls.LSSerializer; @@ -1030,15 +1029,12 @@ private String _getXmlVersion(Node node) { Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ? (Document) node : node.getOwnerDocument(); - if (doc != null && DocumentMethods.fgDocumentMethodsAvailable) { + if (doc != null) { try { - return (String) DocumentMethods.fgDocumentGetXmlVersionMethod.invoke(doc, (Object[]) null); + return doc.getXmlVersion(); } // The VM ran out of memory or there was some other serious problem. Re-throw. - catch (VirtualMachineError vme) { + catch (VirtualMachineError | ThreadDeath vme) { throw vme; - } // ThreadDeath should always be re-thrown - catch (ThreadDeath td) { - throw td; } // Ignore all other exceptions and errors catch (Throwable t) { } @@ -1049,15 +1045,12 @@ private String _getInputEncoding(Node node) { Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ? (Document) node : node.getOwnerDocument(); - if (doc != null && DocumentMethods.fgDocumentMethodsAvailable) { + if (doc != null) { try { - return (String) DocumentMethods.fgDocumentGetInputEncodingMethod.invoke(doc, (Object[]) null); + return doc.getInputEncoding(); } // The VM ran out of memory or there was some other serious problem. Re-throw. - catch (VirtualMachineError vme) { + catch (VirtualMachineError | ThreadDeath vme) { throw vme; - } // ThreadDeath should always be re-thrown - catch (ThreadDeath td) { - throw td; } // Ignore all other exceptions and errors catch (Throwable t) { } @@ -1068,15 +1061,12 @@ private String _getXmlEncoding(Node node) { Document doc = (node.getNodeType() == Node.DOCUMENT_NODE) ? (Document) node : node.getOwnerDocument(); - if (doc != null && DocumentMethods.fgDocumentMethodsAvailable) { + if (doc != null) { try { - return (String) DocumentMethods.fgDocumentGetXmlEncodingMethod.invoke(doc, (Object[]) null); + return doc.getXmlEncoding(); } // The VM ran out of memory or there was some other serious problem. Re-throw. - catch (VirtualMachineError vme) { + catch (VirtualMachineError | ThreadDeath vme) { throw vme; - } // ThreadDeath should always be re-thrown - catch (ThreadDeath td) { - throw td; } // Ignore all other exceptions and errors catch (Throwable t) { } @@ -1084,42 +1074,4 @@ return null; } - /** - * Holder of DOM Level 3 methods from org.w3c.dom.Document. - */ - static class DocumentMethods { - - // Method: org.w3c.dom.Document.getXmlVersion() - private static java.lang.reflect.Method fgDocumentGetXmlVersionMethod = null; - - // Method: org.w3c.dom.Document.getInputEncoding() - private static java.lang.reflect.Method fgDocumentGetInputEncodingMethod = null; - - // Method: org.w3c.dom.Document.getXmlEncoding() - private static java.lang.reflect.Method fgDocumentGetXmlEncodingMethod = null; - - // Flag indicating whether or not Document methods are available. - private static boolean fgDocumentMethodsAvailable = false; - - private DocumentMethods() { - } - - // Attempt to get methods for org.w3c.dom.Document on class initialization. - static { - try { - fgDocumentGetXmlVersionMethod = Document.class.getMethod("getXmlVersion", new Class[]{}); - fgDocumentGetInputEncodingMethod = Document.class.getMethod("getInputEncoding", new Class[]{}); - fgDocumentGetXmlEncodingMethod = Document.class.getMethod("getXmlEncoding", new Class[]{}); - fgDocumentMethodsAvailable = true; - } // ClassNotFoundException, NoSuchMethodException or SecurityException - // Whatever the case, we cannot retrieve the methods. - catch (Exception exc) { - fgDocumentGetXmlVersionMethod = null; - fgDocumentGetInputEncodingMethod = null; - fgDocumentGetXmlEncodingMethod = null; - fgDocumentMethodsAvailable = false; - } - } - } - } //DOMSerializerImpl diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java --- a/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xml/internal/serialize/EncodingInfo.java Tue Jun 30 12:04:27 2015 +0200 @@ -26,6 +26,8 @@ import java.io.UnsupportedEncodingException; import java.io.Writer; import com.sun.org.apache.xerces.internal.util.EncodingMap; +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; /** * This class represents an encoding. @@ -37,9 +39,6 @@ */ public class EncodingInfo { - // An array to hold the argument for a method of Charset, CharsetEncoder or CharToByteConverter. - private Object [] fArgsForMethod = null; - // name of encoding as registered with IANA; // preferably a MIME name, but aliases are fine too. String ianaName; @@ -47,15 +46,7 @@ int lastPrintable; // The CharsetEncoder with which we test unusual characters. - Object fCharsetEncoder = null; - - // The CharToByteConverter with which we test unusual characters. - Object fCharToByteConverter = null; - - // Is the converter null because it can't be instantiated - // for some reason (perhaps we're running with insufficient authority as - // an applet? - boolean fHaveTriedCToB = false; + CharsetEncoder fCharsetEncoder = null; // Is the charset encoder usable or available. boolean fHaveTriedCharsetEncoder = false; @@ -118,16 +109,12 @@ private boolean isPrintable0(char ch) { // Attempt to get a CharsetEncoder for this encoding. - if (fCharsetEncoder == null && CharsetMethods.fgNIOCharsetAvailable && !fHaveTriedCharsetEncoder) { - if (fArgsForMethod == null) { - fArgsForMethod = new Object [1]; - } + if (fCharsetEncoder == null && !fHaveTriedCharsetEncoder) { // try and create the CharsetEncoder try { - fArgsForMethod[0] = javaName; - Object charset = CharsetMethods.fgCharsetForNameMethod.invoke(null, fArgsForMethod); - if (((Boolean) CharsetMethods.fgCharsetCanEncodeMethod.invoke(charset, (Object[]) null)).booleanValue()) { - fCharsetEncoder = CharsetMethods.fgCharsetNewEncoderMethod.invoke(charset, (Object[]) null); + Charset charset = java.nio.charset.Charset.forName(javaName); + if (charset.canEncode()) { + fCharsetEncoder = charset.newEncoder(); } // This charset cannot be used for encoding, don't try it again... else { @@ -142,8 +129,7 @@ // Attempt to use the CharsetEncoder to determine whether the character is printable. if (fCharsetEncoder != null) { try { - fArgsForMethod[0] = new Character(ch); - return ((Boolean) CharsetMethods.fgCharsetEncoderCanEncodeMethod.invoke(fCharsetEncoder, fArgsForMethod)).booleanValue(); + return fCharsetEncoder.canEncode(ch); } catch (Exception e) { // obviously can't use this charset encoder; possibly a JDK bug @@ -152,39 +138,7 @@ } } - // As a last resort try to use a sun.io.CharToByteConverter to - // determine whether this character is printable. We will always - // reach here on JDK 1.3 or below. - if (fCharToByteConverter == null) { - if (fHaveTriedCToB || !CharToByteConverterMethods.fgConvertersAvailable) { - // forget it; nothing we can do... - return false; - } - if (fArgsForMethod == null) { - fArgsForMethod = new Object [1]; - } - // try and create the CharToByteConverter - try { - fArgsForMethod[0] = javaName; - fCharToByteConverter = CharToByteConverterMethods.fgGetConverterMethod.invoke(null, fArgsForMethod); - } - catch (Exception e) { - // don't try it again... - fHaveTriedCToB = true; - return false; - } - } - try { - fArgsForMethod[0] = new Character(ch); - return ((Boolean) CharToByteConverterMethods.fgCanConvertMethod.invoke(fCharToByteConverter, fArgsForMethod)).booleanValue(); - } - catch (Exception e) { - // obviously can't use this converter; probably some kind of - // security restriction - fCharToByteConverter = null; - fHaveTriedCToB = false; - return false; - } + return false; } // is this an encoding name recognized by this JDK? @@ -194,82 +148,4 @@ String s = new String(bTest, name); } - /** - * Holder of methods from java.nio.charset.Charset and java.nio.charset.CharsetEncoder. - */ - static class CharsetMethods { - - // Method: java.nio.charset.Charset.forName(java.lang.String) - private static java.lang.reflect.Method fgCharsetForNameMethod = null; - - // Method: java.nio.charset.Charset.canEncode() - private static java.lang.reflect.Method fgCharsetCanEncodeMethod = null; - - // Method: java.nio.charset.Charset.newEncoder() - private static java.lang.reflect.Method fgCharsetNewEncoderMethod = null; - - // Method: java.nio.charset.CharsetEncoder.canEncode(char) - private static java.lang.reflect.Method fgCharsetEncoderCanEncodeMethod = null; - - // Flag indicating whether or not java.nio.charset.* is available. - private static boolean fgNIOCharsetAvailable = false; - - private CharsetMethods() {} - - // Attempt to get methods for Charset and CharsetEncoder on class initialization. - static { - try { - Class charsetClass = Class.forName("java.nio.charset.Charset"); - Class charsetEncoderClass = Class.forName("java.nio.charset.CharsetEncoder"); - fgCharsetForNameMethod = charsetClass.getMethod("forName", new Class [] {String.class}); - fgCharsetCanEncodeMethod = charsetClass.getMethod("canEncode", new Class [] {}); - fgCharsetNewEncoderMethod = charsetClass.getMethod("newEncoder", new Class [] {}); - fgCharsetEncoderCanEncodeMethod = charsetEncoderClass.getMethod("canEncode", new Class [] {Character.TYPE}); - fgNIOCharsetAvailable = true; - } - // ClassNotFoundException, NoSuchMethodException or SecurityException - // Whatever the case, we cannot use java.nio.charset.*. - catch (Exception exc) { - fgCharsetForNameMethod = null; - fgCharsetCanEncodeMethod = null; - fgCharsetEncoderCanEncodeMethod = null; - fgCharsetNewEncoderMethod = null; - fgNIOCharsetAvailable = false; - } - } - } - - /** - * Holder of methods from sun.io.CharToByteConverter. - */ - static class CharToByteConverterMethods { - - // Method: sun.io.CharToByteConverter.getConverter(java.lang.String) - private static java.lang.reflect.Method fgGetConverterMethod = null; - - // Method: sun.io.CharToByteConverter.canConvert(char) - private static java.lang.reflect.Method fgCanConvertMethod = null; - - // Flag indicating whether or not sun.io.CharToByteConverter is available. - private static boolean fgConvertersAvailable = false; - - private CharToByteConverterMethods() {} - - // Attempt to get methods for char to byte converter on class initialization. - static { - try { - Class clazz = Class.forName("sun.io.CharToByteConverter"); - fgGetConverterMethod = clazz.getMethod("getConverter", new Class [] {String.class}); - fgCanConvertMethod = clazz.getMethod("canConvert", new Class [] {Character.TYPE}); - fgConvertersAvailable = true; - } - // ClassNotFoundException, NoSuchMethodException or SecurityException - // Whatever the case, we cannot use sun.io.CharToByteConverter. - catch (Exception exc) { - fgGetConverterMethod = null; - fgCanConvertMethod = null; - fgConvertersAvailable = false; - } - } - } } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java --- a/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/org/apache/xpath/internal/compiler/FunctionTable.java Tue Jun 30 12:04:27 2015 +0200 @@ -378,6 +378,12 @@ int funcIndex; Object funcIndexObj = getFunctionID(name); + if (func != null && !Function.class.isAssignableFrom(func)) { + throw new ClassCastException(func.getName() + + " cannot be cast to " + + Function.class.getName()); + } + if (null != funcIndexObj) { funcIndex = ((Integer) funcIndexObj).intValue(); diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java --- a/src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/com/sun/xml/internal/stream/writers/XMLDOMWriterImpl.java Tue Jun 30 12:04:27 2015 +0200 @@ -64,7 +64,6 @@ private Node currentNode = null; private Node node = null; private NamespaceSupport namespaceContext = null; - private Method mXmlVersion = null; private boolean [] needContextPop = null; private StringBuffer stringBuffer = null; private int resizeValue = 20; @@ -83,25 +82,11 @@ ownerDoc = node.getOwnerDocument(); currentNode = node; } - getDLThreeMethods(); stringBuffer = new StringBuffer(); needContextPop = new boolean[resizeValue]; namespaceContext = new NamespaceSupport(); } - private void getDLThreeMethods(){ - try{ - mXmlVersion = ownerDoc.getClass().getMethod("setXmlVersion",new Class[] {String.class}); - }catch(NoSuchMethodException mex){ - //log these errors at fine level. - mXmlVersion = null; - }catch(SecurityException se){ - //log these errors at fine level. - mXmlVersion = null; - } - } - - /** * This method has no effect when called. * @throws javax.xml.stream.XMLStreamException {@inheritDoc} @@ -557,15 +542,7 @@ * @throws javax.xml.stream.XMLStreamException {@inheritDoc} */ public void writeStartDocument() throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {"1.0"}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } + ownerDoc.setXmlVersion("1.0"); } /** @@ -575,15 +552,7 @@ * @throws javax.xml.stream.XMLStreamException {@inheritDoc} */ public void writeStartDocument(String version) throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {version}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } + ownerDoc.setXmlVersion(version); } /** @@ -594,15 +563,7 @@ * @throws javax.xml.stream.XMLStreamException {@inheritDoc} */ public void writeStartDocument(String encoding, String version) throws XMLStreamException { - try{ - if(mXmlVersion != null){ - mXmlVersion.invoke(ownerDoc, new Object[] {version}); - } - }catch(IllegalAccessException iae){ - throw new XMLStreamException(iae); - }catch(InvocationTargetException ite){ - throw new XMLStreamException(ite); - } + ownerDoc.setXmlVersion(version); //TODO: What to do with encoding.-Venu } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/javax/xml/transform/TransformerException.java --- a/src/java.xml/share/classes/javax/xml/transform/TransformerException.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/javax/xml/transform/TransformerException.java Tue Jun 30 12:04:27 2015 +0200 @@ -110,6 +110,12 @@ */ public synchronized Throwable initCause(Throwable cause) { + // TransformerException doesn't set its cause (probably + // because it predates initCause()) - and we may not want + // to change this since Exceptions are serializable... + // But this also leads to the broken code in printStackTrace + // below... + if (this.containedException != null) { throw new IllegalStateException("Can't overwrite cause"); } @@ -312,61 +318,57 @@ } try { - String locInfo = getLocationAsString(); + try { + String locInfo = getLocationAsString(); - if (null != locInfo) { - s.println(locInfo); - } + if (null != locInfo) { + s.println(locInfo); + } - super.printStackTrace(s); - } catch (Throwable e) {} + super.printStackTrace(s); + } catch (Throwable e) {} - Throwable exception = getException(); + Throwable exception = getException(); - for (int i = 0; (i < 10) && (null != exception); i++) { - s.println("---------"); + for (int i = 0; (i < 10) && (null != exception); i++) { + s.println("---------"); - try { - if (exception instanceof TransformerException) { - String locInfo = - ((TransformerException) exception) - .getLocationAsString(); - - if (null != locInfo) { - s.println(locInfo); - } + try { + exception.printStackTrace(s); + // if exception is a TransformerException it will print + // its contained exception, so we don't need to redo it here, + // and we can exit the loop now. + if (exception instanceof TransformerException) break; + } catch (Throwable e) { + s.println("Could not print stack trace..."); } - exception.printStackTrace(s); - } catch (Throwable e) { - s.println("Could not print stack trace..."); - } + try { + // Is this still needed? + Method meth = exception.getClass().getMethod("getException"); - try { - Method meth = - ((Object) exception).getClass().getMethod("getException", - (Class[]) null); + if (null != meth) { + Throwable prev = exception; + + exception = (Throwable) meth.invoke(exception, (Object[]) null); - if (null != meth) { - Throwable prev = exception; - - exception = (Throwable) meth.invoke(exception, (Object[]) null); - - if (prev == exception) { - break; + if (prev == exception) { + break; + } + } else { + exception = null; } - } else { + } catch (InvocationTargetException ite) { + exception = null; + } catch (IllegalAccessException iae) { + exception = null; + } catch (NoSuchMethodException nsme) { exception = null; } - } catch (InvocationTargetException ite) { - exception = null; - } catch (IllegalAccessException iae) { - exception = null; - } catch (NoSuchMethodException nsme) { - exception = null; } + } finally { + // ensure output is written + s.flush(); } - // insure output is written - s.flush(); } } diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/javax/xml/validation/SchemaFactoryFinder.java --- a/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryFinder.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/javax/xml/validation/SchemaFactoryFinder.java Tue Jun 30 12:04:27 2015 +0200 @@ -28,7 +28,6 @@ import java.io.File; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.net.URL; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/javax/xml/validation/SecuritySupport.java --- a/src/java.xml/share/classes/javax/xml/validation/SecuritySupport.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/javax/xml/validation/SecuritySupport.java Tue Jun 30 12:04:27 2015 +0200 @@ -41,13 +41,10 @@ ClassLoader getContextClassLoader() { return - AccessController.doPrivileged(new PrivilegedAction() { + AccessController.doPrivileged(new PrivilegedAction<>() { @Override public ClassLoader run() { - ClassLoader cl = null; - //try { - cl = Thread.currentThread().getContextClassLoader(); - //} catch (SecurityException ex) { } + ClassLoader cl = Thread.currentThread().getContextClassLoader(); if (cl == null) cl = ClassLoader.getSystemClassLoader(); return cl; @@ -56,7 +53,7 @@ } String getSystemProperty(final String propName) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public String run() { return System.getProperty(propName); @@ -69,7 +66,7 @@ { try { return AccessController.doPrivileged( - new PrivilegedExceptionAction() { + new PrivilegedExceptionAction<>() { @Override public FileInputStream run() throws FileNotFoundException { return new FileInputStream(file); @@ -82,7 +79,7 @@ // Used for debugging purposes String getClassSource(Class cls) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public String run() { CodeSource cs = cls.getProtectionDomain().getCodeSource(); @@ -97,7 +94,7 @@ } boolean doesFileExist(final File f) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public Boolean run() { return f.exists(); diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/javax/xml/xpath/SecuritySupport.java --- a/src/java.xml/share/classes/javax/xml/xpath/SecuritySupport.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/javax/xml/xpath/SecuritySupport.java Tue Jun 30 12:04:27 2015 +0200 @@ -40,7 +40,7 @@ ClassLoader getContextClassLoader() { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public ClassLoader run() { ClassLoader cl = null; @@ -53,7 +53,7 @@ } String getSystemProperty(final String propName) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public String run() { return System.getProperty(propName); @@ -66,7 +66,7 @@ { try { return AccessController.doPrivileged( - new PrivilegedExceptionAction() { + new PrivilegedExceptionAction<>() { @Override public FileInputStream run() throws FileNotFoundException { return new FileInputStream(file); @@ -79,7 +79,7 @@ // Used for debugging purposes String getClassSource(Class cls) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public String run() { CodeSource cs = cls.getProtectionDomain().getCodeSource(); @@ -94,7 +94,7 @@ } boolean doesFileExist(final File f) { - return AccessController.doPrivileged(new PrivilegedAction() { + return AccessController.doPrivileged(new PrivilegedAction<>() { @Override public Boolean run() { return f.exists(); diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/javax/xml/xpath/XPathFactoryFinder.java --- a/src/java.xml/share/classes/javax/xml/xpath/XPathFactoryFinder.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/javax/xml/xpath/XPathFactoryFinder.java Tue Jun 30 12:04:27 2015 +0200 @@ -28,7 +28,6 @@ import java.io.File; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.net.URL; import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; diff -r a3200b88f259 -r e4bc32cbffad src/java.xml/share/classes/org/w3c/dom/bootstrap/DOMImplementationRegistry.java --- a/src/java.xml/share/classes/org/w3c/dom/bootstrap/DOMImplementationRegistry.java Sun Jun 28 16:39:27 2015 -0700 +++ b/src/java.xml/share/classes/org/w3c/dom/bootstrap/DOMImplementationRegistry.java Tue Jun 30 12:04:27 2015 +0200 @@ -333,59 +333,36 @@ } /** - * A simple JRE (Java Runtime Environment) 1.1 test - * - * @return true if JRE 1.1 - */ - private static boolean isJRE11() { - try { - Class c = Class.forName("java.security.AccessController"); - // java.security.AccessController existed since 1.2 so, if no - // exception was thrown, the DOM application is running in a JRE - // 1.2 or higher - return false; - } catch (Exception ex) { - // ignore - } - return true; - } - - /** - * This method returns the ContextClassLoader or null if - * running in a JRE 1.1 + * This method returns the ContextClassLoader. * * @return The Context Classloader */ private static ClassLoader getContextClassLoader() { - return isJRE11() - ? null - : (ClassLoader) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - ClassLoader classLoader = null; - try { - classLoader = - Thread.currentThread().getContextClassLoader(); - } catch (SecurityException ex) { - } - return classLoader; + return AccessController.doPrivileged(new PrivilegedAction<>() { + @Override + public ClassLoader run() { + ClassLoader classLoader = null; + try { + classLoader = + Thread.currentThread().getContextClassLoader(); + } catch (SecurityException ex) { } - }); + return classLoader; + } + }); } /** * This method returns the system property indicated by the specified name - * after checking access control privileges. For a JRE 1.1, this check is - * not done. + * after checking access control privileges. * * @param name the name of the system property * @return the system property */ private static String getSystemProperty(final String name) { - return isJRE11() - ? (String) System.getProperty(name) - : (String) AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { + return AccessController.doPrivileged(new PrivilegedAction<>() { + @Override + public String run() { return System.getProperty(name); } }); @@ -394,7 +371,7 @@ /** * This method returns an Inputstream for the reading resource * META_INF/services/org.w3c.dom.DOMImplementationSourceList after checking - * access control privileges. For a JRE 1.1, this check is not done. + * access control privileges. * * @param classLoader classLoader * @param name the resource @@ -402,28 +379,18 @@ */ private static InputStream getResourceAsStream(final ClassLoader classLoader, final String name) { - if (isJRE11()) { - InputStream ris; - if (classLoader == null) { - ris = ClassLoader.getSystemResourceAsStream(name); - } else { - ris = classLoader.getResourceAsStream(name); - } - return ris; - } else { - return (InputStream) - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - InputStream ris; - if (classLoader == null) { - ris = - ClassLoader.getSystemResourceAsStream(name); - } else { - ris = classLoader.getResourceAsStream(name); - } - return ris; - } - }); - } + return AccessController.doPrivileged(new PrivilegedAction<>() { + @Override + public InputStream run() { + InputStream ris; + if (classLoader == null) { + ris = + ClassLoader.getSystemResourceAsStream(name); + } else { + ris = classLoader.getResourceAsStream(name); + } + return ris; + } + }); } }