8158246: Several api/org_xml/sax/helpers/XMLReader tests failed due to no SAXException occurs
Reviewed-by: lancea
--- 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();
+ }
+}