# HG changeset patch # User aefimov # Date 1517849161 0 # Node ID 9d02485a8af6b08d81fe07bf115e767588859621 # Parent abfbb18f6f3a51314cd298c6f72dde169aefeeee 8186080: Transform XML interfaces 8188880: A JAXB JCK test failure found after 8186080 Summary: Contains fSecureProcessing->fSecurityManager change from 8149915 Reviewed-by: joehw, lancea, dfuchs diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java --- a/src/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xalan/internal/lib/ExsltDynamic.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 1999-2004 The Apache Software Foundation. @@ -37,6 +36,7 @@ import com.sun.org.apache.xpath.internal.objects.XNodeSet; import com.sun.org.apache.xpath.internal.objects.XNumber; import com.sun.org.apache.xpath.internal.objects.XObject; +import jdk.xml.internal.JdkXmlUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -411,10 +411,7 @@ { if (lDoc == null) { - DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - dbf.setNamespaceAware(true); - DocumentBuilder db = dbf.newDocumentBuilder(); - lDoc = db.newDocument(); + lDoc = JdkXmlUtils.getDOMDocument(); } Element element = null; diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/lib/ExsltSets.java --- a/src/com/sun/org/apache/xalan/internal/lib/ExsltSets.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xalan/internal/lib/ExsltSets.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -22,7 +22,7 @@ */ package com.sun.org.apache.xalan.internal.lib; -import com.sun.org.apache.xml.internal.utils.DOMHelper; +import com.sun.org.apache.xml.internal.utils.DOM2Helper; import com.sun.org.apache.xpath.internal.NodeSet; import java.util.HashMap; import java.util.Map; @@ -72,8 +72,8 @@ for (int i = 0; i < nl1.getLength(); i++) { Node testNode = nl1.item(i); - if (DOMHelper.isNodeAfter(testNode, endNode) - && !DOMHelper.isNodeTheSame(testNode, endNode)) + if (DOM2Helper.isNodeAfter(testNode, endNode) + && !DOM2Helper.isNodeTheSame(testNode, endNode)) leadNodes.addElement(testNode); } return leadNodes; @@ -107,8 +107,8 @@ for (int i = 0; i < nl1.getLength(); i++) { Node testNode = nl1.item(i); - if (DOMHelper.isNodeAfter(startNode, testNode) - && !DOMHelper.isNodeTheSame(startNode, testNode)) + if (DOM2Helper.isNodeAfter(startNode, testNode) + && !DOM2Helper.isNodeTheSame(startNode, testNode)) trailNodes.addElement(testNode); } return trailNodes; diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java --- a/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xalan/internal/lib/ExsltStrings.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 1999-2004 The Apache Software Foundation. @@ -23,12 +22,8 @@ package com.sun.org.apache.xalan.internal.lib; import java.util.StringTokenizer; - -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.FactoryConfigurationError; -import javax.xml.parsers.ParserConfigurationException; - import com.sun.org.apache.xpath.internal.NodeSet; +import jdk.xml.internal.JdkXmlUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -52,7 +47,6 @@ */ public class ExsltStrings extends ExsltBase { - static final String JDK_DEFAULT_DOM = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"; /** * The str:align function aligns a string within another string. @@ -227,7 +221,7 @@ token = str.substring(fromIndex); } - Document doc = getDocument(); + Document doc = JdkXmlUtils.getDOMDocument(); synchronized (doc) { Element element = doc.createElement("token"); @@ -291,7 +285,7 @@ { StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims); - Document doc = getDocument(); + Document doc = JdkXmlUtils.getDOMDocument(); synchronized (doc) { while (lTokenizer.hasMoreTokens()) @@ -307,7 +301,7 @@ else { - Document doc = getDocument(); + Document doc = JdkXmlUtils.getDOMDocument(); synchronized (doc) { for (int i = 0; i < toTokenize.length(); i++) @@ -329,23 +323,4 @@ { return tokenize(toTokenize, " \t\n\r"); } - - /** - * @return an instance of DOM Document - */ - private static Document getDocument() - { - try - { - if (System.getSecurityManager() == null) { - return DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - } else { - return DocumentBuilderFactory.newInstance(JDK_DEFAULT_DOM, null).newDocumentBuilder().newDocument(); - } - } - catch(ParserConfigurationException pce) - { - throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(pce); - } - } } diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/lib/Extensions.java --- a/src/com/sun/org/apache/xalan/internal/lib/Extensions.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xalan/internal/lib/Extensions.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -32,8 +32,8 @@ import java.util.Hashtable; import java.util.Map; import java.util.StringTokenizer; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; +import jdk.xml.internal.JdkXmlUtils; + import org.w3c.dom.Document; import org.w3c.dom.DocumentFragment; import org.w3c.dom.Node; @@ -52,7 +52,6 @@ */ public class Extensions { - static final String JDK_DEFAULT_DOM = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"; /** * Constructor Extensions * @@ -111,7 +110,7 @@ // This no longer will work right since the DTM. // Document myDoc = myProcessor.getContextNode().getOwnerDocument(); - Document myDoc = getDocument(); + Document myDoc = JdkXmlUtils.getDOMDocument(); Text textNode = myDoc.createTextNode(textNodeValue); DocumentFragment docFrag = myDoc.createDocumentFragment(); @@ -237,7 +236,7 @@ public static NodeList tokenize(String toTokenize, String delims) { - Document doc = getDocument(); + Document doc = JdkXmlUtils.getDOMDocument(); StringTokenizer lTokenizer = new StringTokenizer(toTokenize, delims); NodeSet resultSet = new NodeSet(); @@ -271,118 +270,4 @@ 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 anExpressionContext
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();
- MapExpressionContext
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
- */
- private static Document getDocument()
- {
- try
- {
- if (System.getSecurityManager() == null) {
- return DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
- } else {
- return DocumentBuilderFactory.newInstance(JDK_DEFAULT_DOM, null).newDocumentBuilder().newDocument();
- }
- }
- catch(ParserConfigurationException pce)
- {
- throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(pce);
- }
- }
}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/utils/FactoryImpl.java
--- a/src/com/sun/org/apache/xalan/internal/utils/FactoryImpl.java Mon Feb 05 11:38:57 2018 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2011 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 com.sun.org.apache.xalan.internal.utils;
-
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.SAXParserFactory;
-
-/**
- *
- * @author huizhe wang
- */
-public class FactoryImpl {
-
- static final String DBF = "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl";
- static final String SF = "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl";
-
- static public DocumentBuilderFactory getDOMFactory(boolean useServicesMechanism) {
- DocumentBuilderFactory dbf =
- useServicesMechanism ?
- DocumentBuilderFactory.newInstance() :
- DocumentBuilderFactory.newInstance( DBF,
- FactoryImpl.class.getClassLoader());
-
- return dbf;
- }
- static public SAXParserFactory getSAXFactory(boolean useServicesMechanism) {
- SAXParserFactory factory =
- useServicesMechanism ?
- SAXParserFactory.newInstance() :
- SAXParserFactory.newInstance(SF,
- FactoryImpl.class.getClassLoader());
- return factory;
- }
-}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/utils/FeatureManager.java
--- a/src/com/sun/org/apache/xalan/internal/utils/FeatureManager.java Mon Feb 05 11:38:57 2018 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2011, 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. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * 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 com.sun.org.apache.xalan.internal.utils;
-
-
-import com.sun.org.apache.xalan.internal.XalanConstants;
-
-/**
- * This class manages security related properties
- *
- */
-public final class FeatureManager extends FeaturePropertyBase {
-
- /**
- * States of the settings of a property, in the order: default value, value
- * set by FEATURE_SECURE_PROCESSING, jaxp.properties file, jaxp system
- * properties, and jaxp api properties
- */
- public static enum State {
- //this order reflects the overriding order
- DEFAULT, FSP, JAXPDOTPROPERTIES, SYSTEMPROPERTY, APIPROPERTY
- }
-
- /**
- * Xalan Features
- */
- public static enum Feature {
- ORACLE_ENABLE_EXTENSION_FUNCTION(XalanConstants.ORACLE_ENABLE_EXTENSION_FUNCTION,
- "true");
-
- final String name;
- final String defaultValue;
-
- Feature(String name, String value) {
- this.name = name;
- this.defaultValue = value;
- }
-
- public boolean equalsName(String propertyName) {
- return (propertyName == null) ? false : name.equals(propertyName);
- }
-
- String defaultValue() {
- return defaultValue;
- }
- }
-
- /**
- * Default constructor. Establishes default values
- */
- public FeatureManager() {
- values = new String[Feature.values().length];
- for (Feature feature : Feature.values()) {
- values[feature.ordinal()] = feature.defaultValue();
- }
- //read system properties or jaxp.properties
- readSystemProperties();
- }
-
-
- /**
- * Check if the feature is enabled
- * @param feature name of the feature
- * @return true if enabled, false otherwise
- */
- public boolean isFeatureEnabled(Feature feature) {
- return Boolean.parseBoolean(values[feature.ordinal()]);
- }
-
- /**
- * Check if the feature is enabled
- * @param propertyName name of the feature
- * @return true if enabled, false otherwise
- */
- public boolean isFeatureEnabled(String propertyName) {
- return Boolean.parseBoolean(values[getIndex(propertyName)]);
- }
-
- /**
- * Get the index by property name
- * @param propertyName property name
- * @return the index of the property if found; return -1 if not
- */
- public int getIndex(String propertyName){
- for (Feature feature : Feature.values()) {
- if (feature.equalsName(propertyName)) {
- return feature.ordinal();
- }
- }
- return -1;
- }
-
- /**
- * Read from system properties, or those in jaxp.properties
- */
- private void readSystemProperties() {
- getSystemProperty(Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
- XalanConstants.SP_ORACLE_ENABLE_EXTENSION_FUNCTION);
- }
-
-}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/Translet.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/Translet.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/Translet.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
@@ -51,7 +50,7 @@
public String[] getUrisArray();
public int[] getTypesArray();
public String[] getNamespaceArray();
- public boolean useServicesMechnism();
- public void setServicesMechnism(boolean flag);
+ public boolean overrideDefaultParser();
+ public void setOverrideDefaultParser(boolean flag);
}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/cmdline/Compile.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
@@ -23,10 +22,10 @@
package com.sun.org.apache.xalan.internal.xsltc.cmdline;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import java.io.File;
import java.net.URL;
import java.util.Vector;
+import jdk.xml.internal.JdkXmlFeatures;
import com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.GetOpt;
import com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.GetOptsException;
@@ -78,7 +77,7 @@
final GetOpt getopt = new GetOpt(args, "o:d:j:p:uxhsinv");
if (args.length < 1) printUsage();
- final XSLTC xsltc = new XSLTC(true, new FeatureManager());
+ final XSLTC xsltc = new XSLTC(new JdkXmlFeatures(false));
xsltc.init();
int c;
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/compiler/FunctionCall.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -35,7 +35,6 @@
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.sun.org.apache.bcel.internal.generic.PUSH;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import com.sun.org.apache.xalan.internal.utils.Objects;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.BooleanType;
@@ -57,6 +56,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
+import jdk.xml.internal.JdkXmlFeatures;
/**
* @author Jacek Ambroziak
@@ -743,7 +743,7 @@
final InstructionList il = methodGen.getInstructionList();
final boolean isSecureProcessing = classGen.getParser().getXSLTC().isSecureProcessing();
final boolean isExtensionFunctionEnabled = classGen.getParser().getXSLTC()
- .getFeature(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION);
+ .getFeature(JdkXmlFeatures.XmlFeature.ENABLE_EXTENSION_FUNCTION);
int index;
// Translate calls to methods in the BasisLibrary
@@ -927,7 +927,7 @@
if (_clazz == null) {
final boolean isSecureProcessing = getXSLTC().isSecureProcessing();
final boolean isExtensionFunctionEnabled = getXSLTC()
- .getFeature(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION);
+ .getFeature(JdkXmlFeatures.XmlFeature.ENABLE_EXTENSION_FUNCTION);
//Check if FSP and SM - only then proceed with loading
if (namespace != null && isSecureProcessing
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,7 +25,6 @@
import com.sun.java_cup.internal.runtime.Symbol;
import com.sun.org.apache.xalan.internal.XalanConstants;
-import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
@@ -46,16 +45,12 @@
import java.util.StringTokenizer;
import java.util.Vector;
import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
+import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.AttributesImpl;
@@ -99,11 +94,11 @@
private int _currentImportPrecedence;
- private boolean _useServicesMechanism = true;
+ private boolean _overrideDefaultParser;
- public Parser(XSLTC xsltc, boolean useServicesMechanism) {
+ public Parser(XSLTC xsltc, boolean useOverrideDefaultParser) {
_xsltc = xsltc;
- _useServicesMechanism = useServicesMechanism;
+ _overrideDefaultParser = useOverrideDefaultParser;
}
public void init() {
@@ -461,63 +456,29 @@
* @return The root of the abstract syntax tree
*/
public SyntaxTreeNode parse(InputSource input) {
- try {
- // Create a SAX parser and get the XMLReader object it uses
- final SAXParserFactory factory = FactoryImpl.getSAXFactory(_useServicesMechanism);
-
- if (_xsltc.isSecureProcessing()) {
- try {
- factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
- }
- catch (SAXException e) {}
- }
+ final XMLReader reader = JdkXmlUtils.getXMLReader(_overrideDefaultParser,
+ _xsltc.isSecureProcessing());
- try {
- factory.setFeature(Constants.NAMESPACE_FEATURE,true);
- }
- catch (Exception e) {
- factory.setNamespaceAware(true);
- }
- final SAXParser parser = factory.newSAXParser();
- try {
- parser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD,
- _xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_DTD));
- } catch (SAXNotRecognizedException e) {
- ErrorMsg err = new ErrorMsg(ErrorMsg.WARNING_MSG,
- parser.getClass().getName() + ": " + e.getMessage());
- reportError(WARNING, err);
- }
+ JdkXmlUtils.setXMLReaderPropertyIfSupport(reader, XMLConstants.ACCESS_EXTERNAL_DTD,
+ _xsltc.getProperty(XMLConstants.ACCESS_EXTERNAL_DTD), true);
- final XMLReader reader = parser.getXMLReader();
- String lastProperty = "";
- try {
- XMLSecurityManager securityManager =
- (XMLSecurityManager)_xsltc.getProperty(XalanConstants.SECURITY_MANAGER);
- for (XMLSecurityManager.Limit limit : XMLSecurityManager.Limit.values()) {
- lastProperty = limit.apiProperty();
- reader.setProperty(lastProperty, securityManager.getLimitValueAsString(limit));
- }
- if (securityManager.printEntityCountInfo()) {
- lastProperty = XalanConstants.JDK_ENTITY_COUNT_INFO;
- parser.setProperty(XalanConstants.JDK_ENTITY_COUNT_INFO, XalanConstants.JDK_YES);
- }
- } catch (SAXException se) {
- XMLSecurityManager.printWarning(reader.getClass().getName(), lastProperty, se);
+ String lastProperty = "";
+ try {
+ XMLSecurityManager securityManager =
+ (XMLSecurityManager) _xsltc.getProperty(XalanConstants.SECURITY_MANAGER);
+ for (XMLSecurityManager.Limit limit : XMLSecurityManager.Limit.values()) {
+ lastProperty = limit.apiProperty();
+ reader.setProperty(lastProperty, securityManager.getLimitValueAsString(limit));
}
-
- return(parse(reader, input));
- }
- catch (ParserConfigurationException e) {
- ErrorMsg err = new ErrorMsg(ErrorMsg.SAX_PARSER_CONFIG_ERR);
- reportError(ERROR, err);
+ if (securityManager.printEntityCountInfo()) {
+ lastProperty = XalanConstants.JDK_ENTITY_COUNT_INFO;
+ reader.setProperty(XalanConstants.JDK_ENTITY_COUNT_INFO, XalanConstants.JDK_YES);
+ }
+ } catch (SAXException se) {
+ XMLSecurityManager.printWarning(reader.getClass().getName(), lastProperty, se);
}
- catch (SAXParseException e){
- reportError(ERROR, new ErrorMsg(e.getMessage(),e.getLineNumber()));
- }
- catch (SAXException e) {
- reportError(ERROR, new ErrorMsg(e.getMessage()));
- }
- return null;
+
+ return (parse(reader, input));
}
public SyntaxTreeNode getDocumentRoot() {
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,8 +25,6 @@
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.xalan.internal.XalanConstants;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager.Feature;
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
@@ -50,6 +48,7 @@
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import javax.xml.XMLConstants;
+import jdk.xml.internal.JdkXmlFeatures;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
@@ -136,7 +135,7 @@
*/
private boolean _isSecureProcessing = false;
- private boolean _useServicesMechanism = true;
+ private boolean _overrideDefaultParser;
/**
* protocols allowed for external references set by the stylesheet processing instruction, Import and Include element.
@@ -149,7 +148,7 @@
private XMLSecurityManager _xmlSecurityManager;
- private final FeatureManager _featureManager;
+ private final JdkXmlFeatures _xmlFeatures;
/**
* Extension function class loader variables
@@ -166,9 +165,11 @@
/**
* XSLTC compiler constructor
*/
- public XSLTC(boolean useServicesMechanism, FeatureManager featureManager) {
- _parser = new Parser(this, useServicesMechanism);
- _featureManager = featureManager;
+ public XSLTC(JdkXmlFeatures featureManager) {
+ _overrideDefaultParser = featureManager.getFeature(
+ JdkXmlFeatures.XmlFeature.JDK_OVERRIDE_PARSER);
+ _parser = new Parser(this, _overrideDefaultParser);
+ _xmlFeatures = featureManager;
_extensionClassLoader = null;
_externalExtensionFunctions = new HashMap<>();
}
@@ -186,27 +187,14 @@
public boolean isSecureProcessing() {
return _isSecureProcessing;
}
- /**
- * Return the state of the services mechanism feature.
- */
- public boolean useServicesMechnism() {
- return _useServicesMechanism;
- }
-
- /**
- * Set the state of the services mechanism feature.
- */
- public void setServicesMechnism(boolean flag) {
- _useServicesMechanism = flag;
- }
/**
* Return the value of the specified feature
* @param name name of the feature
* @return true if the feature is enabled, false otherwise
*/
- public boolean getFeature(Feature name) {
- return _featureManager.isFeatureEnabled(name);
+ public boolean getFeature(JdkXmlFeatures.XmlFeature name) {
+ return _xmlFeatures.getFeature(name);
}
/**
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/runtime/AbstractTranslet.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -25,7 +25,6 @@
package com.sun.org.apache.xalan.internal.xsltc.runtime;
import com.sun.org.apache.xalan.internal.XalanConstants;
-import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.DOMCache;
import com.sun.org.apache.xalan.internal.xsltc.DOMEnhancedForDTM;
@@ -49,6 +48,7 @@
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Templates;
+import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
@@ -109,7 +109,7 @@
// This is the name of the index used for ID attributes
private final static String ID_INDEX_NAME = "##id";
- private boolean _useServicesMechanism;
+ private boolean _overrideDefaultParser;
/**
* protocols allowed for external references set by the stylesheet processing instruction, Document() function, Import and Include element.
@@ -559,7 +559,7 @@
{
try {
final TransletOutputHandlerFactory factory
- = TransletOutputHandlerFactory.newInstance();
+ = TransletOutputHandlerFactory.newInstance(_overrideDefaultParser);
String dirStr = new File(filename).getParent();
if ((null != dirStr) && (dirStr.length() > 0)) {
@@ -756,15 +756,15 @@
/**
* Return the state of the services mechanism feature.
*/
- public boolean useServicesMechnism() {
- return _useServicesMechanism;
+ public boolean overrideDefaultParser() {
+ return _overrideDefaultParser;
}
/**
* Set the state of the services mechanism feature.
*/
- public void setServicesMechnism(boolean flag) {
- _useServicesMechanism = flag;
+ public void setOverrideDefaultParser(boolean flag) {
+ _overrideDefaultParser = flag;
}
/**
@@ -790,7 +790,7 @@
throws ParserConfigurationException
{
if (_domImplementation == null) {
- DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(_useServicesMechanism);
+ DocumentBuilderFactory dbf = JdkXmlUtils.getDOMFactory(_overrideDefaultParser);
_domImplementation = dbf.newDocumentBuilder().getDOMImplementation();
}
return _domImplementation.createDocument(uri, qname, null);
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/TransletOutputHandlerFactory.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
@@ -72,17 +71,17 @@
private ContentHandler _handler = null;
private LexicalHandler _lexHandler = null;
- private boolean _useServicesMechanism;
+ private boolean _overrideDefaultParser;
static public TransletOutputHandlerFactory newInstance() {
return new TransletOutputHandlerFactory(true);
}
- static public TransletOutputHandlerFactory newInstance(boolean useServicesMechanism) {
- return new TransletOutputHandlerFactory(useServicesMechanism);
+ static public TransletOutputHandlerFactory newInstance(boolean overrideDefaultParser) {
+ return new TransletOutputHandlerFactory(overrideDefaultParser);
}
- public TransletOutputHandlerFactory(boolean useServicesMechanism) {
- _useServicesMechanism = useServicesMechanism;
+ public TransletOutputHandlerFactory(boolean overrideDefaultParser) {
+ _overrideDefaultParser = overrideDefaultParser;
}
public void setOutputType(int outputType) {
_outputType = outputType;
@@ -196,7 +195,9 @@
return result;
case DOM :
- _handler = (_node != null) ? new SAX2DOM(_node, _nextSibling, _useServicesMechanism) : new SAX2DOM(_useServicesMechanism);
+ _handler = (_node != null) ?
+ new SAX2DOM(_node, _nextSibling, _overrideDefaultParser) :
+ new SAX2DOM(_overrideDefaultParser);
_lexHandler = (LexicalHandler) _handler;
// falls through
case STAX :
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2DOM.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
@@ -26,18 +25,17 @@
import java.util.Stack;
import java.util.Vector;
-import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.Constants;
+import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.Comment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-import org.w3c.dom.Text;
import org.w3c.dom.ProcessingInstruction;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
@@ -70,16 +68,16 @@
* synchronization because the Javadoc is not explicit about
* thread safety.
*/
- private DocumentBuilderFactory _factory =
- DocumentBuilderFactory.newInstance();
+ private DocumentBuilderFactory _factory;
private boolean _internal = true;
- public SAX2DOM(boolean useServicesMachnism) throws ParserConfigurationException {
- _document = createDocument(useServicesMachnism);
+ public SAX2DOM(boolean overrideDefaultParser) throws ParserConfigurationException {
+ _document = createDocument(overrideDefaultParser);
_root = _document;
}
- public SAX2DOM(Node root, Node nextSibling, boolean useServicesMachnism) throws ParserConfigurationException {
+ public SAX2DOM(Node root, Node nextSibling, boolean overrideDefaultParser)
+ throws ParserConfigurationException {
_root = root;
if (root instanceof Document) {
_document = (Document)root;
@@ -88,15 +86,16 @@
_document = root.getOwnerDocument();
}
else {
- _document = createDocument(useServicesMachnism);
+ _document = createDocument(overrideDefaultParser);
_root = _document;
}
_nextSibling = nextSibling;
}
- public SAX2DOM(Node root, boolean useServicesMachnism) throws ParserConfigurationException {
- this(root, null, useServicesMachnism);
+ public SAX2DOM(Node root, boolean overrideDefaultParser)
+ throws ParserConfigurationException {
+ this(root, null, overrideDefaultParser);
}
public Node getDOM() {
@@ -308,18 +307,14 @@
public void startDTD(String name, String publicId, String systemId)
throws SAXException {}
- private Document createDocument(boolean useServicesMachnism) throws ParserConfigurationException {
+ private Document createDocument(boolean overrideDefaultParser)
+ throws ParserConfigurationException {
if (_factory == null) {
- if (useServicesMachnism)
- _factory = DocumentBuilderFactory.newInstance();
- if (!(_factory instanceof com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl)) {
- _internal = false;
- }
- else
- _factory = DocumentBuilderFactory.newInstance(
- "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl",
- SAX2DOM.class.getClassLoader()
- );
+ _factory = JdkXmlUtils.getDOMFactory(overrideDefaultParser);
+ _internal = true;
+ if (!(_factory instanceof com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl)) {
+ _internal = false;
+ }
}
Document doc;
if (_internal) {
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesHandlerImpl.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,3 +1,6 @@
+/*
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
+ */
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
@@ -95,7 +98,7 @@
_tfactory = tfactory;
// Instantiate XSLTC and get reference to parser object
- XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism(), tfactory.getFeatureManager());
+ XSLTC xsltc = new XSLTC(tfactory.getJdkXmlFeatures());
if (tfactory.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING))
xsltc.setSecureProcessing(true);
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -125,9 +125,9 @@
private transient TransformerFactoryImpl _tfactory = null;
/**
- * A flag to determine whether the Service Mechanism is used
+ * A flag to determine whether the system-default parser may be overridden
*/
- private transient boolean _useServicesMechanism;
+ private transient boolean _overrideDefaultParser;
/**
* protocols allowed for external references set by the stylesheet processing instruction, Import and Include element.
@@ -219,7 +219,7 @@
_outputProperties = outputProperties;
_indentNumber = indentNumber;
_tfactory = tfactory;
- _useServicesMechanism = tfactory.useServicesMechnism();
+ _overrideDefaultParser = tfactory.overrideDefaultParser();
_accessExternalStylesheet = (String) tfactory.getAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET);
}
/**
@@ -302,8 +302,8 @@
/**
* Return the state of the services mechanism feature.
*/
- public boolean useServicesMechnism() {
- return _useServicesMechanism;
+ public boolean overrideDefaultParser() {
+ return _overrideDefaultParser;
}
/**
@@ -455,7 +455,7 @@
AbstractTranslet translet = (AbstractTranslet) _class[_transletIndex].newInstance();
translet.postInitialization();
translet.setTemplates(this);
- translet.setServicesMechnism(_useServicesMechanism);
+ translet.setOverrideDefaultParser(_overrideDefaultParser);
translet.setAllowedProtocols(_accessExternalStylesheet);
if (_auxClasses != null) {
translet.setAuxiliaryClasses(_auxClasses);
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/trax/TrAXFilter.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
@@ -26,11 +25,6 @@
import java.io.IOException;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.ErrorListener;
import javax.xml.transform.Templates;
import javax.xml.transform.Transformer;
@@ -38,13 +32,13 @@
import javax.xml.transform.sax.SAXResult;
import com.sun.org.apache.xml.internal.utils.XMLReaderManager;
+import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLFilterImpl;
-import org.xml.sax.helpers.XMLReaderFactory;
/**
* skeleton extension of XMLFilterImpl for now.
@@ -55,7 +49,7 @@
private Templates _templates;
private TransformerImpl _transformer;
private TransformerHandlerImpl _transformerHandler;
- private boolean _useServicesMechanism = true;
+ private boolean _overrideDefaultParser;
public TrAXFilter(Templates templates) throws
TransformerConfigurationException
@@ -63,7 +57,7 @@
_templates = templates;
_transformer = (TransformerImpl) templates.newTransformer();
_transformerHandler = new TransformerHandlerImpl(_transformer);
- _useServicesMechanism = _transformer.useServicesMechnism();
+ _overrideDefaultParser = _transformer.overrideDefaultParser();
}
public Transformer getTransformer() {
@@ -71,36 +65,14 @@
}
private void createParent() throws SAXException {
- XMLReader parent = null;
- try {
- SAXParserFactory pfactory = SAXParserFactory.newInstance();
- pfactory.setNamespaceAware(true);
-
- if (_transformer.isSecureProcessing()) {
- try {
- pfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
- }
- catch (SAXException e) {}
- }
-
- SAXParser saxparser = pfactory.newSAXParser();
- parent = saxparser.getXMLReader();
- }
- catch (ParserConfigurationException e) {
- throw new SAXException(e);
- }
- catch (FactoryConfigurationError e) {
- throw new SAXException(e.toString());
- }
-
- if (parent == null) {
- parent = XMLReaderFactory.createXMLReader();
- }
+ XMLReader parent = JdkXmlUtils.getXMLReader(_overrideDefaultParser,
+ _transformer.isSecureProcessing());
// make this XMLReader the parent of this filter
setParent(parent);
}
+ @Override
public void parse (InputSource input) throws SAXException, IOException
{
XMLReader managedReader = null;
@@ -108,7 +80,7 @@
try {
if (getParent() == null) {
try {
- managedReader = XMLReaderManager.getInstance(_useServicesMechanism)
+ managedReader = XMLReaderManager.getInstance(_overrideDefaultParser)
.getXMLReader();
setParent(managedReader);
} catch (SAXException e) {
@@ -120,7 +92,7 @@
getParent().parse(input);
} finally {
if (managedReader != null) {
- XMLReaderManager.getInstance(_useServicesMechanism).releaseXMLReader(managedReader);
+ XMLReaderManager.getInstance(_overrideDefaultParser).releaseXMLReader(managedReader);
}
}
}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
--- a/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -24,9 +24,6 @@
package com.sun.org.apache.xalan.internal.xsltc.trax;
import com.sun.org.apache.xalan.internal.XalanConstants;
-import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager;
-import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase;
import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase.State;
import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
@@ -55,15 +52,12 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.xml.XMLConstants;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
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.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
@@ -76,13 +70,14 @@
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import jdk.xml.internal.JdkXmlFeatures;
+import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.InputSource;
import org.xml.sax.XMLFilter;
import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.XMLReaderFactory;
/**
- * Implementation of a JAXP1.1 TransformerFactory for Translets.
+ * Implementation of a JAXP TransformerFactory for Translets.
* @author G. Todd Miller
* @author Morten Jorgensen
* @author Santiago Pericas-Geertsen
@@ -219,11 +214,11 @@
private boolean _isSecureMode = false;
/**
- * Indicates whether implementation parts should use
- * service loader (or similar).
- * Note the default value (false) is the safe option..
+ * Indicates whether 3rd party parser may be used to override the system-default
+ * Note the default value (false) is the safe option.
+ * Note same as the old property useServicesMechanism
*/
- private boolean _useServicesMechanism;
+ private boolean _overrideDefaultParser;
/**
* protocols allowed for external references set by the stylesheet processing instruction, Import and Include element.
@@ -237,7 +232,7 @@
private XMLSecurityPropertyManager _xmlSecurityPropertyMgr;
private XMLSecurityManager _xmlSecurityManager;
- private final FeatureManager _featureManager;
+ private final JdkXmlFeatures _xmlFeatures;
private ClassLoader _extensionClassLoader = null;
@@ -250,25 +245,15 @@
* javax.xml.transform.sax.TransformerFactory implementation.
*/
public TransformerFactoryImpl() {
- this(true);
- }
-
- public static TransformerFactory newTransformerFactoryNoServiceLoader() {
- return new TransformerFactoryImpl(false);
- }
-
- private TransformerFactoryImpl(boolean useServicesMechanism) {
- this.m_DTMManagerClass = XSLTCDTMManager.getDTMManagerClass(useServicesMechanism);
- this._useServicesMechanism = useServicesMechanism;
- _featureManager = new FeatureManager();
if (System.getSecurityManager() != null) {
_isSecureMode = true;
_isNotSecureProcessing = false;
- _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
- FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
}
+ _xmlFeatures = new JdkXmlFeatures(!_isNotSecureProcessing);
+ _overrideDefaultParser = _xmlFeatures.getFeature(
+ JdkXmlFeatures.XmlFeature.JDK_OVERRIDE_PARSER);
_xmlSecurityPropertyMgr = new XMLSecurityPropertyManager();
_accessExternalDTD = _xmlSecurityPropertyMgr.getValue(
Property.ACCESS_EXTERNAL_DTD);
@@ -279,6 +264,8 @@
_xmlSecurityManager = new XMLSecurityManager(true);
//Unmodifiable hash map with loaded external extension functions
_xsltcExtensionFunctions = null;
+
+ this.m_DTMManagerClass = XSLTCDTMManager.getDTMManagerClass(_overrideDefaultParser);
}
public MapConstructs an SchemaContentHandler.
@@ -102,6 +104,7 @@ */ public void startDocument() throws SAXException { fNeedPushNSContext = true; + fNamespaceContext.reset(); try { fSchemaDOMParser.startDocument(fSAXLocatorWrapper, null, fNamespaceContext, null); } @@ -325,7 +328,11 @@ if (nsPrefix.length() > 0) { prefix = XMLSymbols.PREFIX_XMLNS; localpart = nsPrefix; - rawname = fSymbolTable.addSymbol(prefix + ":" + localpart); + fStringBuffer.clear(); + fStringBuffer.append(prefix); + fStringBuffer.append(':'); + fStringBuffer.append(localpart); + rawname = fSymbolTable.addSymbol(fStringBuffer.ch, fStringBuffer.offset, fStringBuffer.length); } else { prefix = XMLSymbols.EMPTY_STRING; @@ -333,7 +340,8 @@ rawname = XMLSymbols.PREFIX_XMLNS; } fAttributeQName.setValues(prefix, localpart, rawname, NamespaceContext.XMLNS_URI); - fAttributes.addAttribute(fAttributeQName, XMLSymbols.fCDATASymbol, nsURI); + fAttributes.addAttribute(fAttributeQName, XMLSymbols.fCDATASymbol, + (nsURI != null) ? nsURI : XMLSymbols.EMPTY_STRING); } } diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java --- a/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSAttributeChecker.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -1172,7 +1172,7 @@ if (max != SchemaSymbols.OCCURRENCE_UNBOUNDED) { // maxOccurLimit is only check in secure mode - if (fSchemaHandler.fSecureProcessing != null) { + if (fSchemaHandler.fSecurityManager != null) { String localName = element.getLocalName(); // The maxOccurs restriction no longer applies to elements @@ -1191,8 +1191,8 @@ if (!optimize) { //Revisit :: IMO this is not right place to check // maxOccurNodeLimit. - int maxOccurNodeLimit = fSchemaHandler.fSecureProcessing.getLimit(XMLSecurityManager.Limit.MAX_OCCUR_NODE_LIMIT); - if (max > maxOccurNodeLimit && !fSchemaHandler.fSecureProcessing.isNoLimit(maxOccurNodeLimit)) { + int maxOccurNodeLimit = fSchemaHandler.fSecurityManager.getLimit(XMLSecurityManager.Limit.MAX_OCCUR_NODE_LIMIT); + if (max > maxOccurNodeLimit && !fSchemaHandler.fSecurityManager.isNoLimit(maxOccurNodeLimit)) { reportSchemaFatalError("MaxOccurLimit", new Object[] {new Integer(maxOccurNodeLimit)}, element); // reset max values in case processing continues on error diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java --- a/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/impl/xs/traversers/XSDHandler.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -105,6 +105,7 @@ import javax.xml.stream.XMLEventReader; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; +import jdk.xml.internal.JdkXmlUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -113,7 +114,6 @@ import org.xml.sax.SAXNotRecognizedException; import org.xml.sax.SAXParseException; import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; /** * The purpose of this class is to co-ordinate the construction of a @@ -195,6 +195,7 @@ /** Property identifier: entity resolver. */ public static final String ENTITY_RESOLVER = Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY; + /** Property identifier: entity manager. */ protected static final String ENTITY_MANAGER = Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY; @@ -215,9 +216,6 @@ protected static final String SECURITY_MANAGER = Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY; - private static final String SECURE_PROCESSING = - Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY; - /** Property identifier: locale. */ protected static final String LOCALE = Constants.XERCES_PROPERTY_PREFIX + Constants.LOCALE_PROPERTY; @@ -249,12 +247,8 @@ protected XSDeclarationPool fDeclPool = null; - /** - *Security manager in effect.
- * - *Protected to allow access by any traverser.
- */ - protected XMLSecurityManager fSecureProcessing = null; + // the Security manager in effect. + protected XMLSecurityManager fSecurityManager = null; private String fAccessExternalSchema; private String fAccessExternalDTD; @@ -405,6 +399,8 @@ // the Grammar Pool private XMLGrammarPool fGrammarPool; + private boolean fOverrideDefaultParser; + //************ Traversers ********** XSDAttributeGroupTraverser fAttributeGroupTraverser; XSDAttributeTraverser fAttributeTraverser; @@ -2210,7 +2206,8 @@ XSDKey key = null; String schemaId = null; if (referType != XSDDescription.CONTEXT_PREPARSE) { - schemaId = XMLEntityManager.expandSystemId(inputSource.getSystemId(), schemaSource.getBaseSystemId(), false); + schemaId = XMLEntityManager.expandSystemId(inputSource.getSystemId(), + schemaSource.getBaseSystemId(), false); key = new XSDKey(schemaId, referType, schemaNamespace); if ((schemaElement = (Element) fTraversed.get(key)) != null) { fLastSchemaWasDuplicate = true; @@ -2226,14 +2223,9 @@ catch (SAXException se) {} } else { - try { - parser = XMLReaderFactory.createXMLReader(); - } - // If something went wrong with the factory - // just use our own SAX parser. - catch (SAXException se) { - parser = new SAXParser(); - } + parser = JdkXmlUtils.getXMLReader(fOverrideDefaultParser, + fSecurityManager.isSecureProcessing()); + try { parser.setFeature(NAMESPACE_PREFIXES, true); namespacePrefixes = true; @@ -3503,13 +3495,12 @@ // set symbol table fSymbolTable = (SymbolTable) componentManager.getProperty(SYMBOL_TABLE); - fSecureProcessing = null; - if( componentManager!=null ) { - fSecureProcessing = (XMLSecurityManager) componentManager.getProperty(SECURE_PROCESSING, null); - } - + // set security manager + fSecurityManager = (XMLSecurityManager) componentManager.getProperty(SECURITY_MANAGER, null); + + //set entity manager + fEntityResolver = (XMLEntityResolver) componentManager.getProperty(ENTITY_MANAGER); //set entity resolver - fEntityResolver = (XMLEntityResolver) componentManager.getProperty(ENTITY_MANAGER); XMLEntityResolver er = (XMLEntityResolver)componentManager.getProperty(ENTITY_RESOLVER); if (er != null) fSchemaParser.setEntityResolver(er); @@ -3594,7 +3585,8 @@ fAccessExternalSchema = securityPropertyMgr.getValue( XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA); - + fOverrideDefaultParser = componentManager.getFeature(JdkXmlUtils.OVERRIDE_PARSER); + fSchemaParser.setFeature(JdkXmlUtils.OVERRIDE_PARSER, fOverrideDefaultParser); } // reset(XMLComponentManager) diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java --- a/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/jaxp/validation/DOMValidatorHelper.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2005 The Apache Software Foundation. @@ -47,6 +46,7 @@ import com.sun.org.apache.xerces.internal.xni.XMLString; import com.sun.org.apache.xerces.internal.xni.XNIException; import com.sun.org.apache.xerces.internal.xni.parser.XMLParseException; +import jdk.xml.internal.JdkXmlUtils; import org.w3c.dom.Attr; import org.w3c.dom.CDATASection; import org.w3c.dom.Comment; @@ -382,9 +382,8 @@ } if (result.getNode() == null) { try { - DocumentBuilderFactory factory = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ? - DocumentBuilderFactory.newInstance() : new DocumentBuilderFactoryImpl(); - factory.setNamespaceAware(true); + DocumentBuilderFactory factory = JdkXmlUtils.getDOMFactory( + fComponentManager.getFeature(JdkXmlUtils.OVERRIDE_PARSER)); DocumentBuilder builder = factory.newDocumentBuilder(); result.setNode(builder.newDocument()); } diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java --- a/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/jaxp/validation/StAXValidatorHelper.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, 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 @@ -25,6 +25,7 @@ package com.sun.org.apache.xerces.internal.jaxp.validation; +import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl; import com.sun.org.apache.xerces.internal.impl.Constants; import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager; import java.io.IOException; @@ -41,6 +42,7 @@ import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stax.StAXResult; import javax.xml.transform.stax.StAXSource; +import jdk.xml.internal.JdkXmlUtils; import org.xml.sax.SAXException; @@ -50,7 +52,6 @@ * @author Sunitha Reddy */ public final class StAXValidatorHelper implements ValidatorHelper { - private static final String DEFAULT_TRANSFORMER_IMPL = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"; /** Component manager. **/ private XMLSchemaValidatorComponentManager fComponentManager; @@ -71,10 +72,11 @@ if( identityTransformer1==null ) { try { - SAXTransformerFactory tf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ? - (SAXTransformerFactory)SAXTransformerFactory.newInstance() - : (SAXTransformerFactory) TransformerFactory.newInstance(DEFAULT_TRANSFORMER_IMPL, StAXValidatorHelper.class.getClassLoader()); - XMLSecurityManager securityManager = (XMLSecurityManager)fComponentManager.getProperty(Constants.SECURITY_MANAGER); + SAXTransformerFactory tf = JdkXmlUtils.getSAXTransformFactory( + fComponentManager.getFeature(JdkXmlUtils.OVERRIDE_PARSER)); + + XMLSecurityManager securityManager = + (XMLSecurityManager)fComponentManager.getProperty(Constants.SECURITY_MANAGER); if (securityManager != null) { for (XMLSecurityManager.Limit limit : XMLSecurityManager.Limit.values()) { if (securityManager.isSet(limit.ordinal())){ diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java --- a/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/jaxp/validation/StreamValidatorHelper.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2005 The Apache Software Foundation. @@ -35,12 +34,12 @@ import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; +import jdk.xml.internal.JdkXmlUtils; import org.xml.sax.SAXException; /** @@ -84,8 +83,6 @@ private static final String VALIDATION_MANAGER = Constants.XERCES_PROPERTY_PREFIX + Constants.VALIDATION_MANAGER_PROPERTY; - private static final String DEFAULT_TRANSFORMER_IMPL = "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"; - /** Property id: security manager. */ private static final String SECURITY_MANAGER = Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY; @@ -118,9 +115,9 @@ if( result!=null ) { try { - SAXTransformerFactory tf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ? - (SAXTransformerFactory)SAXTransformerFactory.newInstance() - : (SAXTransformerFactory) TransformerFactory.newInstance(DEFAULT_TRANSFORMER_IMPL, StreamValidatorHelper.class.getClassLoader()); + SAXTransformerFactory tf = JdkXmlUtils.getSAXTransformFactory( + fComponentManager.getFeature(JdkXmlUtils.OVERRIDE_PARSER)); + identityTransformerHandler = tf.newTransformerHandler(); } catch (TransformerConfigurationException e) { throw new TransformerFactoryConfigurationError(e); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java --- a/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/jaxp/validation/ValidatorHandlerImpl.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2005 The Apache Software Foundation. @@ -28,13 +27,13 @@ import javax.xml.XMLConstants; import javax.xml.parsers.FactoryConfigurationError; -import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.sax.SAXSource; import javax.xml.validation.TypeInfoProvider; import javax.xml.validation.ValidatorHandler; +import jdk.xml.internal.JdkXmlUtils; import com.sun.org.apache.xerces.internal.impl.Constants; import com.sun.org.apache.xerces.internal.impl.XMLEntityManager; @@ -43,7 +42,6 @@ import com.sun.org.apache.xerces.internal.impl.validation.EntityState; import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager; import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator; -import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import com.sun.org.apache.xerces.internal.util.AttributesProxy; import com.sun.org.apache.xerces.internal.util.SAXLocatorWrapper; import com.sun.org.apache.xerces.internal.util.SAXMessageFormatter; @@ -675,16 +673,14 @@ XMLReader reader = saxSource.getXMLReader(); if( reader==null ) { // create one now - SAXParserFactory spf = fComponentManager.getFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM) ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(true); + reader = JdkXmlUtils.getXMLReader(fComponentManager.getFeature(JdkXmlUtils.OVERRIDE_PARSER), + fComponentManager.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING)); + try { - spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, - fComponentManager.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING)); - reader = spf.newSAXParser().getXMLReader(); // If this is a Xerces SAX parser, set the security manager if there is one if (reader instanceof com.sun.org.apache.xerces.internal.parsers.SAXParser) { - XMLSecurityManager securityManager = (XMLSecurityManager) fComponentManager.getProperty(SECURITY_MANAGER); + XMLSecurityManager securityManager = + (XMLSecurityManager) fComponentManager.getProperty(SECURITY_MANAGER); if (securityManager != null) { try { reader.setProperty(SECURITY_MANAGER, securityManager); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java --- a/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2005 The Apache Software Foundation. @@ -33,6 +32,8 @@ import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; +import jdk.xml.internal.JdkXmlFeatures; +import jdk.xml.internal.JdkXmlUtils; import com.sun.org.apache.xerces.internal.impl.Constants; import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader; @@ -115,20 +116,14 @@ /** The container for the real grammar pool. */ private XMLGrammarPoolWrapper fXMLGrammarPoolWrapper; + private final JdkXmlFeatures fXmlFeatures; /** - * Indicates whether implementation parts should use - * service loader (or similar). - * Note the default value (false) is the safe option.. + * Indicates whether 3rd party parser may be used to override the system-default + * Note the default value (false) is the safe option. + * Note same as the old property useServicesMechanism */ - private final boolean fUseServicesMechanism; + private final boolean fOverrideDefaultParser; public XMLSchemaFactory() { - this(true); - } - public static XMLSchemaFactory newXMLSchemaFactoryNoServiceLoader() { - return new XMLSchemaFactory(false); - } - private XMLSchemaFactory(boolean useServicesMechanism) { - fUseServicesMechanism = useServicesMechanism; fErrorHandlerWrapper = new ErrorHandlerWrapper(DraconianErrorHandler.getInstance()); fDOMEntityResolverWrapper = new DOMEntityResolverWrapper(); fXMLGrammarPoolWrapper = new XMLGrammarPoolWrapper(); @@ -144,6 +139,10 @@ fSecurityPropertyMgr = new XMLSecurityPropertyManager(); fXMLSchemaLoader.setProperty(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr); + fXmlFeatures = new JdkXmlFeatures(fSecurityManager.isSecureProcessing()); + fOverrideDefaultParser = fXmlFeatures.getFeature( + JdkXmlFeatures.XmlFeature.JDK_OVERRIDE_PARSER); + fXMLSchemaLoader.setFeature(JdkXmlUtils.OVERRIDE_PARSER, fOverrideDefaultParser); } /** @@ -332,6 +331,11 @@ SAXMessageFormatter.formatMessage(fXMLSchemaLoader.getLocale(), "property-not-supported", new Object [] {name})); } + /** Check to see if the property is managed by the JdkXmlFeatues **/ + int index = fXmlFeatures.getIndex(name); + if (index > -1) { + return fXmlFeatures.getFeature(index); + } try { return fXMLSchemaLoader.getProperty(name); } @@ -376,10 +380,19 @@ fXMLSchemaLoader.setProperty(SECURITY_MANAGER, fSecurityManager); return; } else if (name.equals(Constants.ORACLE_FEATURE_SERVICE_MECHANISM)) { - //in secure mode, let _useServicesMechanism be determined by the constructor + //in secure mode, let useServicesMechanism be determined by the constructor if (System.getSecurityManager() != null) return; } + + if ((fXmlFeatures != null) && + fXmlFeatures.setFeature(name, JdkXmlFeatures.State.APIPROPERTY, value)) { + if (name.equals(JdkXmlUtils.OVERRIDE_PARSER) + || name.equals(Constants.ORACLE_FEATURE_SERVICE_MECHANISM)) { + fXMLSchemaLoader.setFeature(name, value); + } + return; + } try { fXMLSchemaLoader.setFeature(name, value); } @@ -452,7 +465,7 @@ private void propagateFeatures(AbstractXMLSchema schema) { schema.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, (fSecurityManager != null && fSecurityManager.isSecureProcessing())); - schema.setFeature(Constants.ORACLE_FEATURE_SERVICE_MECHANISM, fUseServicesMechanism); + schema.setFeature(JdkXmlUtils.OVERRIDE_PARSER, fOverrideDefaultParser); String[] features = fXMLSchemaLoader.getRecognizedFeatures(); for (int i = 0; i < features.length; ++i) { boolean state = fXMLSchemaLoader.getFeature(features[i]); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java --- a/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2001-2004 The Apache Software Foundation. @@ -36,7 +35,6 @@ import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager; import com.sun.org.apache.xerces.internal.util.FeatureState; import com.sun.org.apache.xerces.internal.util.PropertyState; -import com.sun.org.apache.xerces.internal.util.Status; import com.sun.org.apache.xerces.internal.util.SymbolTable; import com.sun.org.apache.xerces.internal.xni.XMLLocator; import com.sun.org.apache.xerces.internal.xni.XNIException; @@ -48,6 +46,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentScanner; import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource; import com.sun.org.apache.xerces.internal.xni.parser.XMLPullParserConfiguration; +import jdk.xml.internal.JdkXmlUtils; /** * This is the DTD-only parser configuration. It extends the basic @@ -308,6 +307,7 @@ //NOTIFY_BUILTIN_REFS, // from XMLDocumentFragmentScannerImpl //NOTIFY_CHAR_REFS, // from XMLDocumentFragmentScannerImpl //WARN_ON_DUPLICATE_ENTITYDEF, // from XMLEntityManager + JdkXmlUtils.OVERRIDE_PARSER }; addRecognizedFeatures(recognizedFeatures); @@ -320,6 +320,7 @@ //setFeature(NOTIFY_BUILTIN_REFS, false); // from XMLDocumentFragmentScannerImpl //setFeature(NOTIFY_CHAR_REFS, false); // from XMLDocumentFragmentScannerImpl //setFeature(WARN_ON_DUPLICATE_ENTITYDEF, false); // from XMLEntityManager + fFeatures.put(JdkXmlUtils.OVERRIDE_PARSER, JdkXmlUtils.OVERRIDE_PARSER_DEFAULT); // add default recognized properties final String[] recognizedProperties = { diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java --- a/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/parsers/NonValidatingConfiguration.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2001-2004 The Apache Software Foundation. @@ -34,7 +33,6 @@ import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager; import com.sun.org.apache.xerces.internal.util.FeatureState; import com.sun.org.apache.xerces.internal.util.PropertyState; -import com.sun.org.apache.xerces.internal.util.Status; import com.sun.org.apache.xerces.internal.util.SymbolTable; import com.sun.org.apache.xerces.internal.xni.XMLLocator; import com.sun.org.apache.xerces.internal.xni.XNIException; @@ -46,6 +44,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentScanner; import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource; import com.sun.org.apache.xerces.internal.xni.parser.XMLPullParserConfiguration; +import jdk.xml.internal.JdkXmlUtils; /** * This is the non validating parser configuration. It extends the basic @@ -291,6 +290,7 @@ //NOTIFY_BUILTIN_REFS, // from XMLDocumentFragmentScannerImpl //NOTIFY_CHAR_REFS, // from XMLDocumentFragmentScannerImpl //WARN_ON_DUPLICATE_ENTITYDEF // from XMLEntityManager + JdkXmlUtils.OVERRIDE_PARSER }; addRecognizedFeatures(recognizedFeatures); @@ -305,6 +305,7 @@ //setFeature(NOTIFY_BUILTIN_REFS, false); // from XMLDocumentFragmentScannerImpl //setFeature(NOTIFY_CHAR_REFS, false); // from XMLDocumentFragmentScannerImpl //setFeature(WARN_ON_DUPLICATE_ENTITYDEF, false); // from XMLEntityManager + fFeatures.put(JdkXmlUtils.OVERRIDE_PARSER, JdkXmlUtils.OVERRIDE_PARSER_DEFAULT); // add default recognized properties final String[] recognizedProperties = { diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java --- a/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2001-2005 The Apache Software Foundation. @@ -25,6 +24,7 @@ import java.util.HashMap; import java.util.Locale; import javax.xml.XMLConstants; +import jdk.xml.internal.JdkXmlUtils; import com.sun.org.apache.xerces.internal.impl.Constants; import com.sun.org.apache.xerces.internal.impl.XML11DTDScannerImpl; @@ -53,7 +53,6 @@ import com.sun.org.apache.xerces.internal.util.PropertyState; import com.sun.org.apache.xerces.internal.util.SymbolTable; import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager; -import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager; import com.sun.org.apache.xerces.internal.xni.XMLDTDContentModelHandler; import com.sun.org.apache.xerces.internal.xni.XMLDTDHandler; import com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler; @@ -485,7 +484,8 @@ EXTERNAL_GENERAL_ENTITIES, EXTERNAL_PARAMETER_ENTITIES, PARSER_SETTINGS, - XMLConstants.FEATURE_SECURE_PROCESSING + XMLConstants.FEATURE_SECURE_PROCESSING, + JdkXmlUtils.OVERRIDE_PARSER }; addRecognizedFeatures(recognizedFeatures); // set state for default features @@ -498,14 +498,15 @@ fFeatures.put(SCHEMA_ELEMENT_DEFAULT, Boolean.TRUE); fFeatures.put(NORMALIZE_DATA, Boolean.TRUE); fFeatures.put(SCHEMA_AUGMENT_PSVI, Boolean.TRUE); - fFeatures.put(GENERATE_SYNTHETIC_ANNOTATIONS, Boolean.FALSE); - fFeatures.put(VALIDATE_ANNOTATIONS, Boolean.FALSE); - fFeatures.put(HONOUR_ALL_SCHEMALOCATIONS, Boolean.FALSE); - fFeatures.put(NAMESPACE_GROWTH, Boolean.FALSE); - fFeatures.put(TOLERATE_DUPLICATES, Boolean.FALSE); - fFeatures.put(USE_GRAMMAR_POOL_ONLY, Boolean.FALSE); + fFeatures.put(GENERATE_SYNTHETIC_ANNOTATIONS, Boolean.FALSE); + fFeatures.put(VALIDATE_ANNOTATIONS, Boolean.FALSE); + fFeatures.put(HONOUR_ALL_SCHEMALOCATIONS, Boolean.FALSE); + fFeatures.put(NAMESPACE_GROWTH, Boolean.FALSE); + fFeatures.put(TOLERATE_DUPLICATES, Boolean.FALSE); + fFeatures.put(USE_GRAMMAR_POOL_ONLY, Boolean.FALSE); fFeatures.put(PARSER_SETTINGS, Boolean.TRUE); fFeatures.put(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + fFeatures.put(JdkXmlUtils.OVERRIDE_PARSER, JdkXmlUtils.OVERRIDE_PARSER_DEFAULT); // add default recognized properties final String[] recognizedProperties = diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java --- a/src/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xerces/internal/util/XMLCatalogResolver.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 2004,2005 The Apache Software Foundation. @@ -44,6 +43,7 @@ import com.sun.org.apache.xml.internal.resolver.CatalogManager; import com.sun.org.apache.xml.internal.resolver.readers.OASISXMLCatalogReader; import com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader; +import jdk.xml.internal.JdkXmlUtils; /** *The catalog resolver handles the resolution of external @@ -574,8 +574,8 @@ */ private void attachReaderToCatalog (Catalog catalog) { - SAXParserFactory spf = new SAXParserFactoryImpl(); - spf.setNamespaceAware(true); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory( + catalog.getCatalogManager().overrideDefaultParser()); spf.setValidating(false); SAXCatalogReader saxReader = new SAXCatalogReader(spf); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/dtm/DTMManager.java --- a/src/com/sun/org/apache/xml/internal/dtm/DTMManager.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/dtm/DTMManager.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -62,7 +62,7 @@ */ protected XMLStringFactory m_xsf = null; - private boolean _useServicesMechanism; + private boolean _overrideDefaultParser; /** * Default constructor is protected on purpose. */ @@ -358,15 +358,15 @@ /** * Return the state of the services mechanism feature. */ - public boolean useServicesMechnism() { - return _useServicesMechanism; + public boolean overrideDefaultParser() { + return _overrideDefaultParser; } /** * Set the state of the services mechanism feature. */ - public void setServicesMechnism(boolean flag) { - _useServicesMechanism = flag; + public void setOverrideDefaultParser(boolean flag) { + _overrideDefaultParser = flag; } // -------------------- private methods -------------------- diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java --- a/src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/dtm/ref/DTMManagerDefault.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 1999-2004 The Apache Software Foundation. @@ -22,7 +21,6 @@ */ package com.sun.org.apache.xml.internal.dtm.ref; -import com.sun.org.apache.xalan.internal.utils.FactoryImpl; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; @@ -45,6 +43,7 @@ import com.sun.org.apache.xml.internal.utils.SystemIDResolver; import com.sun.org.apache.xml.internal.utils.XMLReaderManager; import com.sun.org.apache.xml.internal.utils.XMLStringFactory; +import jdk.xml.internal.JdkXmlUtils; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -607,7 +606,7 @@ // If user did not supply a reader, ask for one from the reader manager if (null == reader) { if (m_readerManager == null) { - m_readerManager = XMLReaderManager.getInstance(super.useServicesMechnism()); + m_readerManager = XMLReaderManager.getInstance(super.overrideDefaultParser()); } reader = m_readerManager.getXMLReader(); @@ -766,8 +765,7 @@ try { - DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(super.useServicesMechnism()); - dbf.setNamespaceAware(true); + DocumentBuilderFactory dbf = JdkXmlUtils.getDOMFactory(super.overrideDefaultParser()); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.newDocument(); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/Catalog.java --- a/src/com/sun/org/apache/xml/internal/resolver/Catalog.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/Catalog.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -20,7 +20,6 @@ // Catalog.java - Represents OASIS Open Catalog files. package com.sun.org.apache.xml.internal.resolver; -import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import com.sun.org.apache.xerces.internal.utils.SecuritySupport; import com.sun.org.apache.xml.internal.resolver.helpers.FileURL; import com.sun.org.apache.xml.internal.resolver.helpers.PublicId; @@ -41,6 +40,7 @@ import java.util.Map; import java.util.Vector; import javax.xml.parsers.SAXParserFactory; +import jdk.xml.internal.JdkXmlUtils; /** * Represents OASIS Open Catalog files. @@ -395,9 +395,7 @@ * Setup readers. */ public void setupReaders() { - SAXParserFactory spf = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(true); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); spf.setValidating(false); SAXCatalogReader saxReader = new SAXCatalogReader(spf); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java --- a/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ /* * reserved comment block * DO NOT REMOVE OR ALTER! @@ -201,7 +204,7 @@ * service loader (or similar). * Note the default value (false) is the safe option.. */ - private boolean useServicesMechanism; + private boolean overrideDefaultParser; /** The manager's debug object. Used for printing debugging messages. * @@ -229,7 +232,7 @@ // no attempt to read from the file before the caller has had a chance // to avoid it. if (System.getSecurityManager() == null) { - useServicesMechanism = true; + overrideDefaultParser = true; } } /** Set the bootstrap resolver.*/ @@ -778,8 +781,8 @@ return oasisXMLCatalogPI.booleanValue(); } - public boolean useServicesMechanism() { - return useServicesMechanism; + public boolean overrideDefaultParser() { + return overrideDefaultParser; } /** * Set the XML Catalog PI setting diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/Resolver.java --- a/src/com/sun/org/apache/xml/internal/resolver/Resolver.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/Resolver.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ /* * reserved comment block * DO NOT REMOVE OR ALTER! @@ -32,11 +35,11 @@ import java.net.URLConnection; import java.net.MalformedURLException; import javax.xml.parsers.SAXParserFactory; -import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import com.sun.org.apache.xerces.internal.utils.SecuritySupport; import com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader; import com.sun.org.apache.xml.internal.resolver.readers.OASISXMLCatalogReader; import com.sun.org.apache.xml.internal.resolver.readers.TR9401CatalogReader; +import jdk.xml.internal.JdkXmlUtils; /** * An extension to OASIS Open Catalog files, this class supports @@ -87,9 +90,7 @@ * Setup readers. */ public void setupReaders() { - SAXParserFactory spf = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(true); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); spf.setValidating(false); SAXCatalogReader saxReader = new SAXCatalogReader(spf); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java --- a/src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/tools/CatalogResolver.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ /* * reserved comment block * DO NOT REMOVE OR ALTER! @@ -44,6 +47,7 @@ import com.sun.org.apache.xml.internal.resolver.Catalog; import com.sun.org.apache.xml.internal.resolver.CatalogManager; import com.sun.org.apache.xml.internal.resolver.helpers.FileURL; +import jdk.xml.internal.JdkXmlUtils; /** * A SAX EntityResolver/JAXP URIResolver that uses catalogs. @@ -304,11 +308,9 @@ private void setEntityResolver(SAXSource source) throws TransformerException { XMLReader reader = source.getXMLReader(); if (reader == null) { - SAXParserFactory spFactory = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spFactory.setNamespaceAware(true); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); try { - reader = spFactory.newSAXParser().getXMLReader(); + reader = spf.newSAXParser().getXMLReader(); } catch (ParserConfigurationException ex) { throw new TransformerException(ex); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java --- a/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingParser.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ /* * reserved comment block * DO NOT REMOVE OR ALTER! @@ -42,10 +45,10 @@ import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParser; -import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import com.sun.org.apache.xml.internal.resolver.Catalog; import com.sun.org.apache.xml.internal.resolver.CatalogManager; import com.sun.org.apache.xml.internal.resolver.helpers.FileURL; +import jdk.xml.internal.JdkXmlUtils; /** * A SAX Parser that performs catalog-based entity resolution. @@ -123,9 +126,7 @@ /** Initialize the parser. */ private void initParser() { catalogResolver = new CatalogResolver(catalogManager); - SAXParserFactory spf = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(namespaceAware); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); spf.setValidating(validating); try { diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java --- a/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/resolver/tools/ResolvingXMLReader.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,3 +1,6 @@ +/* + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + */ /* * reserved comment block * DO NOT REMOVE OR ALTER! @@ -27,8 +30,8 @@ import javax.xml.parsers.*; -import com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl; import com.sun.org.apache.xml.internal.resolver.*; +import jdk.xml.internal.JdkXmlUtils; /** * A SAX XMLReader that performs catalog-based entity resolution. @@ -62,9 +65,7 @@ */ public ResolvingXMLReader() { super(); - SAXParserFactory spf = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(namespaceAware); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); spf.setValidating(validating); try { SAXParser parser = spf.newSAXParser(); @@ -83,9 +84,7 @@ */ public ResolvingXMLReader(CatalogManager manager) { super(manager); - SAXParserFactory spf = catalogManager.useServicesMechanism() ? - SAXParserFactory.newInstance() : new SAXParserFactoryImpl(); - spf.setNamespaceAware(namespaceAware); + SAXParserFactory spf = JdkXmlUtils.getSAXFactory(catalogManager.overrideDefaultParser()); spf.setValidating(validating); try { SAXParser parser = spf.newSAXParser(); diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java --- a/src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -20,11 +20,9 @@ package com.sun.org.apache.xml.internal.serializer; -import com.sun.org.apache.xalan.internal.utils.SecuritySupport; -import java.io.File; - -import com.sun.org.apache.xml.internal.serializer.utils.AttList; -import com.sun.org.apache.xml.internal.serializer.utils.DOM2Helper; +import com.sun.org.apache.xml.internal.utils.AttList; +import com.sun.org.apache.xml.internal.utils.DOM2Helper; +import javax.xml.transform.Result; import org.w3c.dom.Comment; import org.w3c.dom.Element; import org.w3c.dom.EntityReference; @@ -32,7 +30,6 @@ import org.w3c.dom.Node; import org.w3c.dom.ProcessingInstruction; import org.w3c.dom.Text; - import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.ext.LexicalHandler; @@ -59,12 +56,6 @@ */ final private SerializationHandler m_Serializer; - // ARGHH!! JAXP Uses Xerces without setting the namespace processing to ON! - // DOM2Helper m_dh = new DOM2Helper(); - - /** DomHelper for this TreeWalker */ - final protected DOM2Helper m_dh; - /** Locator object for this TreeWalker */ final private LocatorImpl m_locator = new LocatorImpl(); @@ -79,7 +70,7 @@ } public TreeWalker(ContentHandler ch) { - this(ch,null); + this(ch, null); } /** * Constructor. @@ -101,8 +92,6 @@ if (systemId != null) { m_locator.setSystemId(systemId); } - - m_dh = new DOM2Helper(); } /** @@ -211,7 +200,7 @@ this.m_contentHandler.endDocument(); } - /** Flag indicating whether following text to be processed is raw text */ + // Flag indicating whether following text to be processed is raw text boolean nextIsRaw = false; /** @@ -315,7 +304,6 @@ final int colon = attrName.indexOf(':'); final String prefix; - // System.out.println("TreeWalker#startNode: attr["+i+"] = "+attrName+", "+attr.getNodeValue()); if (attrName.equals("xmlns") || attrName.startsWith("xmlns:")) { // Use "" instead of null, as Xerces likes "" for the @@ -337,13 +325,13 @@ } } - String ns = m_dh.getNamespaceOfNode(node); + String ns = DOM2Helper.getNamespaceOfNode(node); if(null == ns) ns = ""; this.m_contentHandler.startElement(ns, - m_dh.getLocalNameOfNode(node), + DOM2Helper.getLocalNameOfNode(node), node.getNodeName(), - new AttList(atts, m_dh)); + new AttList(atts)); break; case Node.PROCESSING_INSTRUCTION_NODE : { @@ -391,9 +379,9 @@ { nextIsRaw = false; - m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_DISABLE_OUTPUT_ESCAPING, ""); + m_contentHandler.processingInstruction(Result.PI_DISABLE_OUTPUT_ESCAPING, ""); dispatachChars(node); - m_contentHandler.processingInstruction(javax.xml.transform.Result.PI_ENABLE_OUTPUT_ESCAPING, ""); + m_contentHandler.processingInstruction(Result.PI_ENABLE_OUTPUT_ESCAPING, ""); } else { @@ -438,12 +426,12 @@ break; case Node.ELEMENT_NODE : - String ns = m_dh.getNamespaceOfNode(node); + String ns = DOM2Helper.getNamespaceOfNode(node); if(null == ns) ns = ""; this.m_contentHandler.endElement(ns, - m_dh.getLocalNameOfNode(node), - node.getNodeName()); + DOM2Helper.getLocalNameOfNode(node), + node.getNodeName()); if (m_Serializer == null) { // Don't bother with endPrefixMapping calls if the ContentHandler is a diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/serializer/utils/AttList.java --- a/src/com/sun/org/apache/xml/internal/serializer/utils/AttList.java Mon Feb 05 11:38:57 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +0,0 @@ -/* - * reserved comment block - * DO NOT REMOVE OR ALTER! - */ -/* - * Copyright 1999-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: AttList.java,v 1.1.4.1 2005/09/08 11:03:08 suresh_emailid Exp $ - */ -package com.sun.org.apache.xml.internal.serializer.utils; - -import org.w3c.dom.Attr; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -import org.xml.sax.Attributes; - -/** - * Wraps a DOM attribute list in a SAX Attributes. - * - * This class is a copy of the one in com.sun.org.apache.xml.internal.utils. - * It exists to cut the serializers dependancy on that package. - * A minor changes from that package are: - * DOMHelper reference changed to DOM2Helper, class is not "public" - * - * This class is not a public API, it is only public because it is - * used in com.sun.org.apache.xml.internal.serializer. - * - * @xsl.usage internal - */ -public final class AttList implements Attributes -{ - - /** List of attribute nodes */ - NamedNodeMap m_attrs; - - /** Index of last attribute node */ - int m_lastIndex; - - // ARGHH!! JAXP Uses Xerces without setting the namespace processing to ON! - // DOM2Helper m_dh = new DOM2Helper(); - - /** Local reference to DOMHelper */ - DOM2Helper m_dh; - -// /** -// * Constructor AttList -// * -// * -// * @param attrs List of attributes this will contain -// */ -// public AttList(NamedNodeMap attrs) -// { -// -// m_attrs = attrs; -// m_lastIndex = m_attrs.getLength() - 1; -// m_dh = new DOM2Helper(); -// } - - /** - * Constructor AttList - * - * - * @param attrs List of attributes this will contain - * @param dh DOMHelper - */ - public AttList(NamedNodeMap attrs, DOM2Helper dh) - { - - m_attrs = attrs; - m_lastIndex = m_attrs.getLength() - 1; - m_dh = dh; - } - - /** - * Get the number of attribute nodes in the list - * - * - * @return number of attribute nodes - */ - public int getLength() - { - return m_attrs.getLength(); - } - - /** - * Look up an attribute's Namespace URI by index. - * - * @param index The attribute index (zero-based). - * @return The Namespace URI, or the empty string if none - * is available, or null if the index is out of - * range. - */ - public String getURI(int index) - { - String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index))); - if(null == ns) - ns = ""; - return ns; - } - - /** - * Look up an attribute's local name by index. - * - * @param index The attribute index (zero-based). - * @return The local name, or the empty string if Namespace - * processing is not being performed, or null - * if the index is out of range. - */ - public String getLocalName(int index) - { - return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index))); - } - - /** - * Look up an attribute's qualified name by index. - * - * - * @param i The attribute index (zero-based). - * - * @return The attribute's qualified name - */ - public String getQName(int i) - { - return ((Attr) m_attrs.item(i)).getName(); - } - - /** - * Get the attribute's node type by index - * - * - * @param i The attribute index (zero-based) - * - * @return the attribute's node type - */ - public String getType(int i) - { - return "CDATA"; // for the moment - } - - /** - * Get the attribute's node value by index - * - * - * @param i The attribute index (zero-based) - * - * @return the attribute's node value - */ - public String getValue(int i) - { - return ((Attr) m_attrs.item(i)).getValue(); - } - - /** - * Get the attribute's node type by name - * - * - * @param name Attribute name - * - * @return the attribute's node type - */ - public String getType(String name) - { - return "CDATA"; // for the moment - } - - /** - * Look up an attribute's type by Namespace name. - * - * @param uri The Namespace URI, or the empty String if the - * name has no Namespace URI. - * @param localName The local name of the attribute. - * @return The attribute type as a string, or null if the - * attribute is not in the list or if Namespace - * processing is not being performed. - */ - public String getType(String uri, String localName) - { - return "CDATA"; // for the moment - } - - /** - * Look up an attribute's value by name. - * - * - * @param name The attribute node's name - * - * @return The attribute node's value - */ - public String getValue(String name) - { - Attr attr = ((Attr) m_attrs.getNamedItem(name)); - return (null != attr) - ? attr.getValue() : null; - } - - /** - * Look up an attribute's value by Namespace name. - * - * @param uri The Namespace URI, or the empty String if the - * name has no Namespace URI. - * @param localName The local name of the attribute. - * @return The attribute value as a string, or null if the - * attribute is not in the list. - */ - public String getValue(String uri, String localName) - { - Node a=m_attrs.getNamedItemNS(uri,localName); - return (a==null) ? null : a.getNodeValue(); - } - - /** - * Look up the index of an attribute by Namespace name. - * - * @param uri The Namespace URI, or the empty string if - * the name has no Namespace URI. - * @param localPart The attribute's local name. - * @return The index of the attribute, or -1 if it does not - * appear in the list. - */ - public int getIndex(String uri, String localPart) - { - for(int i=m_attrs.getLength()-1;i>=0;--i) - { - Node a=m_attrs.item(i); - String u=a.getNamespaceURI(); - if( (u==null ? uri==null : u.equals(uri)) - && - a.getLocalName().equals(localPart) ) - return i; - } - return -1; - } - - /** - * Look up the index of an attribute by raw XML 1.0 name. - * - * @param qName The qualified (prefixed) name. - * @return The index of the attribute, or -1 if it does not - * appear in the list. - */ - public int getIndex(String qName) - { - for(int i=m_attrs.getLength()-1;i>=0;--i) - { - Node a=m_attrs.item(i); - if(a.getNodeName().equals(qName) ) - return i; - } - return -1; - } -} diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java --- a/src/com/sun/org/apache/xml/internal/serializer/utils/DOM2Helper.java Mon Feb 05 11:38:57 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/* - * reserved comment block - * DO NOT REMOVE OR ALTER! - */ -/* - * Copyright 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: DOM2Helper.java,v 1.1.4.1 2005/09/08 11:03:09 suresh_emailid Exp $ - */ -package com.sun.org.apache.xml.internal.serializer.utils; - -import java.io.IOException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import org.xml.sax.InputSource; - -/** - * This class provides a DOM level 2 "helper", which provides services currently - * not provided be the DOM standard. - * - * This class is a copy of the one in com.sun.org.apache.xml.internal.utils. - * It exists to cut the serializers dependancy on that package. - * - * The differences from the original class are: - * it doesn't extend DOMHelper, not depricated, - * dropped method isNodeAfter(Node node1, Node node2) - * dropped method parse(InputSource) - * dropped method supportSAX() - * dropped method setDocument(doc) - * dropped method checkNode(Node) - * dropped method getDocument() - * dropped method getElementByID(String id, Document doc) - * dropped method getParentOfNode(Node node) - * dropped field Document m_doc; - * made class non-public - * - * This class is not a public API, it is only public because it is - * used in com.sun.org.apache.xml.internal.serializer. - * - * @xsl.usage internal - */ -public final class DOM2Helper -{ - - /** - * Construct an instance. - */ - public DOM2Helper(){} - - /** - * Returns the local name of the given node, as defined by the - * XML Namespaces specification. This is prepared to handle documents - * built using DOM Level 1 methods by falling back upon explicitly - * parsing the node name. - * - * @param n Node to be examined - * - * @return String containing the local name, or null if the node - * was not assigned a Namespace. - */ - public String getLocalNameOfNode(Node n) - { - - String name = n.getLocalName(); - - return (null == name) ? getLocalNameOfNodeFallback(n) : name; - } - - /** - * Returns the local name of the given node. If the node's name begins - * with a namespace prefix, this is the part after the colon; otherwise - * it's the full node name. - * - * This method is copied from com.sun.org.apache.xml.internal.utils.DOMHelper - * - * @param n the node to be examined. - * - * @return String containing the Local Name - */ - private String getLocalNameOfNodeFallback(Node n) - { - - String qname = n.getNodeName(); - int index = qname.indexOf(':'); - - return (index < 0) ? qname : qname.substring(index + 1); - } - - /** - * Returns the Namespace Name (Namespace URI) for the given node. - * In a Level 2 DOM, you can ask the node itself. Note, however, that - * doing so conflicts with our decision in getLocalNameOfNode not - * to trust the that the DOM was indeed created using the Level 2 - * methods. If Level 1 methods were used, these two functions will - * disagree with each other. - *
- * TODO: Reconcile with getLocalNameOfNode. - * - * @param n Node to be examined - * - * @return String containing the Namespace URI bound to this DOM node - * at the time the Node was created. - */ - public String getNamespaceOfNode(Node n) - { - return n.getNamespaceURI(); - } - - /** Field m_useDOM2getNamespaceURI is a compile-time flag which - * gates some of the parser options used to build a DOM -- but - * that code is commented out at this time and nobody else - * references it, so I've commented this out as well. */ - //private boolean m_useDOM2getNamespaceURI = false; -} diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/utils/AttList.java --- a/src/com/sun/org/apache/xml/internal/utils/AttList.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/utils/AttList.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 1999-2004 The Apache Software Foundation. @@ -41,39 +40,18 @@ /** Index of last attribute node */ int m_lastIndex; - // ARGHH!! JAXP Uses Xerces without setting the namespace processing to ON! + // JAXP Uses Xerces without setting the namespace processing to ON! // DOM2Helper m_dh = new DOM2Helper(); - /** Local reference to DOMHelper */ - DOMHelper m_dh; - -// /** -// * Constructor AttList -// * -// * -// * @param attrs List of attributes this will contain -// */ -// public AttList(NamedNodeMap attrs) -// { -// -// m_attrs = attrs; -// m_lastIndex = m_attrs.getLength() - 1; -// m_dh = new DOM2Helper(); -// } - /** * Constructor AttList * - * * @param attrs List of attributes this will contain - * @param dh DOMHelper */ - public AttList(NamedNodeMap attrs, DOMHelper dh) + public AttList(NamedNodeMap attrs) { - m_attrs = attrs; m_lastIndex = m_attrs.getLength() - 1; - m_dh = dh; } /** @@ -97,7 +75,7 @@ */ public String getURI(int index) { - String ns = m_dh.getNamespaceOfNode(((Attr) m_attrs.item(index))); + String ns = DOM2Helper.getNamespaceOfNode(((Attr) m_attrs.item(index))); if(null == ns) ns = ""; return ns; @@ -113,7 +91,7 @@ */ public String getLocalName(int index) { - return m_dh.getLocalNameOfNode(((Attr) m_attrs.item(index))); + return DOM2Helper.getLocalNameOfNode(((Attr) m_attrs.item(index))); } /** diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/utils/DOM2Helper.java --- a/src/com/sun/org/apache/xml/internal/utils/DOM2Helper.java Mon Feb 05 11:38:57 2018 +0000 +++ b/src/com/sun/org/apache/xml/internal/utils/DOM2Helper.java Mon Feb 05 16:46:01 2018 +0000 @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. */ /* * Copyright 1999-2004 The Apache Software Foundation. @@ -22,295 +21,321 @@ */ package com.sun.org.apache.xml.internal.utils; -import java.io.IOException; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - +import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy; import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; -import org.xml.sax.InputSource; /** - * @deprecated Since the introduction of the DTM, this class will be removed. - * This class provides a DOM level 2 "helper", which provides services currently - * not provided be the DOM standard. + * This class provides a DOM level 2 "helper", which provides several services. + * + * The original class extended DOMHelper that was deprecated and then removed. */ -public class DOM2Helper extends DOMHelper -{ - - /** - * Construct an instance. - */ - public DOM2Helper(){} +public final class DOM2Helper { - /** - * Check node to see if it was created by a DOM implementation - * that this helper is intended to support. This is currently - * disabled, and assumes all nodes are acceptable rather than checking - * that they implement com.sun.org.apache.xerces.internal.dom.NodeImpl. - * - * @param node The node to be tested. - * - * @throws TransformerException if the node is not one which this - * DOM2Helper can support. If we return without throwing the exception, - * the node is compatable. - * @xsl.usage internal - */ - public void checkNode(Node node) throws TransformerException - { - - // if(!(node instanceof com.sun.org.apache.xerces.internal.dom.NodeImpl)) - // throw new TransformerException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_XERCES_CANNOT_HANDLE_NODES, new Object[]{((Object)node).getClass()})); //"DOM2Helper can not handle nodes of type" - //+((Object)node).getClass()); - } + /** + * Construct an instance. + */ + private DOM2Helper() { + } - /** - * Returns true if the DOM implementation handled by this helper - * supports the SAX ContentHandler interface. - * - * @return true (since Xerces does). - */ - public boolean supportsSAX() - { - return true; - } - - /** Field m_doc: Document Node for the document this helper is currently - * accessing or building - * @see #setDocument - * @see #getDocument - * */ - private Document m_doc; - - /** - * Specify which document this helper is currently operating on. - * - * @param doc The DOM Document node for this document. - * @see #getDocument - */ - public void setDocument(Document doc) - { - m_doc = doc; - } - - /** - * Query which document this helper is currently operating on. - * - * @return The DOM Document node for this document. - * @see #setDocument - */ - public Document getDocument() - { - return m_doc; - } + /** + * Returns the local name of the given node, as defined by the XML + * Namespaces specification. This is prepared to handle documents built + * using DOM Level 1 methods by falling back upon explicitly parsing the + * node name. + * + * @param n Node to be examined + * + * @return String containing the local name, or null if the node was not + * assigned a Namespace. + */ + public static String getLocalNameOfNode(Node n) { + String name = n.getLocalName(); + return (null == name) ? getLocalNameOfNodeFallback(n) : name; + } - /** - * Parse an XML document. - * - *
Right now the Xerces DOMParser class is used. This needs - * fixing, either via jaxp, or via some other, standard method.
- * - *The application can use this method to instruct the SAX parser - * to begin parsing an XML document from any valid input - * source (a character stream, a byte stream, or a URI).
- * - *Applications may not invoke this method while a parse is in - * progress (they should create a new Parser instead for each - * additional XML document). Once a parse is complete, an - * application may reuse the same Parser object, possibly with a - * different input source.
- * - * @param source The input source for the top-level of the - * XML document. - * - * @throws TransformerException if any checked exception is thrown. - * @xsl.usage internal - */ - public void parse(InputSource source) throws TransformerException - { - - try - { - - // I guess I should use JAXP factory here... when it's legal. - // com.sun.org.apache.xerces.internal.parsers.DOMParser parser - // = new com.sun.org.apache.xerces.internal.parsers.DOMParser(); - DocumentBuilderFactory builderFactory = - DocumentBuilderFactory.newInstance(); - - builderFactory.setNamespaceAware(true); - builderFactory.setValidating(true); + /** + * Returns the local name of the given node. If the node's name begins with + * a namespace prefix, this is the part after the colon; otherwise it's the + * full node name. + * + * This method is copied from + * com.sun.org.apache.xml.internal.utils.DOMHelper + * + * @param n the node to be examined. + * + * @return String containing the Local Name + */ + private static String getLocalNameOfNodeFallback(Node n) { + String qname = n.getNodeName(); + int index = qname.indexOf(':'); - DocumentBuilder parser = builderFactory.newDocumentBuilder(); - - /* - // domParser.setFeature("http://apache.org/xml/features/dom/create-entity-ref-nodes", getShouldExpandEntityRefs()? false : true); - if(m_useDOM2getNamespaceURI) - { - parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", true); - parser.setFeature("http://xml.org/sax/features/namespaces", true); - } - else - { - parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false); - } - - parser.setFeature("http://apache.org/xml/features/allow-java-encodings", true); - */ + return (index < 0) ? qname : qname.substring(index + 1); + } - parser.setErrorHandler( - new com.sun.org.apache.xml.internal.utils.DefaultErrorHandler()); - - // if(null != m_entityResolver) - // { - // System.out.println("Setting the entity resolver."); - // parser.setEntityResolver(m_entityResolver); - // } - setDocument(parser.parse(source)); - } - catch (org.xml.sax.SAXException se) - { - throw new TransformerException(se); - } - catch (ParserConfigurationException pce) - { - throw new TransformerException(pce); - } - catch (IOException ioe) - { - throw new TransformerException(ioe); + /** + * Returns the Namespace Name (Namespace URI) for the given node. In a Level + * 2 DOM, you can ask the node itself. Note, however, that doing so + * conflicts with our decision in getLocalNameOfNode not to trust the that + * the DOM was indeed created using the Level 2 methods. If Level 1 methods + * were used, these two functions will disagree with each other. + *+ * TODO: Reconcile with getLocalNameOfNode. + * + * @param n Node to be examined + * + * @return String containing the Namespace URI bound to this DOM node at the + * time the Node was created. + */ + public static String getNamespaceOfNode(Node n) { + return n.getNamespaceURI(); } - // setDocument(((com.sun.org.apache.xerces.internal.parsers.DOMParser)parser).getDocument()); - } + /** + * Figure out whether node2 should be considered as being later in the + * document than node1, in Document Order as defined by the XPath model. + * This may not agree with the ordering defined by other XML applications. + *
+ * There are some cases where ordering isn't defined, and neither are the + * results of this function -- though we'll generally return true. + * + * @param node1 DOM Node to perform position comparison on. + * @param node2 DOM Node to perform position comparison on . + * + * @return false if node2 comes before node1, otherwise return true. You can + * think of this as + * {@code (node1.documentOrderPosition <= node2.documentOrderPosition)}. + */ + public static boolean isNodeAfter(Node node1, Node node2) { + if (node1 == node2 || isNodeTheSame(node1, node2)) { + return true; + } + + // Default return value, if there is no defined ordering + boolean isNodeAfter = true; + + Node parent1 = getParentOfNode(node1); + Node parent2 = getParentOfNode(node2); - /** - * Given an XML ID, return the element. This requires assistance from the - * DOM and parser, and is meaningful only in the context of a DTD - * or schema which declares attributes as being of type ID. This - * information may or may not be available in all parsers, may or - * may not be available for specific documents, and may or may not - * be available when validation is not turned on. - * - * @param id The ID to search for, as a String. - * @param doc The document to search within, as a DOM Document node. - * @return DOM Element node with an attribute of type ID whose value - * uniquely matches the requested id string, or null if there isn't - * such an element or if the DOM can't answer the question for other - * reasons. - */ - public Element getElementByID(String id, Document doc) - { - return doc.getElementById(id); - } + // Optimize for most common case + if (parent1 == parent2 || isNodeTheSame(parent1, parent2)) // then we know they are siblings + { + if (null != parent1) { + isNodeAfter = isNodeAfterSibling(parent1, node1, node2); + } + } else { + // General strategy: Figure out the lengths of the two + // ancestor chains, reconcile the lengths, and look for + // the lowest common ancestor. If that ancestor is one of + // the nodes being compared, it comes before the other. + // Otherwise perform a sibling compare. + // + // NOTE: If no common ancestor is found, ordering is undefined + // and we return the default value of isNodeAfter. + // Count parents in each ancestor chain + int nParents1 = 2, nParents2 = 2; // include node & parent obtained above + + while (parent1 != null) { + nParents1++; + parent1 = getParentOfNode(parent1); + } + + while (parent2 != null) { + nParents2++; + + parent2 = getParentOfNode(parent2); + } - /** - * Figure out whether node2 should be considered as being later - * in the document than node1, in Document Order as defined - * by the XPath model. This may not agree with the ordering defined - * by other XML applications. - *
- * There are some cases where ordering isn't defined, and neither are - * the results of this function -- though we'll generally return true. - *
- * TODO: Make sure this does the right thing with attribute nodes!!!
- *
- * @param node1 DOM Node to perform position comparison on.
- * @param node2 DOM Node to perform position comparison on .
- *
- * @return false if node2 comes before node1, otherwise return true.
- * You can think of this as
- * (node1.documentOrderPosition <= node2.documentOrderPosition)
.
- */
- public static boolean isNodeAfter(Node node1, Node node2)
- {
+ // Initially assume scan for common ancestor starts with
+ // the input nodes.
+ Node startNode1 = node1, startNode2 = node2;
+
+ // If one ancestor chain is longer, adjust its start point
+ // so we're comparing at the same depths
+ if (nParents1 < nParents2) {
+ // Adjust startNode2 to depth of startNode1
+ int adjust = nParents2 - nParents1;
+
+ for (int i = 0; i < adjust; i++) {
+ startNode2 = getParentOfNode(startNode2);
+ }
+ } else if (nParents1 > nParents2) {
+ // adjust startNode1 to depth of startNode2
+ int adjust = nParents1 - nParents2;
+
+ for (int i = 0; i < adjust; i++) {
+ startNode1 = getParentOfNode(startNode1);
+ }
+ }
+
+ Node prevChild1 = null, prevChild2 = null; // so we can "back up"
- // Assume first that the nodes are DTM nodes, since discovering node
- // order is massivly faster for the DTM.
- if(node1 instanceof DOMOrder && node2 instanceof DOMOrder)
- {
- int index1 = ((DOMOrder) node1).getUid();
- int index2 = ((DOMOrder) node2).getUid();
+ // Loop up the ancestor chain looking for common parent
+ while (null != startNode1) {
+ if (startNode1 == startNode2 || isNodeTheSame(startNode1, startNode2)) // common parent?
+ {
+ if (null == prevChild1) // first time in loop?
+ {
+
+ // Edge condition: one is the ancestor of the other.
+ isNodeAfter = (nParents1 < nParents2) ? true : false;
- return index1 <= index2;
- }
- else
- {
+ break; // from while loop
+ } else {
+ // Compare ancestors below lowest-common as siblings
+ isNodeAfter = isNodeAfterSibling(startNode1, prevChild1,
+ prevChild2);
+
+ break; // from while loop
+ }
+ } // end if(startNode1 == startNode2)
- // isNodeAfter will return true if node is after countedNode
- // in document order. The base isNodeAfter is sloooow (relatively).
- return DOMHelper.isNodeAfter(node1, node2);
- }
- }
+ // Move up one level and try again
+ prevChild1 = startNode1;
+ startNode1 = getParentOfNode(startNode1);
+ prevChild2 = startNode2;
+ startNode2 = getParentOfNode(startNode2);
+ } // end while(parents exist to examine)
+ } // end big else (not immediate siblings)
+
+ return isNodeAfter;
+ } // end isNodeAfter(Node node1, Node node2)
- /**
- * Get the XPath-model parent of a node. This version takes advantage
- * of the DOM Level 2 Attr.ownerElement() method; the base version we
- * would otherwise inherit is prepared to fall back on exhaustively
- * walking the document to find an Attr's parent.
- *
- * @param node Node to be examined
- *
- * @return the DOM parent of the input node, if there is one, or the
- * ownerElement if the input node is an Attr, or null if the node is
- * a Document, a DocumentFragment, or an orphan.
- */
- public static Node getParentOfNode(Node node)
- {
- Node parent=node.getParentNode();
- if(parent==null && (Node.ATTRIBUTE_NODE == node.getNodeType()) )
- parent=((Attr) node).getOwnerElement();
- return parent;
- }
+ /**
+ * Use DTMNodeProxy to determine whether two nodes are the same.
+ *
+ * @param node1 The first DOM node to compare.
+ * @param node2 The second DOM node to compare.
+ * @return true if the two nodes are the same.
+ */
+ public static boolean isNodeTheSame(Node node1, Node node2) {
+ if (node1 instanceof DTMNodeProxy && node2 instanceof DTMNodeProxy) {
+ return ((DTMNodeProxy) node1).equals((DTMNodeProxy) node2);
+ } else {
+ return (node1 == node2);
+ }
+ }
+
+ /**
+ * Get the XPath-model parent of a node. This version takes advantage of the
+ * DOM Level 2 Attr.ownerElement() method; the base version we would
+ * otherwise inherit is prepared to fall back on exhaustively walking the
+ * document to find an Attr's parent.
+ *
+ * @param node Node to be examined
+ *
+ * @return the DOM parent of the input node, if there is one, or the
+ * ownerElement if the input node is an Attr, or null if the node is a
+ * Document, a DocumentFragment, or an orphan.
+ */
+ public static Node getParentOfNode(Node node) {
+ Node parent = node.getParentNode();
+ if (parent == null && (Node.ATTRIBUTE_NODE == node.getNodeType())) {
+ parent = ((Attr) node).getOwnerElement();
+ }
+ return parent;
+ }
+
+ /**
+ * Figure out if child2 is after child1 in document order.
+ *
+ * Warning: Some aspects of "document order" are not well defined. For + * example, the order of attributes is considered meaningless in XML, and + * the order reported by our model will be consistent for a given invocation + * but may not match that of either the source file or the serialized + * output. + * + * @param parent Must be the parent of both child1 and child2. + * @param child1 Must be the child of parent and not equal to child2. + * @param child2 Must be the child of parent and not equal to child1. + * @return true if child 2 is after child1 in document order. + */ + private static boolean isNodeAfterSibling(Node parent, Node child1, + Node child2) { + + boolean isNodeAfterSibling = false; + short child1type = child1.getNodeType(); + short child2type = child2.getNodeType(); + + if ((Node.ATTRIBUTE_NODE != child1type) + && (Node.ATTRIBUTE_NODE == child2type)) { + + // always sort attributes before non-attributes. + isNodeAfterSibling = false; + } else if ((Node.ATTRIBUTE_NODE == child1type) + && (Node.ATTRIBUTE_NODE != child2type)) { - /** - * Returns the local name of the given node, as defined by the - * XML Namespaces specification. This is prepared to handle documents - * built using DOM Level 1 methods by falling back upon explicitly - * parsing the node name. - * - * @param n Node to be examined - * - * @return String containing the local name, or null if the node - * was not assigned a Namespace. - */ - public String getLocalNameOfNode(Node n) - { + // always sort attributes before non-attributes. + isNodeAfterSibling = true; + } else if (Node.ATTRIBUTE_NODE == child1type) { + NamedNodeMap children = parent.getAttributes(); + int nNodes = children.getLength(); + boolean found1 = false, found2 = false; + + // Count from the start until we find one or the other. + for (int i = 0; i < nNodes; i++) { + Node child = children.item(i); - String name = n.getLocalName(); + if (child1 == child || isNodeTheSame(child1, child)) { + if (found2) { + isNodeAfterSibling = false; + + break; + } - return (null == name) ? super.getLocalNameOfNode(n) : name; - } + found1 = true; + } else if (child2 == child || isNodeTheSame(child2, child)) { + if (found1) { + isNodeAfterSibling = true; + + break; + } - /** - * Returns the Namespace Name (Namespace URI) for the given node. - * In a Level 2 DOM, you can ask the node itself. Note, however, that - * doing so conflicts with our decision in getLocalNameOfNode not - * to trust the that the DOM was indeed created using the Level 2 - * methods. If Level 1 methods were used, these two functions will - * disagree with each other. - *
- * TODO: Reconcile with getLocalNameOfNode. - * - * @param n Node to be examined - * - * @return String containing the Namespace URI bound to this DOM node - * at the time the Node was created. - */ - public String getNamespaceOfNode(Node n) - { - return n.getNamespaceURI(); - } + found2 = true; + } + } + } else { + // TODO: Check performance of alternate solution: + // There are two choices here: Count from the start of + // the document until we find one or the other, or count + // from one until we find or fail to find the other. + // Either can wind up scanning all the siblings in the worst + // case, which on a wide document can be a lot of work but + // is more typically is a short list. + // Scanning from the start involves two tests per iteration, + // but it isn't clear that scanning from the middle doesn't + // yield more iterations on average. + // We should run some testcases. + Node child = parent.getFirstChild(); + boolean found1 = false, found2 = false; + + while (null != child) { - /** Field m_useDOM2getNamespaceURI is a compile-time flag which - * gates some of the parser options used to build a DOM -- but - * that code is commented out at this time and nobody else - * references it, so I've commented this out as well. */ - //private boolean m_useDOM2getNamespaceURI = false; + // Node child = children.item(i); + if (child1 == child || isNodeTheSame(child1, child)) { + if (found2) { + isNodeAfterSibling = false; + + break; + } + + found1 = true; + } else if (child2 == child || isNodeTheSame(child2, child)) { + if (found1) { + isNodeAfterSibling = true; + + break; + } + + found2 = true; + } + + child = child.getNextSibling(); + } + } + + return isNodeAfterSibling; + } // end isNodeAfterSibling(Node parent, Node child1, Node child2) } diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/utils/DOMHelper.java --- a/src/com/sun/org/apache/xml/internal/utils/DOMHelper.java Mon Feb 05 11:38:57 2018 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1330 +0,0 @@ -/* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. - */ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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: DOMHelper.java,v 1.2.4.1 2005/09/15 08:15:40 suresh_emailid Exp $ - */ -package com.sun.org.apache.xml.internal.utils; - -import com.sun.org.apache.xml.internal.dtm.ref.DTMNodeProxy; -import com.sun.org.apache.xml.internal.res.XMLErrorResources; -import com.sun.org.apache.xml.internal.res.XMLMessages; -import java.util.HashMap; -import java.util.Map; -import java.util.Vector; -import javax.xml.XMLConstants; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; -import org.w3c.dom.Attr; -import org.w3c.dom.DOMImplementation; -import org.w3c.dom.Document; -import org.w3c.dom.DocumentType; -import org.w3c.dom.Element; -import org.w3c.dom.Entity; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.Text; - -/** - * @deprecated Since the introduction of the DTM, this class will be removed. - * This class provides a front-end to DOM implementations, providing - * a number of utility functions that either aren't yet standardized - * by the DOM spec or that are defined in optional DOM modules and - * hence may not be present in all DOMs. - */ -public class DOMHelper -{ - - /** - * DOM Level 1 did not have a standard mechanism for creating a new - * Document object. This function provides a DOM-implementation-independent - * abstraction for that for that concept. It's typically used when - * outputting a new DOM as the result of an operation. - *
- * TODO: This isn't directly compatable with DOM Level 2. - * The Level 2 createDocument call also creates the root - * element, and thus requires that you know what that element will be - * before creating the Document. We should think about whether we want - * to change this code, and the callers, so we can use the DOM's own - * method. (It's also possible that DOM Level 3 may relax this - * sequence, but you may give up some intelligence in the DOM by - * doing so; the intent was that knowing the document type and root - * element might let the DOM automatically switch to a specialized - * subclass for particular kinds of documents.) - * - * @param isSecureProcessing state of the secure processing feature. - * @return The newly created DOM Document object, with no children, or - * null if we can't find a DOM implementation that permits creating - * new empty Documents. - */ - public static Document createDocument(boolean isSecureProcessing) - { - - try - { - - // Use an implementation of the JAVA API for XML Parsing 1.0 to - // create a DOM Document node to contain the result. - DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance(); - - dfactory.setNamespaceAware(true); - dfactory.setValidating(true); - - if (isSecureProcessing) - { - try - { - dfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - } - catch (ParserConfigurationException pce) {} - } - - DocumentBuilder docBuilder = dfactory.newDocumentBuilder(); - Document outNode = docBuilder.newDocument(); - - return outNode; - } - catch (ParserConfigurationException pce) - { - throw new RuntimeException( - XMLMessages.createXMLMessage( - XMLErrorResources.ER_CREATEDOCUMENT_NOT_SUPPORTED, null)); //"createDocument() not supported in XPathContext!"); - - // return null; - } - } - - /** - * DOM Level 1 did not have a standard mechanism for creating a new - * Document object. This function provides a DOM-implementation-independent - * abstraction for that for that concept. It's typically used when - * outputting a new DOM as the result of an operation. - * - * @return The newly created DOM Document object, with no children, or - * null if we can't find a DOM implementation that permits creating - * new empty Documents. - */ - public static Document createDocument() - { - return createDocument(false); - } - - /** - * Tells, through the combination of the default-space attribute - * on xsl:stylesheet, xsl:strip-space, xsl:preserve-space, and the - * xml:space attribute, whether or not extra whitespace should be stripped - * from the node. Literal elements from template elements should - * not be tested with this function. - * @param textNode A text node from the source tree. - * @return true if the text node should be stripped of extra whitespace. - * - * @throws javax.xml.transform.TransformerException - * @xsl.usage advanced - */ - public boolean shouldStripSourceNode(Node textNode) - throws javax.xml.transform.TransformerException - { - - // return (null == m_envSupport) ? false : m_envSupport.shouldStripSourceNode(textNode); - return false; - } - - /** - * Supports the XPath function GenerateID by returning a unique - * identifier string for any given DOM Node. - *
- * Warning: The base implementation uses the Node object's hashCode(), - * which is NOT guaranteed to be unique. If that method hasn't been - * overridden in this DOM ipmlementation, most Java implementions will - * derive it from the object's address and should be OK... but if - * your DOM uses a different definition of hashCode (eg hashing the - * contents of the subtree), or if your DOM may have multiple objects - * that represent a single Node in the data structure (eg via proxying), - * you may need to find another way to assign a unique identifier. - *
- * Also, be aware that if nodes are destroyed and recreated, there is - * an open issue regarding whether an ID may be reused. Currently - * we're assuming that the input document is stable for the duration - * of the XPath/XSLT operation, so this shouldn't arise in this context. - *
- * (DOM Level 3 is investigating providing a unique node "key", but - * that won't help Level 1 and Level 2 implementations.) - * - * @param node whose identifier you want to obtain - * - * @return a string which should be different for every Node object. - */ - public String getUniqueID(Node node) - { - return "N" + Integer.toHexString(node.hashCode()).toUpperCase(); - } - - /** - * Figure out whether node2 should be considered as being later - * in the document than node1, in Document Order as defined - * by the XPath model. This may not agree with the ordering defined - * by other XML applications. - *
- * There are some cases where ordering isn't defined, and neither are
- * the results of this function -- though we'll generally return true.
- *
- * TODO: Make sure this does the right thing with attribute nodes!!!
- *
- * @param node1 DOM Node to perform position comparison on.
- * @param node2 DOM Node to perform position comparison on .
- *
- * @return false if node2 comes before node1, otherwise return true.
- * You can think of this as
- * (node1.documentOrderPosition <= node2.documentOrderPosition)
.
- */
- public static boolean isNodeAfter(Node node1, Node node2)
- {
- if (node1 == node2 || isNodeTheSame(node1, node2))
- return true;
-
- // Default return value, if there is no defined ordering
- boolean isNodeAfter = true;
-
- Node parent1 = getParentOfNode(node1);
- Node parent2 = getParentOfNode(node2);
-
- // Optimize for most common case
- if (parent1 == parent2 || isNodeTheSame(parent1, parent2)) // then we know they are siblings
- {
- if (null != parent1)
- isNodeAfter = isNodeAfterSibling(parent1, node1, node2);
- else
- {
- // If both parents are null, ordering is not defined.
- // We're returning a value in lieu of throwing an exception.
- // Not a case we expect to arise in XPath, but beware if you
- // try to reuse this method.
-
- // We can just fall through in this case, which allows us
- // to hit the debugging code at the end of the function.
- //return isNodeAfter;
- }
- }
- else
- {
-
- // General strategy: Figure out the lengths of the two
- // ancestor chains, reconcile the lengths, and look for
- // the lowest common ancestor. If that ancestor is one of
- // the nodes being compared, it comes before the other.
- // Otherwise perform a sibling compare.
- //
- // NOTE: If no common ancestor is found, ordering is undefined
- // and we return the default value of isNodeAfter.
-
- // Count parents in each ancestor chain
- int nParents1 = 2, nParents2 = 2; // include node & parent obtained above
-
- while (parent1 != null)
- {
- nParents1++;
-
- parent1 = getParentOfNode(parent1);
- }
-
- while (parent2 != null)
- {
- nParents2++;
-
- parent2 = getParentOfNode(parent2);
- }
-
- // Initially assume scan for common ancestor starts with
- // the input nodes.
- Node startNode1 = node1, startNode2 = node2;
-
- // If one ancestor chain is longer, adjust its start point
- // so we're comparing at the same depths
- if (nParents1 < nParents2)
- {
- // Adjust startNode2 to depth of startNode1
- int adjust = nParents2 - nParents1;
-
- for (int i = 0; i < adjust; i++)
- {
- startNode2 = getParentOfNode(startNode2);
- }
- }
- else if (nParents1 > nParents2)
- {
- // adjust startNode1 to depth of startNode2
- int adjust = nParents1 - nParents2;
-
- for (int i = 0; i < adjust; i++)
- {
- startNode1 = getParentOfNode(startNode1);
- }
- }
-
- Node prevChild1 = null, prevChild2 = null; // so we can "back up"
-
- // Loop up the ancestor chain looking for common parent
- while (null != startNode1)
- {
- if (startNode1 == startNode2 || isNodeTheSame(startNode1, startNode2)) // common parent?
- {
- if (null == prevChild1) // first time in loop?
- {
-
- // Edge condition: one is the ancestor of the other.
- isNodeAfter = (nParents1 < nParents2) ? true : false;
-
- break; // from while loop
- }
- else
- {
- // Compare ancestors below lowest-common as siblings
- isNodeAfter = isNodeAfterSibling(startNode1, prevChild1,
- prevChild2);
-
- break; // from while loop
- }
- } // end if(startNode1 == startNode2)
-
- // Move up one level and try again
- prevChild1 = startNode1;
- startNode1 = getParentOfNode(startNode1);
- prevChild2 = startNode2;
- startNode2 = getParentOfNode(startNode2);
- } // end while(parents exist to examine)
- } // end big else (not immediate siblings)
-
- // WARNING: The following diagnostic won't report the early
- // "same node" case. Fix if/when needed.
-
- /* -- please do not remove... very useful for diagnostics --
- System.out.println("node1 = "+node1.getNodeName()+"("+node1.getNodeType()+")"+
- ", node2 = "+node2.getNodeName()
- +"("+node2.getNodeType()+")"+
- ", isNodeAfter = "+isNodeAfter); */
- return isNodeAfter;
- } // end isNodeAfter(Node node1, Node node2)
-
- /**
- * Use DTMNodeProxy to determine whether two nodes are the same.
- *
- * @param node1 The first DOM node to compare.
- * @param node2 The second DOM node to compare.
- * @return true if the two nodes are the same.
- */
- public static boolean isNodeTheSame(Node node1, Node node2)
- {
- if (node1 instanceof DTMNodeProxy && node2 instanceof DTMNodeProxy)
- return ((DTMNodeProxy)node1).equals((DTMNodeProxy)node2);
- else
- return (node1 == node2);
- }
-
- /**
- * Figure out if child2 is after child1 in document order.
- *
- * Warning: Some aspects of "document order" are not well defined.
- * For example, the order of attributes is considered
- * meaningless in XML, and the order reported by our model will
- * be consistant for a given invocation but may not
- * match that of either the source file or the serialized output.
- *
- * @param parent Must be the parent of both child1 and child2.
- * @param child1 Must be the child of parent and not equal to child2.
- * @param child2 Must be the child of parent and not equal to child1.
- * @return true if child 2 is after child1 in document order.
- */
- private static boolean isNodeAfterSibling(Node parent, Node child1,
- Node child2)
- {
-
- boolean isNodeAfterSibling = false;
- short child1type = child1.getNodeType();
- short child2type = child2.getNodeType();
-
- if ((Node.ATTRIBUTE_NODE != child1type)
- && (Node.ATTRIBUTE_NODE == child2type))
- {
-
- // always sort attributes before non-attributes.
- isNodeAfterSibling = false;
- }
- else if ((Node.ATTRIBUTE_NODE == child1type)
- && (Node.ATTRIBUTE_NODE != child2type))
- {
-
- // always sort attributes before non-attributes.
- isNodeAfterSibling = true;
- }
- else if (Node.ATTRIBUTE_NODE == child1type)
- {
- NamedNodeMap children = parent.getAttributes();
- int nNodes = children.getLength();
- boolean found1 = false, found2 = false;
-
- // Count from the start until we find one or the other.
- for (int i = 0; i < nNodes; i++)
- {
- Node child = children.item(i);
-
- if (child1 == child || isNodeTheSame(child1, child))
- {
- if (found2)
- {
- isNodeAfterSibling = false;
-
- break;
- }
-
- found1 = true;
- }
- else if (child2 == child || isNodeTheSame(child2, child))
- {
- if (found1)
- {
- isNodeAfterSibling = true;
-
- break;
- }
-
- found2 = true;
- }
- }
- }
- else
- {
- // TODO: Check performance of alternate solution:
- // There are two choices here: Count from the start of
- // the document until we find one or the other, or count
- // from one until we find or fail to find the other.
- // Either can wind up scanning all the siblings in the worst
- // case, which on a wide document can be a lot of work but
- // is more typically is a short list.
- // Scanning from the start involves two tests per iteration,
- // but it isn't clear that scanning from the middle doesn't
- // yield more iterations on average.
- // We should run some testcases.
- Node child = parent.getFirstChild();
- boolean found1 = false, found2 = false;
-
- while (null != child)
- {
-
- // Node child = children.item(i);
- if (child1 == child || isNodeTheSame(child1, child))
- {
- if (found2)
- {
- isNodeAfterSibling = false;
-
- break;
- }
-
- found1 = true;
- }
- else if (child2 == child || isNodeTheSame(child2, child))
- {
- if (found1)
- {
- isNodeAfterSibling = true;
-
- break;
- }
-
- found2 = true;
- }
-
- child = child.getNextSibling();
- }
- }
-
- return isNodeAfterSibling;
- } // end isNodeAfterSibling(Node parent, Node child1, Node child2)
-
- //==========================================================
- // SECTION: Namespace resolution
- //==========================================================
-
- /**
- * Get the depth level of this node in the tree (equals 1 for
- * a parentless node).
- *
- * @param n Node to be examined.
- * @return the number of ancestors, plus one
- * @xsl.usage internal
- */
- public short getLevel(Node n)
- {
-
- short level = 1;
-
- while (null != (n = getParentOfNode(n)))
- {
- level++;
- }
-
- return level;
- }
-
- /**
- * Given an XML Namespace prefix and a context in which the prefix
- * is to be evaluated, return the Namespace Name this prefix was
- * bound to. Note that DOM Level 3 is expected to provide a version of
- * this which deals with the DOM's "early binding" behavior.
- *
- * Default handling:
- *
- * @param prefix String containing namespace prefix to be resolved,
- * without the ':' which separates it from the localname when used
- * in a Node Name. The empty sting signifies the default namespace
- * at this point in the document.
- * @param namespaceContext Element which provides context for resolution.
- * (We could extend this to work for other nodes by first seeking their
- * nearest Element ancestor.)
- *
- * @return a String containing the Namespace URI which this prefix
- * represents in the specified context.
- */
- public String getNamespaceForPrefix(String prefix, Element namespaceContext)
- {
-
- int type;
- Node parent = namespaceContext;
- String namespace = null;
-
- if (prefix.equals("xml"))
- {
- namespace = QName.S_XMLNAMESPACEURI; // Hardcoded, per Namespace spec
- }
- else if(prefix.equals("xmlns"))
- {
- // Hardcoded in the DOM spec, expected to be adopted by
- // Namespace spec. NOTE: Namespace declarations _must_ use
- // the xmlns: prefix; other prefixes declared as belonging
- // to this namespace will not be recognized and should
- // probably be rejected by parsers as erroneous declarations.
- namespace = "http://www.w3.org/2000/xmlns/";
- }
- else
- {
- // Attribute name for this prefix's declaration
- String declname=(prefix=="")
- ? "xmlns"
- : "xmlns:"+prefix;
-
- // Scan until we run out of Elements or have resolved the namespace
- while ((null != parent) && (null == namespace)
- && (((type = parent.getNodeType()) == Node.ELEMENT_NODE)
- || (type == Node.ENTITY_REFERENCE_NODE)))
- {
- if (type == Node.ELEMENT_NODE)
- {
-
- // Look for the appropriate Namespace Declaration attribute,
- // either "xmlns:prefix" or (if prefix is "") "xmlns".
- // TODO: This does not handle "implicit declarations"
- // which may be created when the DOM is edited. DOM Level
- // 3 will define how those should be interpreted. But
- // this issue won't arise in freshly-parsed DOMs.
-
- // NOTE: declname is set earlier, outside the loop.
- Attr attr=((Element)parent).getAttributeNode(declname);
- if(attr!=null)
- {
- namespace = attr.getNodeValue();
- break;
- }
- }
-
- parent = getParentOfNode(parent);
- }
- }
-
- return namespace;
- }
-
- /**
- * An experiment for the moment.
- */
- Map
- * TODO: This doesn't handle DocumentFragments or "orphaned" subtrees
- * -- it's currently returning ownerDocument even when the tree is
- * not actually part of the main Document tree. We should either
- * rewrite the description to say that it finds the Document node,
- * or change the code to walk up the ancestor chain.
-
- *
- * @param n Node to be examined
- *
- * @return the Document node. Note that this is not the correct answer
- * if n was (or was a child of) a DocumentFragment or an orphaned node,
- * as can arise if the DOM has been edited rather than being generated
- * by a parser.
- */
- public Node getRootNode(Node n)
- {
- int nt = n.getNodeType();
- return ( (Node.DOCUMENT_NODE == nt) || (Node.DOCUMENT_FRAGMENT_NODE == nt) )
- ? n : n.getOwnerDocument();
- }
-
- /**
- * Test whether the given node is a namespace decl node. In DOM Level 2
- * this can be done in a namespace-aware manner, but in Level 1 DOMs
- * it has to be done by testing the node name.
- *
- * @param n Node to be examined.
- *
- * @return boolean -- true iff the node is an Attr whose name is
- * "xmlns" or has the "xmlns:" prefix.
- */
- public boolean isNamespaceNode(Node n)
- {
-
- if (Node.ATTRIBUTE_NODE == n.getNodeType())
- {
- String attrName = n.getNodeName();
-
- return (attrName.startsWith("xmlns:") || attrName.equals("xmlns"));
- }
-
- return false;
- }
-
- /**
- * Obtain the XPath-model parent of a DOM node -- ownerElement for Attrs,
- * parent for other nodes.
- *
- * Background: The DOM believes that you must be your Parent's
- * Child, and thus Attrs don't have parents. XPath said that Attrs
- * do have their owning Element as their parent. This function
- * bridges the difference, either by using the DOM Level 2 ownerElement
- * function or by using a "silly and expensive function" in Level 1
- * DOMs.
- *
- * (There's some discussion of future DOMs generalizing ownerElement
- * into ownerNode and making it work on all types of nodes. This
- * still wouldn't help the users of Level 1 or Level 2 DOMs)
- *
- *
- * @param node Node whose XPath parent we want to obtain
- *
- * @return the parent of the node, or the ownerElement if it's an
- * Attr node, or null if the node is an orphan.
- *
- * @throws RuntimeException if the Document has no root element.
- * This can't arise if the Document was created
- * via the DOM Level 2 factory methods, but is possible if other
- * mechanisms were used to obtain it
- */
- public static Node getParentOfNode(Node node) throws RuntimeException
- {
- Node parent;
- short nodeType = node.getNodeType();
-
- if (Node.ATTRIBUTE_NODE == nodeType)
- {
- Document doc = node.getOwnerDocument();
- /*
- TBD:
- if(null == doc)
- {
- throw new RuntimeException(XSLMessages.createXPATHMessage(XPATHErrorResources.ER_CHILD_HAS_NO_OWNER_DOCUMENT, null));//"Attribute child does not have an owner document!");
- }
- */
-
- // Given how expensive the tree walk may be, we should first ask
- // whether this DOM can answer the question for us. The additional
- // test does slow down Level 1 DOMs slightly. DOMHelper2, which
- // is currently specialized for Xerces, assumes it can use the
- // Level 2 solution. We might want to have an intermediate stage,
- // which would assume DOM Level 2 but not assume Xerces.
- //
- // (Shouldn't have to check whether impl is null in a compliant DOM,
- // but let's be paranoid for a moment...)
- DOMImplementation impl=doc.getImplementation();
- if(impl!=null && impl.hasFeature("Core","2.0"))
- {
- parent=((Attr)node).getOwnerElement();
- return parent;
- }
-
- // DOM Level 1 solution, as fallback. Hugely expensive.
-
- Element rootElem = doc.getDocumentElement();
-
- if (null == rootElem)
- {
- throw new RuntimeException(
- XMLMessages.createXMLMessage(
- XMLErrorResources.ER_CHILD_HAS_NO_OWNER_DOCUMENT_ELEMENT,
- null)); //"Attribute child does not have an owner document element!");
- }
-
- parent = locateAttrParent(rootElem, node);
-
- }
- else
- {
- parent = node.getParentNode();
-
- // if((Node.DOCUMENT_NODE != nodeType) && (null == parent))
- // {
- // throw new RuntimeException("Child does not have parent!");
- // }
- }
-
- return parent;
- }
-
- /**
- * Given an ID, return the element. This can work only if the document
- * is interpreted in the context of a DTD or Schema, since otherwise
- * we don't know which attributes are or aren't IDs.
- *
- * Note that DOM Level 1 had no ability to retrieve this information.
- * DOM Level 2 introduced it but does not promise that it will be
- * supported in all DOMs; those which can't support it will always
- * return null.
- *
- * TODO: getElementByID is currently unimplemented. Support DOM Level 2?
- *
- * @param id The unique identifier to be searched for.
- * @param doc The document to search within.
- * @return CURRENTLY HARDCODED TO NULL, but it should be:
- * The node which has this unique identifier, or null if there
- * is no such node or this DOM can't reliably recognize it.
- */
- public Element getElementByID(String id, Document doc)
- {
- return null;
- }
-
- /**
- * The getUnparsedEntityURI function returns the URI of the unparsed
- * entity with the specified name in the same document as the context
- * node (see [3.3 Unparsed Entities]). It returns the empty string if
- * there is no such entity.
- *
- * XML processors may choose to use the System Identifier (if one
- * is provided) to resolve the entity, rather than the URI in the
- * Public Identifier. The details are dependent on the processor, and
- * we would have to support some form of plug-in resolver to handle
- * this properly. Currently, we simply return the System Identifier if
- * present, and hope that it a usable URI or that our caller can
- * map it to one.
- * TODO: Resolve Public Identifiers... or consider changing function name.
- *
- * If we find a relative URI
- * reference, XML expects it to be resolved in terms of the base URI
- * of the document. The DOM doesn't do that for us, and it isn't
- * entirely clear whether that should be done here; currently that's
- * pushed up to a higher levelof our application. (Note that DOM Level
- * 1 didn't store the document's base URI.)
- * TODO: Consider resolving Relative URIs.
- *
- * (The DOM's statement that "An XML processor may choose to
- * completely expand entities before the structure model is passed
- * to the DOM" refers only to parsed entities, not unparsed, and hence
- * doesn't affect this function.)
- *
- * @param name A string containing the Entity Name of the unparsed
- * entity.
- * @param doc Document node for the document to be searched.
- *
- * @return String containing the URI of the Unparsed Entity, or an
- * empty string if no such entity exists.
- */
- public String getUnparsedEntityURI(String name, Document doc)
- {
-
- String url = "";
- DocumentType doctype = doc.getDoctype();
-
- if (null != doctype)
- {
- NamedNodeMap entities = doctype.getEntities();
- if(null == entities)
- return url;
- Entity entity = (Entity) entities.getNamedItem(name);
- if(null == entity)
- return url;
-
- String notationName = entity.getNotationName();
-
- if (null != notationName) // then it's unparsed
- {
- // The draft says: "The XSLT processor may use the public
- // identifier to generate a URI for the entity instead of the URI
- // specified in the system identifier. If the XSLT processor does
- // not use the public identifier to generate the URI, it must use
- // the system identifier; if the system identifier is a relative
- // URI, it must be resolved into an absolute URI using the URI of
- // the resource containing the entity declaration as the base
- // URI [RFC2396]."
- // So I'm falling a bit short here.
- url = entity.getSystemId();
-
- if (null == url)
- {
- url = entity.getPublicId();
- }
- else
- {
- // This should be resolved to an absolute URL, but that's hard
- // to do from here.
- }
- }
- }
-
- return url;
- }
-
- /**
- * Support for getParentOfNode; walks a DOM tree until it finds
- * the Element which owns the Attr. This is hugely expensive, and
- * if at all possible you should use the DOM Level 2 Attr.ownerElement()
- * method instead.
- *
- * The DOM Level 1 developers expected that folks would keep track
- * of the last Element they'd seen and could recover the info from
- * that source. Obviously that doesn't work very well if the only
- * information you've been presented with is the Attr. The DOM Level 2
- * getOwnerElement() method fixes that, but only for Level 2 and
- * later DOMs.
- *
- * @param elem Element whose subtree is to be searched for this Attr
- * @param attr Attr whose owner is to be located.
- *
- * @return the first Element whose attribute list includes the provided
- * attr. In modern DOMs, this will also be the only such Element. (Early
- * DOMs had some hope that Attrs might be sharable, but this idea has
- * been abandoned.)
- */
- private static Node locateAttrParent(Element elem, Node attr)
- {
-
- Node parent = null;
-
- // This should only be called for Level 1 DOMs, so we don't have to
- // worry about namespace issues. In later levels, it's possible
- // for a DOM to have two Attrs with the same NodeName but
- // different namespaces, and we'd need to get getAttributeNodeNS...
- // but later levels also have Attr.getOwnerElement.
- Attr check=elem.getAttributeNode(attr.getNodeName());
- if(check==attr)
- parent = elem;
-
- if (null == parent)
- {
- for (Node node = elem.getFirstChild(); null != node;
- node = node.getNextSibling())
- {
- if (Node.ELEMENT_NODE == node.getNodeType())
- {
- parent = locateAttrParent((Element) node, attr);
-
- if (null != parent)
- break;
- }
- }
- }
-
- return parent;
- }
-
- /**
- * The factory object used for creating nodes
- * in the result tree.
- */
- protected Document m_DOMFactory = null;
-
- /**
- * Store the factory object required to create DOM nodes
- * in the result tree. In fact, that's just the result tree's
- * Document node...
- *
- * @param domFactory The DOM Document Node within whose context
- * the result tree will be built.
- */
- public void setDOMFactory(Document domFactory)
- {
- this.m_DOMFactory = domFactory;
- }
-
- /**
- * Retrieve the factory object required to create DOM nodes
- * in the result tree.
- *
- * @return The result tree's DOM Document Node.
- */
- public Document getDOMFactory()
- {
-
- if (null == this.m_DOMFactory)
- {
- this.m_DOMFactory = createDocument();
- }
-
- return this.m_DOMFactory;
- }
-
- /**
- * Get the textual contents of the node. See
- * getNodeData(Node,FastStringBuffer) for discussion of how
- * whitespace nodes are handled.
- *
- * @param node DOM Node to be examined
- * @return String containing a concatenation of all the
- * textual content within that node.
- * @see #getNodeData(Node,FastStringBuffer)
- *
- */
- public static String getNodeData(Node node)
- {
-
- FastStringBuffer buf = StringBufferPool.get();
- String s;
-
- try
- {
- getNodeData(node, buf);
-
- s = (buf.length() > 0) ? buf.toString() : "";
- }
- finally
- {
- StringBufferPool.free(buf);
- }
-
- return s;
- }
-
- /**
- * Retrieve the text content of a DOM subtree, appending it into a
- * user-supplied FastStringBuffer object. Note that attributes are
- * not considered part of the content of an element.
- *
- * There are open questions regarding whitespace stripping.
- * Currently we make no special effort in that regard, since the standard
- * DOM doesn't yet provide DTD-based information to distinguish
- * whitespace-in-element-context from genuine #PCDATA. Note that we
- * should probably also consider xml:space if/when we address this.
- * DOM Level 3 may solve the problem for us.
- *
- * @param node Node whose subtree is to be walked, gathering the
- * contents of all Text or CDATASection nodes.
- * @param buf FastStringBuffer into which the contents of the text
- * nodes are to be concatenated.
- */
- public static void getNodeData(Node node, FastStringBuffer buf)
- {
-
- switch (node.getNodeType())
- {
- case Node.DOCUMENT_FRAGMENT_NODE :
- case Node.DOCUMENT_NODE :
- case Node.ELEMENT_NODE :
- {
- for (Node child = node.getFirstChild(); null != child;
- child = child.getNextSibling())
- {
- getNodeData(child, buf);
- }
- }
- break;
- case Node.TEXT_NODE :
- case Node.CDATA_SECTION_NODE :
- buf.append(node.getNodeValue());
- break;
- case Node.ATTRIBUTE_NODE :
- buf.append(node.getNodeValue());
- break;
- case Node.PROCESSING_INSTRUCTION_NODE :
- // warning(XPATHErrorResources.WG_PARSING_AND_PREPARING);
- break;
- default :
- // ignore
- break;
- }
- }
-}
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xml/internal/utils/DOMOrder.java
--- a/src/com/sun/org/apache/xml/internal/utils/DOMOrder.java Mon Feb 05 11:38:57 2018 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
- */
-/*
- * Copyright 1999-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: DOMOrder.java,v 1.2.4.1 2005/09/15 08:15:41 suresh_emailid Exp $
- */
-package com.sun.org.apache.xml.internal.utils;
-
-/**
- * @deprecated Since the introduction of the DTM, this class will be removed.
- * Nodes that implement this index can return a document order index.
- * Eventually, this will be replaced by DOM 3 methods.
- * (compareDocumentOrder and/or compareTreePosition.)
- */
-public interface DOMOrder
-{
-
- /**
- * Get the UID (document order index).
- *
- * @return integer whose relative value corresponds to document order
- * -- that is, if node1.getUid() State of secure mode. Is specified object model supported by this
@@ -138,8 +127,7 @@
public javax.xml.xpath.XPath newXPath() {
return new com.sun.org.apache.xpath.internal.jaxp.XPathImpl(
xPathVariableResolver, xPathFunctionResolver,
- !_isNotSecureProcessing, _useServicesMechanism,
- _featureManager );
+ !_isNotSecureProcessing, _featureManager );
}
/**
@@ -190,29 +178,28 @@
_isNotSecureProcessing = !value;
if (value && _featureManager != null) {
- _featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
- FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
+ _featureManager.setFeature(JdkXmlFeatures.XmlFeature.ENABLE_EXTENSION_FUNCTION,
+ JdkXmlFeatures.State.FSP, false);
}
// all done processing feature
return;
}
if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
- //in secure mode, let _useServicesMechanism be determined by the constructor
- if (!_isSecureMode)
- _useServicesMechanism = value;
- return;
+ // for compatibility, in secure mode, useServicesMechanism is determined by the constructor
+ if (_isSecureMode)
+ return;
}
if (_featureManager != null &&
- _featureManager.setValue(name, FeaturePropertyBase.State.APIPROPERTY, value)) {
+ _featureManager.setFeature(name, JdkXmlFeatures.State.APIPROPERTY, value)) {
return;
}
// unknown feature
String fmsg = XSLMessages.createXPATHMessage(
XPATHErrorResources.ER_FEATURE_UNKNOWN,
- new Object[] { name, CLASS_NAME, new Boolean(value) } );
+ new Object[] { name, CLASS_NAME, value} );
throw new XPathFactoryConfigurationException( fmsg );
}
@@ -254,15 +241,11 @@
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
return !_isNotSecureProcessing;
}
- if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
- return _useServicesMechanism;
- }
- /** Check to see if the property is managed by the security manager **/
- String propertyValue = (_featureManager != null) ?
- _featureManager.getValueAsString(name) : null;
- if (propertyValue != null) {
- return _featureManager.isFeatureEnabled(name);
+ /** Check to see if the property is managed by the feature manager **/
+ int index = _featureManager.getIndex(name);
+ if (index > -1) {
+ return _featureManager.getFeature(index);
}
// unknown feature
diff -r abfbb18f6f3a -r 9d02485a8af6 src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java
--- a/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/com/sun/org/apache/xpath/internal/jaxp/XPathImpl.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,6 +1,5 @@
/*
- * reserved comment block
- * DO NOT REMOVE OR ALTER!
+ * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 1999-2004 The Apache Software Foundation.
@@ -34,8 +33,6 @@
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
-import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
-import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import org.w3c.dom.Node;
import org.w3c.dom.Document;
@@ -48,6 +45,9 @@
import java.io.IOException;
+import jdk.xml.internal.JdkXmlFeatures;
+import jdk.xml.internal.JdkXmlUtils;
+
/**
* The XPathImpl class provides implementation for the methods defined in
* javax.xml.xpath.XPath interface. This provide simple access to the results
@@ -70,21 +70,21 @@
// Secure Processing Feature is set on XPathFactory then the invocation of
// extensions function need to throw XPathFunctionException
private boolean featureSecureProcessing = false;
- private boolean useServiceMechanism = true;
- private final FeatureManager featureManager;
+ private boolean overrideDefaultParser = true;
+ private final JdkXmlFeatures featureManager;
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr ) {
- this(vr, fr, false, true, new FeatureManager());
+ this(vr, fr, false, new JdkXmlFeatures(false));
}
XPathImpl( XPathVariableResolver vr, XPathFunctionResolver fr,
- boolean featureSecureProcessing, boolean useServiceMechanism,
- FeatureManager featureManager) {
+ boolean featureSecureProcessing, JdkXmlFeatures featureManager) {
this.origVariableResolver = this.variableResolver = vr;
this.origFunctionResolver = this.functionResolver = fr;
this.featureSecureProcessing = featureSecureProcessing;
- this.useServiceMechanism = useServiceMechanism;
this.featureManager = featureManager;
+ this.overrideDefaultParser = featureManager.getFeature(
+ JdkXmlFeatures.XmlFeature.JDK_OVERRIDE_PARSER);
}
/**
@@ -175,9 +175,7 @@
//
// so we really have to create a fresh DocumentBuilder every time we need one
// - KK
- DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(useServiceMechanism);
- dbf.setNamespaceAware( true );
- dbf.setValidating( false );
+ DocumentBuilderFactory dbf = JdkXmlUtils.getDOMFactory(overrideDefaultParser);
return dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// this should never happen with a well-behaving JAXP implementation.
@@ -392,9 +390,9 @@
com.sun.org.apache.xpath.internal.XPath xpath = new XPath (expression, null,
prefixResolver, com.sun.org.apache.xpath.internal.XPath.SELECT );
// Can have errorListener
- XPathExpressionImpl ximpl = new XPathExpressionImpl (xpath,
+ XPathExpressionImpl ximpl = new XPathExpressionImpl(xpath,
prefixResolver, functionResolver, variableResolver,
- featureSecureProcessing, useServiceMechanism, featureManager );
+ featureSecureProcessing, featureManager );
return ximpl;
} catch ( javax.xml.transform.TransformerException te ) {
throw new XPathExpressionException ( te ) ;
diff -r abfbb18f6f3a -r 9d02485a8af6 src/javax/xml/transform/FactoryFinder.java
--- a/src/javax/xml/transform/FactoryFinder.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/javax/xml/transform/FactoryFinder.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -146,7 +146,7 @@
static Object newInstance(String className, ClassLoader cl, boolean doFallback)
throws ConfigurationError
{
- return newInstance(className, cl, doFallback, false, false);
+ return newInstance(className, cl, doFallback, false);
}
/**
@@ -165,9 +165,8 @@
* @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
* is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
*
- * @param useServicesMechanism True use services mechanism
*/
- static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader, boolean useServicesMechanism)
+ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
throws ConfigurationError
{
// make sure we have access to restricted packages
@@ -180,13 +179,8 @@
try {
Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
- Object instance = null;
- if (!useServicesMechanism) {
- instance = newInstanceNoServiceLoader(providerClass);
- }
- if (instance == null) {
- instance = providerClass.newInstance();
- }
+ Object instance = providerClass.newInstance();
+
if (debug) { // Extra check to avoid computing cl strings
dPrint("created new instance of " + providerClass +
" using ClassLoader: " + cl);
@@ -204,29 +198,6 @@
}
}
/**
- * Try to construct using newTransformerFactoryNoServiceLoader
- * method if available.
- */
- private static Object newInstanceNoServiceLoader(
- Class> providerClass
- ) {
- // Retain maximum compatibility if no security manager.
- if (System.getSecurityManager() == null) {
- return null;
- }
- try {
- Method creationMethod =
- providerClass.getDeclaredMethod(
- "newTransformerFactoryNoServiceLoader"
- );
- return creationMethod.invoke(null, (Object[])null);
- } catch (NoSuchMethodException exc) {
- return null;
- } catch (Exception exc) {
- return null;
- }
- }
- /**
* Finds the implementation Class object in the specified order. Main
* entry point.
* @return Class object of factory, never null
@@ -247,7 +218,7 @@
String systemProp = ss.getSystemProperty(factoryId);
if (systemProp != null) {
dPrint("found system property, value=" + systemProp);
- return newInstance(systemProp, null, true, false, true);
+ return newInstance(systemProp, null, true, false);
}
}
catch (SecurityException se) {
@@ -275,7 +246,7 @@
if (factoryClassName != null) {
dPrint("found in $java.home/jaxp.properties, value=" + factoryClassName);
- return newInstance(factoryClassName, null, true, false, true);
+ return newInstance(factoryClassName, null, true, false);
}
}
catch (Exception ex) {
@@ -293,7 +264,7 @@
}
dPrint("loaded from fallback value: " + fallbackClassName);
- return newInstance(fallbackClassName, null, true, false, true);
+ return newInstance(fallbackClassName, null, true, false);
}
/*
@@ -361,7 +332,7 @@
// ClassLoader because we want to avoid the case where the
// resource file was found using one ClassLoader and the
// provider class was instantiated using a different one.
- return newInstance(factoryClassName, cl, false, useBSClsLoader, true);
+ return newInstance(factoryClassName, cl, false, useBSClsLoader);
}
// No provider found
diff -r abfbb18f6f3a -r 9d02485a8af6 src/javax/xml/transform/TransformerFactory.java
--- a/src/javax/xml/transform/TransformerFactory.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/javax/xml/transform/TransformerFactory.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2017, 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
diff -r abfbb18f6f3a -r 9d02485a8af6 src/javax/xml/validation/SchemaFactoryFinder.java
--- a/src/javax/xml/validation/SchemaFactoryFinder.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/javax/xml/validation/SchemaFactoryFinder.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2017, 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
@@ -25,6 +25,7 @@
package javax.xml.validation;
+import com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -168,7 +169,7 @@
String r = ss.getSystemProperty(propertyName);
if(r!=null) {
debugPrintln("The value is '"+r+"'");
- sf = createInstance(r, true);
+ sf = createInstance(r);
if(sf!=null) return sf;
} else
debugPrintln("The property is undefined.");
@@ -203,7 +204,7 @@
debugPrintln("found " + factoryClassName + " in $java.home/jaxp.properties");
if (factoryClassName != null) {
- sf = createInstance(factoryClassName, true);
+ sf = createInstance(factoryClassName);
if(sf != null){
return sf;
}
@@ -234,7 +235,7 @@
// platform default
if(schemaLanguage.equals("http://www.w3.org/2001/XMLSchema")) {
debugPrintln("attempting to use the platform default XML Schema validator");
- return createInstance("com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory", true);
+ return new XMLSchemaFactory();
}
debugPrintln("all things were tried, but none was found. bailing out.");
@@ -279,11 +280,7 @@
* @return null
* if it fails. Error messages will be printed by this method.
*/
- SchemaFactory createInstance( String className ) {
- return createInstance( className, false );
- }
-
- SchemaFactory createInstance( String className, boolean useServicesMechanism ) {
+ SchemaFactory createInstance(String className) {
SchemaFactory schemaFactory = null;
debugPrintln("createInstance(" + className + ")");
@@ -298,12 +295,7 @@
// instantiate Class as a SchemaFactory
try {
- if (!useServicesMechanism) {
- schemaFactory = (SchemaFactory) newInstanceNoServiceLoader(clazz);
- }
- if (schemaFactory == null) {
- schemaFactory = (SchemaFactory) clazz.newInstance();
- }
+ schemaFactory = (SchemaFactory) clazz.newInstance();
} catch (ClassCastException classCastException) {
debugPrintln("could not instantiate " + clazz.getName());
if (debug) {
@@ -326,29 +318,6 @@
return schemaFactory;
}
- /**
- * Try to construct using newTransformerFactoryNoServiceLoader
- * method if available.
- */
- private static Object newInstanceNoServiceLoader(
- Class> providerClass
- ) {
- // Retain maximum compatibility if no security manager.
- if (System.getSecurityManager() == null) {
- return null;
- }
- try {
- Method creationMethod =
- providerClass.getDeclaredMethod(
- "newXMLSchemaFactoryNoServiceLoader"
- );
- return creationMethod.invoke(null, (Object[])null);
- } catch (NoSuchMethodException exc) {
- return null;
- } catch (Exception exc) {
- return null;
- }
- }
/** Iterator that lazily computes one value and returns it. */
private static abstract class SingleIterator implements Iterator {
diff -r abfbb18f6f3a -r 9d02485a8af6 src/javax/xml/xpath/XPathFactoryFinder.java
--- a/src/javax/xml/xpath/XPathFactoryFinder.java Mon Feb 05 11:38:57 2018 +0000
+++ b/src/javax/xml/xpath/XPathFactoryFinder.java Mon Feb 05 16:46:01 2018 +0000
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2017, 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
@@ -25,6 +25,7 @@
package javax.xml.xpath;
+import com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
@@ -165,7 +166,7 @@
String r = ss.getSystemProperty(propertyName);
if(r!=null) {
debugPrintln("The value is '"+r+"'");
- xpathFactory = createInstance(r, true);
+ xpathFactory = createInstance(r);
if(xpathFactory != null) return xpathFactory;
} else
debugPrintln("The property is undefined.");
@@ -200,7 +201,7 @@
debugPrintln("found " + factoryClassName + " in $java.home/jaxp.properties");
if (factoryClassName != null) {
- xpathFactory = createInstance(factoryClassName, true);
+ xpathFactory = createInstance(factoryClassName);
if(xpathFactory != null){
return xpathFactory;
}
@@ -233,7 +234,7 @@
// platform default
if(uri.equals(XPathFactory.DEFAULT_OBJECT_MODEL_URI)) {
debugPrintln("attempting to use the platform default W3C DOM XPath lib");
- return createInstance("com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl", true);
+ return new XPathFactoryImpl();
}
debugPrintln("all things were tried, but none was found. bailing out.");
@@ -279,10 +280,7 @@
* @return null
* if it fails. Error messages will be printed by this method.
*/
- XPathFactory createInstance( String className ) {
- return createInstance( className, false );
- }
- XPathFactory createInstance( String className, boolean useServicesMechanism ) {
+ XPathFactory createInstance(String className) {
XPathFactory xPathFactory = null;
debugPrintln("createInstance(" + className + ")");
@@ -297,12 +295,7 @@
// instantiate Class as a XPathFactory
try {
- if (!useServicesMechanism) {
- xPathFactory = (XPathFactory) newInstanceNoServiceLoader(clazz);
- }
- if (xPathFactory == null) {
xPathFactory = (XPathFactory) clazz.newInstance();
- }
} catch (ClassCastException classCastException) {
debugPrintln("could not instantiate " + clazz.getName());
if (debug) {
@@ -325,29 +318,6 @@
return xPathFactory;
}
- /**
- * Try to construct using newXPathFactoryNoServiceLoader
- * method if available.
- */
- private static Object newInstanceNoServiceLoader(
- Class> providerClass
- ) {
- // Retain maximum compatibility if no security manager.
- if (System.getSecurityManager() == null) {
- return null;
- }
- try {
- Method creationMethod =
- providerClass.getDeclaredMethod(
- "newXPathFactoryNoServiceLoader"
- );
- return creationMethod.invoke(null, (Object[])null);
- } catch (NoSuchMethodException exc) {
- return null;
- } catch (Exception exc) {
- return null;
- }
- }
/**
* Look up a value in a property file.