8158246: Several api/org_xml/sax/helpers/XMLReader tests failed due to no SAXException occurs
authorjoehw
Thu, 02 Jun 2016 23:26:41 -0700
changeset 38817 fe8c4fe3a303
parent 38816 8d43a056de19
child 38818 57f451f8c235
8158246: Several api/org_xml/sax/helpers/XMLReader tests failed due to no SAXException occurs Reviewed-by: lancea
jaxp/src/java.xml/share/classes/org/xml/sax/helpers/NewInstance.java
jaxp/test/javax/xml/jaxp/unittest/sax/XMLReaderTest.java
--- a/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/NewInstance.java	Thu Jun 02 21:15:28 2016 +0000
+++ b/jaxp/src/java.xml/share/classes/org/xml/sax/helpers/NewInstance.java	Thu Jun 02 23:26:41 2016 -0700
@@ -56,8 +56,8 @@
  * @version 2.0.1 (sax2r2)
  */
 class NewInstance {
-
     private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+    private static final String DEFAULT_CLASS = "com.sun.org.apache.xerces.internal.parsers.SAXParser";
     /**
      * Creates a new instance of the specified class name
      *
@@ -70,11 +70,26 @@
         ClassLoader classLoader = Objects.requireNonNull(loader);
         String className = Objects.requireNonNull(clsName);
 
-        if (className.startsWith(DEFAULT_PACKAGE)) {
+        // Instantiate directly for the SAX default parser
+        if (className.equals(DEFAULT_CLASS)) {
             return type.cast(new com.sun.org.apache.xerces.internal.parsers.SAXParser());
         }
 
-        Class<?> driverClass = classLoader.loadClass(className);
+        // make sure we have access to restricted packages
+        boolean internal = false;
+        if (System.getSecurityManager() != null) {
+            if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
+                internal = true;
+            }
+        }
+
+        Class<?> driverClass;
+        if (classLoader == null || internal) {
+            driverClass = Class.forName(className);
+        } else {
+            driverClass = classLoader.loadClass(className);
+        }
+
         return type.cast(driverClass.newInstance());
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jaxp/test/javax/xml/jaxp/unittest/sax/XMLReaderTest.java	Thu Jun 02 23:26:41 2016 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sax;
+
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.XMLReaderAdapter;
+
+/*
+ * @bug 8158246
+ * @summary This class contains tests that cover the creation of XMLReader.
+ */
+public class XMLReaderTest {
+    private final String SAX_PROPNAME = "org.xml.sax.driver";
+
+    /*
+     * Clean up after test
+     */
+    @AfterClass
+    public void cleanUp() throws Exception {
+        System.clearProperty(SAX_PROPNAME);
+    }
+
+    /*
+     * @bug 8158246
+     * Verifies that SAXException is reported when the classname specified can
+     * not be found.
+     *
+     * Except test format, this test is the same as JCK's test Ctor003.
+     */
+    @Test(expectedExceptions = SAXException.class)
+    public void testcreateXMLReader() throws SAXException, ParserConfigurationException {
+        String className = SAXParserFactory.newInstance().newSAXParser()
+                            .getXMLReader().getClass().getName();
+        System.setProperty(SAX_PROPNAME, className + "nosuch");
+        XMLReaderAdapter adapter = new XMLReaderAdapter();
+    }
+}