This commit is contained in:
Phil Race 2016-08-01 10:06:00 -07:00
commit 8103ede959
381 changed files with 14223 additions and 6013 deletions

View File

@ -371,3 +371,4 @@ d53037a90c441cb528dc41c30827985de0e67c62 jdk-9+123
03e7b2c5ae345be3caf981d76ceb3efe5ff447f8 jdk-9+126
8e45018bde9de4ad15b972ae62874bba52dba2d5 jdk-9+127
5bf88dce615f6804f9e101a96ffa7c9dfb4fbbbe jdk-9+128
e8373543a3f0f60589b7d72b1f9b172721124caf jdk-9+129

View File

@ -371,3 +371,4 @@ f80c841ae2545eaf9acd2724bccc305d98cefbe2 jdk-9+124
3a58466296d36944454756ef01e7513ac5e14a16 jdk-9+126
8fa686245bd2a072ece3392743460030f0854520 jdk-9+127
b30ae794d974d7dd3eb4e84203f70021823fa6c6 jdk-9+128
f5902d3841b82cac6e7716a20c24e8e916fb14a8 jdk-9+129

View File

@ -175,8 +175,8 @@ VERSION_NUMBER_FOUR_POSITIONS := @VERSION_NUMBER_FOUR_POSITIONS@
VERSION_STRING := @VERSION_STRING@
# The short version string, without trailing zeroes and just PRE, if present.
VERSION_SHORT := @VERSION_SHORT@
# The Java specification version. It should be equal to version number.
VERSION_SPECIFICATION := @VERSION_NUMBER@
# The Java specification version. It usually equals to the major version number.
VERSION_SPECIFICATION := @VERSION_MAJOR@
# A GA version is defined by the PRE string being empty. Rather than testing for
# that, this variable defines it with true/false.
VERSION_IS_GA := @VERSION_IS_GA@

View File

@ -371,3 +371,4 @@ e33a34cc551907617d8129c4faaf1a5a7e61d21c jdk-9+123
c7f5ba08fcd4b8416e62c21229f9a07c95498919 jdk-9+126
8fab452b6f4710762ba1d8e55fd62db00b1355fe jdk-9+127
1f093d3f8cd99cd37c3b0af4cf5c3bffaa9c8b98 jdk-9+128
c3e83ccab3bb1733ae903d681879a33f85ed465c jdk-9+129

View File

@ -531,3 +531,4 @@ bb640b49741af3f57f9994129934c46fc173219f jdk-9+125
adc8c84b7cf8c540d920182f78a2bc982366432a jdk-9+126
352357128f602dcf0426b1cbe011a4685a4d9f97 jdk-9+127
22bf6db9767b1b3a1994cbf32eb3331f31ae2093 jdk-9+128
e96b34b76d863ed1fa04e0eeb3f297ac17b490fd jdk-9+129

View File

@ -371,3 +371,4 @@ e04a15153cc293f05fcd60bc98236f50e16af46a jdk-9+124
15722f71281f034bc696d8b96136da2ef34da44f jdk-9+126
bdc3c0b737efbf899709eb3121ce760dcfb51151 jdk-9+127
8a7681a9d70640ac7fbf05c28f53c1d51d8d00a1 jdk-9+128
74241304e87b0d463391a8ecab40979b5af86dc2 jdk-9+129

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -223,12 +223,6 @@ public final class XalanConstants {
public static final String XML_SECURITY_PROPERTY_MANAGER =
ORACLE_JAXP_PROPERTY_PREFIX + "xmlSecurityPropertyManager";
/**
* Feature enableExtensionFunctions
*/
public static final String ORACLE_ENABLE_EXTENSION_FUNCTION =
ORACLE_JAXP_PROPERTY_PREFIX + "enableExtensionFunctions";
public static final String SP_ORACLE_ENABLE_EXTENSION_FUNCTION = "javax.xml.enableExtensionFunctions";
/**
* Values for a feature

View File

@ -1,124 +0,0 @@
/*
* Copyright (c) 2011, 2013, 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);
}
}

View File

@ -33,7 +33,6 @@ import com.sun.org.apache.bcel.internal.generic.LDC;
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.xsltc.compiler.util.BooleanType;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ClassGenerator;
@ -55,6 +54,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Vector;
import jdk.xml.internal.JdkXmlFeatures;
/**
* @author Jacek Ambroziak
@ -741,7 +741,7 @@ class FunctionCall extends Expression {
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
@ -971,7 +971,7 @@ class FunctionCall extends Expression {
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 process with loading
if (namespace != null && isSecureProcessing

View File

@ -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
@ -9,7 +9,7 @@
* (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
* 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,
@ -17,9 +17,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: LiteralElement.java,v 1.2.4.1 2005/09/13 12:38:33 pvedula Exp $
*/
package com.sun.org.apache.xalan.internal.xsltc.compiler;
@ -58,8 +55,6 @@ final class LiteralElement extends Instruction {
// names are not known at compile time.
private boolean _allAttributesUnique = false;
private final static String XMLNS_STRING = "xmlns";
/**
* Returns the QName for this literal element
*/
@ -140,8 +135,8 @@ final class LiteralElement extends Instruction {
// Treat default namespace as "" and not null
if (prefix == null)
prefix = Constants.EMPTYSTRING;
else if (prefix.equals(XMLNS_STRING))
return(XMLNS_STRING);
else if (prefix.equals(XMLNS_PREFIX))
return(XMLNS_PREFIX);
// Check if we must translate the prefix
final String alternative = stable.lookupPrefixAlias(prefix);
@ -264,7 +259,7 @@ final class LiteralElement extends Instruction {
// Ignore special attributes (e.g. xmlns:prefix and xmlns)
final String prefix = qname.getPrefix();
if (prefix != null && prefix.equals(XMLNS_PREFIX) ||
prefix == null && qname.getLocalPart().equals("xmlns") ||
prefix == null && qname.getLocalPart().equals(XMLNS_PREFIX) ||
uri != null && uri.equals(XSLT_URI))
{
continue;
@ -337,9 +332,9 @@ final class LiteralElement extends Instruction {
il.append(methodGen.startElement());
// The value of an attribute may depend on a (sibling) variable
int j=0;
int j = 0;
while (j < elementCount()) {
final SyntaxTreeNode item = (SyntaxTreeNode) elementAt(j);
final SyntaxTreeNode item = elementAt(j);
if (item instanceof Variable) {
item.translate(classGen, methodGen);
}
@ -348,35 +343,12 @@ final class LiteralElement extends Instruction {
// Compile code to emit namespace attributes
if (_accessedPrefixes != null) {
boolean declaresDefaultNS = false;
for (Map.Entry<String, String> entry : _accessedPrefixes.entrySet()) {
final String prefix = entry.getKey();
final String uri = entry.getValue();
if (uri != Constants.EMPTYSTRING ||
prefix != Constants.EMPTYSTRING)
{
if (prefix == Constants.EMPTYSTRING) {
declaresDefaultNS = true;
}
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg,prefix));
il.append(new PUSH(cpg,uri));
il.append(methodGen.namespace());
}
}
/*
* If our XslElement parent redeclares the default NS, and this
* element doesn't, it must be redeclared one more time.
*/
if (!declaresDefaultNS && (_parent instanceof XslElement)
&& ((XslElement) _parent).declaresDefaultNS())
{
il.append(methodGen.loadHandler());
il.append(new PUSH(cpg, Constants.EMPTYSTRING));
il.append(new PUSH(cpg, Constants.EMPTYSTRING));
il.append(new PUSH(cpg, prefix));
il.append(new PUSH(cpg, uri));
il.append(methodGen.namespace());
}
}

View File

@ -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
@ -17,9 +17,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: Parser.java,v 1.2.4.1 2005/09/13 12:14:32 pvedula Exp $
*/
package com.sun.org.apache.xalan.internal.xsltc.compiler;
@ -37,6 +34,7 @@ import com.sun.org.apache.xml.internal.serializer.utils.SystemIDResolver;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -44,17 +42,20 @@ import java.util.Map;
import java.util.Properties;
import java.util.Stack;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import jdk.xml.internal.JdkXmlFeatures;
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.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.AttributesImpl;
@ -68,20 +69,20 @@ import org.xml.sax.helpers.AttributesImpl;
*/
public class Parser implements Constants, ContentHandler {
private static final String XSL = "xsl"; // standard prefix
private static final String XSL = "xsl"; // standard prefix
private static final String TRANSLET = "translet"; // extension prefix
private Locator _locator = null;
private XSLTC _xsltc; // Reference to the compiler object.
private XPathParser _xpathParser; // Reference to the XPath parser.
private Vector _errors; // Contains all compilation errors
private Vector _warnings; // Contains all compilation errors
private XSLTC _xsltc; // Reference to the compiler object.
private XPathParser _xpathParser; // Reference to the XPath parser.
private ArrayList<ErrorMsg> _errors; // Contains all compilation errors
private ArrayList<ErrorMsg> _warnings; // Contains all compilation warnings
private Map<String, String> _instructionClasses; // Maps instructions to classes
private Map<String, String[]> _instructionAttrs; // reqd and opt attrs
private Map<String, QName> _qNames;
private Map<String, Map> _namespaces;
private Map<String, QName> _qNames;
private Map<String, Map<String, QName>> _namespaces;
private QName _useAttributeSets;
private QName _excludeResultPrefixes;
private QName _extensionElementPrefixes;
@ -113,8 +114,8 @@ public class Parser implements Constants, ContentHandler {
_instructionAttrs = new HashMap<>();
_variableScope = new HashMap<>();
_template = null;
_errors = new Vector();
_warnings = new Vector();
_errors = new ArrayList<>();
_warnings = new ArrayList<>();
_symbolTable = new SymbolTable();
_xpathParser = new XPathParser(this);
_currentStylesheet = null;
@ -139,7 +140,6 @@ public class Parser implements Constants, ContentHandler {
public void setOutput(Output output) {
if (_output != null) {
if (_output.getImportPrecedence() <= output.getImportPrecedence()) {
String cdata = _output.getCdata();
output.mergeOutput(_output);
_output.disable();
_output = output;
@ -173,12 +173,13 @@ public class Parser implements Constants, ContentHandler {
Object existing = _variableScope.get(var.getName().getStringRep());
if (existing != null) {
if (existing instanceof Stack) {
Stack stack = (Stack)existing;
@SuppressWarnings("unchecked")
Stack<VariableBase> stack = (Stack<VariableBase>)existing;
stack.push(var);
}
else if (existing instanceof VariableBase) {
Stack stack = new Stack();
stack.push(existing);
Stack<VariableBase> stack = new Stack<>();
stack.push((VariableBase)existing);
stack.push(var);
_variableScope.put(var.getName().getStringRep(), stack);
}
@ -191,7 +192,8 @@ public class Parser implements Constants, ContentHandler {
public void removeVariable(QName name) {
Object existing = _variableScope.get(name.getStringRep());
if (existing instanceof Stack) {
Stack stack = (Stack)existing;
@SuppressWarnings("unchecked")
Stack<VariableBase> stack = (Stack<VariableBase>)existing;
if (!stack.isEmpty()) stack.pop();
if (!stack.isEmpty()) return;
}
@ -201,13 +203,14 @@ public class Parser implements Constants, ContentHandler {
public VariableBase lookupVariable(QName name) {
Object existing = _variableScope.get(name.getStringRep());
if (existing instanceof VariableBase) {
return((VariableBase)existing);
return (VariableBase)existing;
}
else if (existing instanceof Stack) {
Stack stack = (Stack)existing;
return((VariableBase)stack.peek());
@SuppressWarnings("unchecked")
Stack<VariableBase> stack = (Stack<VariableBase>)existing;
return stack.peek();
}
return(null);
return null;
}
public void setXSLTC(XSLTC xsltc) {
@ -397,10 +400,9 @@ public class Parser implements Constants, ContentHandler {
try {
if (stylesheet != null) {
stylesheet.parseContents(this);
final int precedence = stylesheet.getImportPrecedence();
final Iterator<SyntaxTreeNode> elements = stylesheet.elements();
while (elements.hasNext()) {
Object child = elements.next();
SyntaxTreeNode child = elements.next();
if (child instanceof Text) {
final int l = getLineNumber();
ErrorMsg err =
@ -475,9 +477,10 @@ public class Parser implements Constants, ContentHandler {
try {
factory.setFeature(Constants.NAMESPACE_FEATURE,true);
}
catch (Exception e) {
catch (ParserConfigurationException | SAXNotRecognizedException | SAXNotSupportedException e) {
factory.setNamespaceAware(true);
}
final SAXParser parser = factory.newSAXParser();
try {
parser.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD,
@ -488,6 +491,28 @@ public class Parser implements Constants, ContentHandler {
reportError(WARNING, err);
}
boolean supportCatalog = true;
boolean useCatalog = _xsltc.getFeature(JdkXmlFeatures.XmlFeature.USE_CATALOG);
try {
factory.setFeature(JdkXmlUtils.USE_CATALOG,useCatalog);
}
catch (ParserConfigurationException | SAXNotRecognizedException | SAXNotSupportedException e) {
supportCatalog = false;
}
if (supportCatalog && useCatalog) {
try {
CatalogFeatures cf = (CatalogFeatures)_xsltc.getProperty(JdkXmlFeatures.CATALOG_FEATURES);
if (cf != null) {
for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
parser.setProperty(f.getPropertyName(), cf.get(f));
}
}
} catch (SAXNotRecognizedException e) {
//shall not happen for internal settings
}
}
final XMLReader reader = parser.getXMLReader();
String lastProperty = "";
try {
@ -704,8 +729,6 @@ public class Parser implements Constants, ContentHandler {
new String[] {"stylesheet-prefix", "result-prefix"});
}
/**
* Initialize the _instructionClasses map, which maps XSL element
* names to Java classes in this package.
@ -779,6 +802,7 @@ public class Parser implements Constants, ContentHandler {
/**
* Add primops and base functions to the symbol table.
*/
@SuppressWarnings("unused")
private void initSymbolTable() {
MethodType I_V = new MethodType(Type.Int, Type.Void);
MethodType I_R = new MethodType(Type.Int, Type.Real);
@ -971,12 +995,12 @@ public class Parser implements Constants, ContentHandler {
String local, Attributes attributes)
{
SyntaxTreeNode node = null;
QName qname = getQName(uri, prefix, local);
QName qname = getQName(uri, prefix, local);
String className = _instructionClasses.get(qname.getStringRep());
if (className != null) {
try {
final Class clazz = ObjectFactory.findProviderClass(className, true);
final Class<?> clazz = ObjectFactory.findProviderClass(className, true);
node = (SyntaxTreeNode)clazz.newInstance();
node.setQName(qname);
node.setParser(this);
@ -1023,7 +1047,7 @@ public class Parser implements Constants, ContentHandler {
else {
Stylesheet sheet = _xsltc.getStylesheet();
if ((sheet != null) && (sheet.isExtension(uri))) {
if (sheet != (SyntaxTreeNode)_parentStack.peek()) {
if (sheet != _parentStack.peek()) {
node = new UnsupportedElement(uri, prefix, local, true);
UnsupportedElement elem = (UnsupportedElement)node;
ErrorMsg msg =
@ -1156,7 +1180,6 @@ public class Parser implements Constants, ContentHandler {
node.setParser(this);
node.setParent(parent);
node.setLineNumber(line);
// System.out.println("e = " + text + " " + node);
return node;
}
}
@ -1191,7 +1214,7 @@ public class Parser implements Constants, ContentHandler {
if (size > 0) {
System.err.println(new ErrorMsg(ErrorMsg.COMPILER_ERROR_KEY));
for (int i = 0; i < size; i++) {
System.err.println(" " + _errors.elementAt(i));
System.err.println(" " + _errors.get(i));
}
}
}
@ -1204,7 +1227,7 @@ public class Parser implements Constants, ContentHandler {
if (size > 0) {
System.err.println(new ErrorMsg(ErrorMsg.COMPILER_WARNING_KEY));
for (int i = 0; i < size; i++) {
System.err.println(" " + _warnings.elementAt(i));
System.err.println(" " + _warnings.get(i));
}
}
}
@ -1217,42 +1240,42 @@ public class Parser implements Constants, ContentHandler {
case Constants.INTERNAL:
// Unexpected internal errors, such as null-ptr exceptions, etc.
// Immediately terminates compilation, no translet produced
_errors.addElement(error);
_errors.add(error);
break;
case Constants.UNSUPPORTED:
// XSLT elements that are not implemented and unsupported ext.
// Immediately terminates compilation, no translet produced
_errors.addElement(error);
_errors.add(error);
break;
case Constants.FATAL:
// Fatal error in the stylesheet input (parsing or content)
// Immediately terminates compilation, no translet produced
_errors.addElement(error);
_errors.add(error);
break;
case Constants.ERROR:
// Other error in the stylesheet input (parsing or content)
// Does not terminate compilation, no translet produced
_errors.addElement(error);
_errors.add(error);
break;
case Constants.WARNING:
// Other error in the stylesheet input (content errors only)
// Does not terminate compilation, a translet is produced
_warnings.addElement(error);
_warnings.add(error);
break;
}
}
public Vector getErrors() {
public ArrayList<ErrorMsg> getErrors() {
return _errors;
}
public Vector getWarnings() {
public ArrayList<ErrorMsg> getWarnings() {
return _warnings;
}
/************************ SAX2 ContentHandler INTERFACE *****************/
private Stack _parentStack = null;
private Stack<SyntaxTreeNode> _parentStack = null;
private Map<String, String> _prefixMapping = null;
/**
@ -1262,7 +1285,7 @@ public class Parser implements Constants, ContentHandler {
_root = null;
_target = null;
_prefixMapping = null;
_parentStack = new Stack();
_parentStack = new Stack<>();
}
/**
@ -1318,7 +1341,7 @@ public class Parser implements Constants, ContentHandler {
_root = element;
}
else {
SyntaxTreeNode parent = (SyntaxTreeNode)_parentStack.peek();
SyntaxTreeNode parent = _parentStack.peek();
parent.addElement(element);
element.setParent(parent);
}
@ -1349,7 +1372,7 @@ public class Parser implements Constants, ContentHandler {
*/
public void characters(char[] ch, int start, int length) {
String string = new String(ch, start, length);
SyntaxTreeNode parent = (SyntaxTreeNode)_parentStack.peek();
SyntaxTreeNode parent = _parentStack.peek();
if (string.length() == 0) return;

View File

@ -73,7 +73,7 @@ public abstract class SyntaxTreeNode implements Constants {
protected QName _qname; // The element QName
private int _line; // Source file line number
protected AttributesImpl _attributes = null; // Attributes of this element
private Map<String, String> _prefixMapping = null; // Namespace declarations
private Map<String, String> _prefixMapping = null; // Namespace declarations
// Sentinel - used to denote unrecognised syntaxt tree nodes.
protected static final SyntaxTreeNode Dummy = new AbsolutePathPattern(null);
@ -828,7 +828,7 @@ public abstract class SyntaxTreeNode implements Constants {
* @param pos The child node's position.
* @return The child node.
*/
protected final Object elementAt(int pos) {
protected final SyntaxTreeNode elementAt(int pos) {
return _contents.get(pos);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -17,16 +17,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: XSLTC.java,v 1.2.4.1 2005/09/05 09:51:38 pvedula Exp $
*/
package com.sun.org.apache.xalan.internal.xsltc.compiler;
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;
@ -39,20 +34,21 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Objects;
import java.util.Properties;
import java.util.Vector;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlFeatures;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
@ -101,7 +97,7 @@ public final class XSLTC {
// All literal text in the stylesheet
private Vector m_characterData;
private ArrayList<StringBuilder> m_characterData;
// These define the various methods for outputting the translet
public static final int FILE_OUTPUT = 0;
@ -152,26 +148,31 @@ public final class XSLTC {
private XMLSecurityManager _xmlSecurityManager;
private final FeatureManager _featureManager;
private final JdkXmlFeatures _xmlFeatures;
/**
* Extension function class loader variables
*/
/* Class loader reference that will be used to external extension functions loading */
/* Class loader reference that will be used for external extension functions loading */
private ClassLoader _extensionClassLoader;
/**
* HashSet with the loaded classes
* HashMap with the loaded classes
*/
private final Map<String, Class> _externalExtensionFunctions;
/**
* Catalog features
*/
CatalogFeatures _catalogFeatures;
/**
* XSLTC compiler constructor
*/
public XSLTC(boolean useServicesMechanism, FeatureManager featureManager) {
public XSLTC(boolean useServicesMechanism, JdkXmlFeatures featureManager) {
_parser = new Parser(this, useServicesMechanism);
_featureManager = featureManager;
_xmlFeatures = featureManager;
_extensionClassLoader = null;
_externalExtensionFunctions = new HashMap<>();
}
@ -208,12 +209,14 @@ public final class XSLTC {
* @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);
}
/**
* Return allowed protocols for accessing external stylesheet.
* @param name the name of the property
* @return the value of the property
*/
public Object getProperty(String name) {
if (name.equals(XMLConstants.ACCESS_EXTERNAL_STYLESHEET)) {
@ -225,12 +228,16 @@ public final class XSLTC {
return _xmlSecurityManager;
} else if (name.equals(XalanConstants.JDK_EXTENSION_CLASSLOADER)) {
return _extensionClassLoader;
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
return _catalogFeatures;
}
return null;
}
/**
* Set allowed protocols for accessing external stylesheet.
* @param name the name of the property
* @param value the value of the property
*/
public void setProperty(String name, Object value) {
if (name.equals(XMLConstants.ACCESS_EXTERNAL_STYLESHEET)) {
@ -245,6 +252,8 @@ public final class XSLTC {
/* Clear the external extension functions HashMap if extension class
loader was changed */
_externalExtensionFunctions.clear();
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
_catalogFeatures = (CatalogFeatures)value;
}
}
@ -286,7 +295,7 @@ public final class XSLTC {
}
/*
* Function loads an external external extension functions.
* Function loads an external extension function.
* The filtering of function types (external,internal) takes place in FunctionCall class
*
*/
@ -601,18 +610,18 @@ public final class XSLTC {
}
/**
* Get a Vector containing all compile error messages
* @return A Vector containing all compile error messages
* Get a list of all compile error messages
* @return A List containing all compile error messages
*/
public Vector getErrors() {
public ArrayList<ErrorMsg> getErrors() {
return _parser.getErrors();
}
/**
* Get a Vector containing all compile warning messages
* @return A Vector containing all compile error messages
* Get a list of all compile warning messages
* @return A List containing all compile error messages
*/
public Vector getWarnings() {
public ArrayList<ErrorMsg> getWarnings() {
return _parser.getWarnings();
}
@ -991,7 +1000,7 @@ public final class XSLTC {
* <code>char[]</code>.
*/
public String getCharacterData(int index) {
return ((StringBuffer) m_characterData.elementAt(index)).toString();
return (m_characterData.get(index)).toString();
}
/**
@ -1010,14 +1019,13 @@ public final class XSLTC {
* @return int offset at which character data will be stored
*/
public int addCharacterData(String newData) {
StringBuffer currData;
StringBuilder currData;
if (m_characterData == null) {
m_characterData = new Vector();
currData = new StringBuffer();
m_characterData.addElement(currData);
m_characterData = new ArrayList<>();
currData = new StringBuilder();
m_characterData.add(currData);
} else {
currData = (StringBuffer) m_characterData
.elementAt(m_characterData.size()-1);
currData = m_characterData.get(m_characterData.size()-1);
}
// Character data could take up to three-times as much space when
@ -1025,8 +1033,8 @@ public final class XSLTC {
// constant is 65535/3. If we exceed that,
// (We really should use some "bin packing".)
if (newData.length() + currData.length() > 21845) {
currData = new StringBuffer();
m_characterData.addElement(currData);
currData = new StringBuilder();
m_characterData.add(currData);
}
int newDataOffset = currData.length();

View File

@ -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
@ -17,16 +17,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: XslElement.java,v 1.2.4.1 2005/09/12 11:39:55 pvedula Exp $
*/
package com.sun.org.apache.xalan.internal.xsltc.compiler;
import com.sun.org.apache.bcel.internal.generic.ALOAD;
import com.sun.org.apache.bcel.internal.generic.ASTORE;
import com.sun.org.apache.bcel.internal.generic.ConstantPoolGen;
import com.sun.org.apache.bcel.internal.generic.ICONST;
import com.sun.org.apache.bcel.internal.generic.INVOKESTATIC;
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
@ -61,14 +57,6 @@ final class XslElement extends Instruction {
displayContents(indent + IndentIncrement);
}
/**
* This method is now deprecated. The new implemation of this class
* never declares the default NS.
*/
public boolean declaresDefaultNS() {
return false;
}
public void parseContents(Parser parser) {
final SymbolTable stable = parser.getSymbolTable();
@ -211,7 +199,6 @@ final class XslElement extends Instruction {
* on the handler (vii) evaluates the contents (viii) calls endElement().
*/
public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
LocalVariableGen local = null;
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 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
*
@ -17,18 +17,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: TemplatesHandlerImpl.java,v 1.2.4.1 2005/09/06 12:09:03 pvedula Exp $
*/
package com.sun.org.apache.xalan.internal.xsltc.trax;
import javax.xml.XMLConstants;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.sax.TemplatesHandler;
import com.sun.org.apache.xalan.internal.XalanConstants;
import com.sun.org.apache.xalan.internal.xsltc.compiler.CompilerException;
import com.sun.org.apache.xalan.internal.xsltc.compiler.Parser;
@ -37,14 +28,20 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet;
import com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode;
import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import java.util.ArrayList;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.transform.Source;
import javax.xml.transform.Templates;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.sax.TemplatesHandler;
import jdk.xml.internal.JdkXmlFeatures;
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.Attributes;
import java.util.Vector;
/**
* Implementation of a JAXP1.1 TemplatesHandler
@ -85,6 +82,12 @@ public class TemplatesHandlerImpl
*/
private TemplatesImpl _templates = null;
// Catalog features
CatalogFeatures _catalogFeatures;
// Catalog is enabled by default
boolean _useCatalog = true;
/**
* Default constructor
*/
@ -95,7 +98,7 @@ public class TemplatesHandlerImpl
_tfactory = tfactory;
// Instantiate XSLTC and get reference to parser object
XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism(), tfactory.getFeatureManager());
XSLTC xsltc = new XSLTC(tfactory.useServicesMechnism(), tfactory.getJdkXmlFeatures());
if (tfactory.getFeature(XMLConstants.FEATURE_SECURE_PROCESSING))
xsltc.setSecureProcessing(true);
@ -112,6 +115,10 @@ public class TemplatesHandlerImpl
else
xsltc.setTemplateInlining(false);
_useCatalog = tfactory.getFeature(XMLConstants.USE_CATALOG);
_catalogFeatures = (CatalogFeatures)tfactory.getAttribute(JdkXmlFeatures.CATALOG_FEATURES);
xsltc.setProperty(JdkXmlFeatures.CATALOG_FEATURES, _catalogFeatures);
_parser = xsltc.getParser();
}
@ -229,7 +236,8 @@ public class TemplatesHandlerImpl
stylesheet.setTemplateInlining(false);
// Set a document loader (for xsl:include/import) if defined
if (_uriResolver != null) {
if (_uriResolver != null || (_useCatalog &&
_catalogFeatures.get(CatalogFeatures.Feature.FILES) != null)) {
stylesheet.setSourceLoader(this);
}
@ -268,13 +276,13 @@ public class TemplatesHandlerImpl
}
}
else {
StringBuffer errorMessage = new StringBuffer();
Vector errors = _parser.getErrors();
StringBuilder errorMessage = new StringBuilder();
ArrayList<ErrorMsg> errors = _parser.getErrors();
final int count = errors.size();
for (int i = 0; i < count; i++) {
if (errorMessage.length() > 0)
errorMessage.append('\n');
errorMessage.append(errors.elementAt(i).toString());
errorMessage.append(errors.get(i).toString());
}
throw new SAXException(ErrorMsg.JAXP_COMPILE_ERR, new TransformerException(errorMessage.toString()));
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -17,17 +17,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: TransformerFactoryImpl.java,v 1.8 2007/04/09 21:30:41 joehw Exp $
*/
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;
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
@ -48,6 +43,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
@ -55,6 +51,10 @@ import java.util.Vector;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.catalog.CatalogManager;
import javax.xml.catalog.CatalogUriResolver;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.ErrorListener;
@ -75,6 +75,8 @@ import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stax.*;
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;
@ -86,6 +88,7 @@ import org.xml.sax.helpers.XMLReaderFactory;
* @author Morten Jorgensen
* @author Santiago Pericas-Geertsen
*/
@SuppressWarnings("deprecation") //org.xml.sax.helpers.XMLReaderFactory
public class TransformerFactoryImpl
extends SAXTransformerFactory implements SourceLoader, ErrorListener
{
@ -229,7 +232,7 @@ public class TransformerFactoryImpl
private XMLSecurityPropertyManager _xmlSecurityPropertyMgr;
private XMLSecurityManager _xmlSecurityManager;
private final FeatureManager _featureManager;
private final JdkXmlFeatures _xmlFeatures;
private ClassLoader _extensionClassLoader = null;
@ -238,6 +241,15 @@ public class TransformerFactoryImpl
// type checking
private Map<String, Class> _xsltcExtensionFunctions;
CatalogUriResolver _catalogUriResolver;
CatalogFeatures _catalogFeatures;
CatalogFeatures.Builder cfBuilder = CatalogFeatures.builder();
// Catalog features
String _catalogFiles = null;
String _catalogDefer = null;
String _catalogPrefer = null;
String _catalogResolve = null;
/**
* javax.xml.transform.sax.TransformerFactory implementation.
*/
@ -251,15 +263,13 @@ public class TransformerFactoryImpl
private TransformerFactoryImpl(boolean 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);
_xmlSecurityPropertyMgr = new XMLSecurityPropertyManager();
_accessExternalDTD = _xmlSecurityPropertyMgr.getValue(
Property.ACCESS_EXTERNAL_DTD);
@ -332,10 +342,10 @@ public class TransformerFactoryImpl
return _transletName;
}
else if (name.equals(GENERATE_TRANSLET)) {
return new Boolean(_generateTranslet);
return _generateTranslet;
}
else if (name.equals(AUTO_TRANSLET)) {
return new Boolean(_autoTranslet);
return _autoTranslet;
}
else if (name.equals(ENABLE_INLINING)) {
if (_enableInlining)
@ -346,6 +356,16 @@ public class TransformerFactoryImpl
return _xmlSecurityManager;
} else if (name.equals(XalanConstants.JDK_EXTENSION_CLASSLOADER)) {
return _extensionClassLoader;
} else if (JdkXmlUtils.CATALOG_FILES.equals(name)) {
return _catalogFiles;
} else if (JdkXmlUtils.CATALOG_DEFER.equals(name)) {
return _catalogDefer;
} else if (JdkXmlUtils.CATALOG_PREFER.equals(name)) {
return _catalogPrefer;
} else if (JdkXmlUtils.CATALOG_RESOLVE.equals(name)) {
return _catalogResolve;
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
return buildCatalogFeatures();
}
/** Check to see if the property is managed by the security manager **/
@ -398,7 +418,7 @@ public class TransformerFactoryImpl
}
else if (name.equals(GENERATE_TRANSLET)) {
if (value instanceof Boolean) {
_generateTranslet = ((Boolean) value).booleanValue();
_generateTranslet = ((Boolean) value);
return;
}
else if (value instanceof String) {
@ -408,7 +428,7 @@ public class TransformerFactoryImpl
}
else if (name.equals(AUTO_TRANSLET)) {
if (value instanceof Boolean) {
_autoTranslet = ((Boolean) value).booleanValue();
_autoTranslet = ((Boolean) value);
return;
}
else if (value instanceof String) {
@ -418,7 +438,7 @@ public class TransformerFactoryImpl
}
else if (name.equals(USE_CLASSPATH)) {
if (value instanceof Boolean) {
_useClasspath = ((Boolean) value).booleanValue();
_useClasspath = ((Boolean) value);
return;
}
else if (value instanceof String) {
@ -428,7 +448,7 @@ public class TransformerFactoryImpl
}
else if (name.equals(DEBUG)) {
if (value instanceof Boolean) {
_debug = ((Boolean) value).booleanValue();
_debug = ((Boolean) value);
return;
}
else if (value instanceof String) {
@ -438,7 +458,7 @@ public class TransformerFactoryImpl
}
else if (name.equals(ENABLE_INLINING)) {
if (value instanceof Boolean) {
_enableInlining = ((Boolean) value).booleanValue();
_enableInlining = ((Boolean) value);
return;
}
else if (value instanceof String) {
@ -457,7 +477,7 @@ public class TransformerFactoryImpl
}
}
else if (value instanceof Integer) {
_indentNumber = ((Integer) value).intValue();
_indentNumber = ((Integer) value);
return;
}
}
@ -470,6 +490,22 @@ public class TransformerFactoryImpl
= new ErrorMsg(ErrorMsg.JAXP_INVALID_ATTR_VALUE_ERR, "Extension Functions ClassLoader");
throw new IllegalArgumentException(err.toString());
}
} else if (JdkXmlUtils.CATALOG_FILES.equals(name)) {
_catalogFiles = (String) value;
cfBuilder = CatalogFeatures.builder().with(Feature.FILES, _catalogFiles);
return;
} else if (JdkXmlUtils.CATALOG_DEFER.equals(name)) {
_catalogDefer = (String) value;
cfBuilder = CatalogFeatures.builder().with(Feature.DEFER, _catalogDefer);
return;
} else if (JdkXmlUtils.CATALOG_PREFER.equals(name)) {
_catalogPrefer = (String) value;
cfBuilder = CatalogFeatures.builder().with(Feature.PREFER, _catalogPrefer);
return;
} else if (JdkXmlUtils.CATALOG_RESOLVE.equals(name)) {
_catalogResolve = (String) value;
cfBuilder = CatalogFeatures.builder().with(Feature.RESOLVE, _catalogResolve);
return;
}
if (_xmlSecurityManager != null &&
@ -534,18 +570,18 @@ public class TransformerFactoryImpl
// set external access restriction when FSP is explicitly set
if (value) {
_xmlSecurityPropertyMgr.setValue(Property.ACCESS_EXTERNAL_DTD,
State.FSP, XalanConstants.EXTERNAL_ACCESS_DEFAULT_FSP);
FeaturePropertyBase.State.FSP, XalanConstants.EXTERNAL_ACCESS_DEFAULT_FSP);
_xmlSecurityPropertyMgr.setValue(Property.ACCESS_EXTERNAL_STYLESHEET,
State.FSP, XalanConstants.EXTERNAL_ACCESS_DEFAULT_FSP);
FeaturePropertyBase.State.FSP, XalanConstants.EXTERNAL_ACCESS_DEFAULT_FSP);
_accessExternalDTD = _xmlSecurityPropertyMgr.getValue(
Property.ACCESS_EXTERNAL_DTD);
_accessExternalStylesheet = _xmlSecurityPropertyMgr.getValue(
Property.ACCESS_EXTERNAL_STYLESHEET);
}
if (value && _featureManager != null) {
_featureManager.setValue(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION,
FeaturePropertyBase.State.FSP, XalanConstants.FEATURE_FALSE);
if (value && _xmlFeatures != null) {
_xmlFeatures.setFeature(JdkXmlFeatures.XmlFeature.ENABLE_EXTENSION_FUNCTION,
JdkXmlFeatures.State.FSP, false);
}
}
else if (name.equals(XalanConstants.ORACLE_FEATURE_SERVICE_MECHANISM)) {
@ -554,8 +590,8 @@ public class TransformerFactoryImpl
_useServicesMechanism = value;
}
else {
if (_featureManager != null &&
_featureManager.setValue(name, State.APIPROPERTY, value)) {
if (_xmlFeatures != null &&
_xmlFeatures.setFeature(name, JdkXmlFeatures.State.APIPROPERTY, value)) {
return;
}
@ -598,21 +634,20 @@ public class TransformerFactoryImpl
}
// Inefficient, but array is small
for (int i =0; i < features.length; i++) {
for (int i = 0; i < features.length; i++) {
if (name.equals(features[i])) {
return true;
}
}
// secure processing?
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
return !_isNotSecureProcessing;
return !_isNotSecureProcessing;
}
/** Check to see if the property is managed by the security manager **/
String propertyValue = (_featureManager != null) ?
_featureManager.getValueAsString(name) : null;
if (propertyValue != null) {
return Boolean.parseBoolean(propertyValue);
/** Check to see if the property is managed by the JdkXmlFeatues **/
int index = _xmlFeatures.getIndex(name);
if (index > -1) {
return _xmlFeatures.getFeature(index);
}
// Feature not supported
@ -628,8 +663,8 @@ public class TransformerFactoryImpl
/**
* @return the feature manager
*/
public FeatureManager getFeatureManager() {
return _featureManager;
public JdkXmlFeatures getJdkXmlFeatures() {
return _xmlFeatures;
}
/**
@ -736,21 +771,9 @@ public class TransformerFactoryImpl
} catch (StopParseException e ) {
// startElement encountered so do not parse further
} catch (javax.xml.parsers.ParserConfigurationException e) {
} catch (javax.xml.parsers.ParserConfigurationException | org.xml.sax.SAXException | IOException e) {
throw new TransformerConfigurationException(
"getAssociatedStylesheets failed", e);
} catch (org.xml.sax.SAXException se) {
throw new TransformerConfigurationException(
"getAssociatedStylesheets failed", se);
} catch (IOException ioe ) {
throw new TransformerConfigurationException(
"getAssociatedStylesheets failed", ioe);
}
return _stylesheetPIHandler.getAssociatedStylesheet();
@ -768,6 +791,9 @@ public class TransformerFactoryImpl
public Transformer newTransformer()
throws TransformerConfigurationException
{
// create CatalogFeatures that is accessible by the Transformer
// through the factory instance
buildCatalogFeatures();
TransformerImpl result = new TransformerImpl(new Properties(),
_indentNumber, this);
if (_uriResolver != null) {
@ -805,7 +831,7 @@ public class TransformerFactoryImpl
/**
* Pass warning messages from the compiler to the error listener
*/
private void passWarningsToListener(Vector messages)
private void passWarningsToListener(ArrayList<ErrorMsg> messages)
throws TransformerException
{
if (_errorListener == null || messages == null) {
@ -814,7 +840,7 @@ public class TransformerFactoryImpl
// Pass messages to listener, one by one
final int count = messages.size();
for (int pos = 0; pos < count; pos++) {
ErrorMsg msg = (ErrorMsg)messages.elementAt(pos);
ErrorMsg msg = messages.get(pos);
// Workaround for the TCK failure ErrorListener.errorTests.error001.
if (msg.isWarningError())
_errorListener.error(
@ -828,7 +854,7 @@ public class TransformerFactoryImpl
/**
* Pass error messages from the compiler to the error listener
*/
private void passErrorsToListener(Vector messages) {
private void passErrorsToListener(ArrayList<ErrorMsg> messages) {
try {
if (_errorListener == null || messages == null) {
return;
@ -836,7 +862,7 @@ public class TransformerFactoryImpl
// Pass messages to listener, one by one
final int count = messages.size();
for (int pos = 0; pos < count; pos++) {
String message = messages.elementAt(pos).toString();
String message = messages.get(pos).toString();
_errorListener.error(new TransformerException(message));
}
}
@ -858,6 +884,7 @@ public class TransformerFactoryImpl
public Templates newTemplates(Source source)
throws TransformerConfigurationException
{
TemplatesImpl templates;
// If the _useClasspath attribute is true, try to load the translet from
// the CLASSPATH and create a template object using the loaded
// translet.
@ -871,7 +898,11 @@ public class TransformerFactoryImpl
final Class clazz = ObjectFactory.findProviderClass(transletName, true);
resetTransientAttributes();
return new TemplatesImpl(new Class[]{clazz}, transletName, null, _indentNumber, this);
templates = new TemplatesImpl(new Class[]{clazz}, transletName, null, _indentNumber, this);
if (_uriResolver != null) {
templates.setURIResolver(_uriResolver);
}
return templates;
}
catch (ClassNotFoundException cnfe) {
ErrorMsg err = new ErrorMsg(ErrorMsg.CLASS_NOT_FOUND_ERR, transletName);
@ -892,7 +923,7 @@ public class TransformerFactoryImpl
String transletClassName = getTransletBaseName(source);
if (_packageName != null)
transletClassName = _packageName + "." + transletClassName;
transletClassName = _packageName + "." + transletClassName;
if (_jarFileName != null)
bytecodes = getBytecodesFromJar(source, transletClassName);
@ -912,12 +943,16 @@ public class TransformerFactoryImpl
// Reset the per-session attributes to their default values
// after each newTemplates() call.
resetTransientAttributes();
return new TemplatesImpl(bytecodes, transletClassName, null, _indentNumber, this);
templates = new TemplatesImpl(bytecodes, transletClassName, null, _indentNumber, this);
if (_uriResolver != null) {
templates.setURIResolver(_uriResolver);
}
return templates;
}
}
// Create and initialize a stylesheet compiler
final XSLTC xsltc = new XSLTC(_useServicesMechanism, _featureManager);
final XSLTC xsltc = new XSLTC(_useServicesMechanism, _xmlFeatures);
if (_debug) xsltc.setDebug(true);
if (_enableInlining)
xsltc.setTemplateInlining(true);
@ -929,11 +964,17 @@ public class TransformerFactoryImpl
xsltc.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD);
xsltc.setProperty(XalanConstants.SECURITY_MANAGER, _xmlSecurityManager);
xsltc.setProperty(XalanConstants.JDK_EXTENSION_CLASSLOADER, _extensionClassLoader);
// set Catalog features
buildCatalogFeatures();
xsltc.setProperty(JdkXmlFeatures.CATALOG_FEATURES, _catalogFeatures);
xsltc.init();
if (!_isNotSecureProcessing)
_xsltcExtensionFunctions = xsltc.getExternalExtensionFunctions();
// Set a document loader (for xsl:include/import) if defined
if (_uriResolver != null) {
if (_uriResolver != null || ( _catalogFiles != null
&& _xmlFeatures.getFeature(JdkXmlFeatures.XmlFeature.USE_CATALOG))) {
xsltc.setSourceLoader(this);
}
@ -1010,43 +1051,47 @@ public class TransformerFactoryImpl
}
// Check that the transformation went well before returning
if (bytecodes == null) {
Vector errs = xsltc.getErrors();
ErrorMsg err;
if (errs != null) {
err = (ErrorMsg)errs.elementAt(errs.size()-1);
} else {
err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
}
Throwable cause = err.getCause();
TransformerConfigurationException exc;
if (cause != null) {
exc = new TransformerConfigurationException(cause.getMessage(), cause);
} else {
exc = new TransformerConfigurationException(err.toString());
}
// Pass compiler errors to the error listener
if (_errorListener != null) {
passErrorsToListener(xsltc.getErrors());
// As required by TCK 1.2, send a fatalError to the
// error listener because compilation of the stylesheet
// failed and no further processing will be possible.
try {
_errorListener.fatalError(exc);
} catch (TransformerException te) {
// well, we tried.
if (bytecodes == null) {
ArrayList<ErrorMsg> errs = xsltc.getErrors();
ErrorMsg err;
if (errs != null) {
err = errs.get(errs.size()-1);
} else {
err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
}
Throwable cause = err.getCause();
TransformerConfigurationException exc;
if (cause != null) {
exc = new TransformerConfigurationException(cause.getMessage(), cause);
} else {
exc = new TransformerConfigurationException(err.toString());
}
}
else {
xsltc.printErrors();
}
throw exc;
}
return new TemplatesImpl(bytecodes, transletName,
xsltc.getOutputProperties(), _indentNumber, this);
// Pass compiler errors to the error listener
if (_errorListener != null) {
passErrorsToListener(xsltc.getErrors());
// As required by TCK 1.2, send a fatalError to the
// error listener because compilation of the stylesheet
// failed and no further processing will be possible.
try {
_errorListener.fatalError(exc);
} catch (TransformerException te) {
// well, we tried.
}
}
else {
xsltc.printErrors();
}
throw exc;
}
templates = new TemplatesImpl(bytecodes, transletName, xsltc.getOutputProperties(),
_indentNumber, this);
if (_uriResolver != null) {
templates.setURIResolver(_uriResolver);
}
return templates;
}
/**
@ -1061,6 +1106,9 @@ public class TransformerFactoryImpl
public TemplatesHandler newTemplatesHandler()
throws TransformerConfigurationException
{
// create CatalogFeatures that is accessible by the Handler
// through the factory instance
buildCatalogFeatures();
final TemplatesHandlerImpl handler =
new TemplatesHandlerImpl(_indentNumber, this);
if (_uriResolver != null) {
@ -1272,11 +1320,19 @@ public class TransformerFactoryImpl
@Override
public InputSource loadSource(String href, String context, XSLTC xsltc) {
try {
Source source = null;
if (_uriResolver != null) {
final Source source = _uriResolver.resolve(href, context);
if (source != null) {
return Util.getInputSource(xsltc, source);
source = _uriResolver.resolve(href, context);
}
if (source == null && _catalogFiles != null &&
_xmlFeatures.getFeature(JdkXmlFeatures.XmlFeature.USE_CATALOG)) {
if (_catalogUriResolver == null) {
_catalogUriResolver = CatalogManager.catalogUriResolver(_catalogFeatures);
}
source = _catalogUriResolver.resolve(href, context);
}
if (source != null) {
return Util.getInputSource(xsltc, source);
}
}
catch (TransformerException e) {
@ -1288,6 +1344,26 @@ public class TransformerFactoryImpl
return null;
}
/**
* Build the CatalogFeatures object when a newTemplates or newTransformer is
* created. This will read any System Properties for the CatalogFeatures that
* may have been set.
*/
private CatalogFeatures buildCatalogFeatures() {
// build will cause the CatalogFeatures to read SPs for those not set through the API
if (_catalogFeatures == null) {
_catalogFeatures = cfBuilder.build();
}
// update fields
_catalogFiles = _catalogFeatures.get(Feature.FILES);
_catalogDefer = _catalogFeatures.get(Feature.DEFER);
_catalogPrefer = _catalogFeatures.get(Feature.PREFER);
_catalogResolve = _catalogFeatures.get(Feature.RESOLVE);
return _catalogFeatures;
}
/**
* Reset the per-session attributes to their default values
*/

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -60,6 +60,9 @@ import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogManager;
import javax.xml.catalog.CatalogUriResolver;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@ -80,6 +83,8 @@ import javax.xml.transform.stax.StAXResult;
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.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@ -217,6 +222,14 @@ public final class TransformerImpl extends Transformer
*/
private Map<String, Object> _parameters = null;
// Catalog features
CatalogFeatures _catalogFeatures;
CatalogUriResolver _catalogUriResolver;
// Catalog is enabled by default
boolean _useCatalog = true;
/**
* This class wraps an ErrorListener into a MessageHandler in order to
* capture messages reported via xsl:message.
@ -270,6 +283,16 @@ public final class TransformerImpl extends Transformer
_readerManager.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD);
_readerManager.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, _isSecureProcessing);
_readerManager.setProperty(XalanConstants.SECURITY_MANAGER, _securityManager);
_useCatalog = _tfactory.getFeature(XMLConstants.USE_CATALOG);
if (_useCatalog) {
_catalogFeatures = (CatalogFeatures)_tfactory.getAttribute(JdkXmlFeatures.CATALOG_FEATURES);
String catalogFiles = _catalogFeatures.get(CatalogFeatures.Feature.DEFER);
if (catalogFiles != null) {
_readerManager.setFeature(XMLConstants.USE_CATALOG, _useCatalog);
_readerManager.setProperty(JdkXmlFeatures.CATALOG_FEATURES, _catalogFeatures);
}
}
//_isIncremental = tfactory._incremental;
}
@ -339,7 +362,8 @@ public final class TransformerImpl extends Transformer
throw new TransformerException(err.toString());
}
if (_uriResolver != null && !_isIdentity) {
if (!_isIdentity && (_uriResolver != null || (_tfactory.getFeature(XMLConstants.USE_CATALOG)
&& _tfactory.getAttribute(JdkXmlUtils.CATALOG_FILES) != null))) {
_translet.setDOMCache(this);
}
@ -723,15 +747,33 @@ public final class TransformerImpl extends Transformer
((SAXSource)source).getXMLReader()==null )||
(source instanceof DOMSource &&
((DOMSource)source).getNode()==null)){
DocumentBuilderFactory builderF = FactoryImpl.getDOMFactory(_useServicesMechanism);
DocumentBuilder builder = builderF.newDocumentBuilder();
String systemID = source.getSystemId();
source = new DOMSource(builder.newDocument());
// Copy system ID from original, empty Source to new
if (systemID != null) {
source.setSystemId(systemID);
boolean supportCatalog = true;
DocumentBuilderFactory builderF = FactoryImpl.getDOMFactory(_useServicesMechanism);
try {
builderF.setFeature(XMLConstants.USE_CATALOG, _useCatalog);
} catch (ParserConfigurationException e) {
supportCatalog = false;
}
if (supportCatalog && _useCatalog) {
CatalogFeatures cf = (CatalogFeatures)_tfactory.getAttribute(JdkXmlFeatures.CATALOG_FEATURES);
if (cf != null) {
for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
builderF.setAttribute(f.getPropertyName(), cf.get(f));
}
}
}
DocumentBuilder builder = builderF.newDocumentBuilder();
String systemID = source.getSystemId();
source = new DOMSource(builder.newDocument());
// Copy system ID from original, empty Source to new
if (systemID != null) {
source.setSystemId(systemID);
}
}
if (_isIdentity) {
transformIdentity(source, handler);
@ -1287,7 +1329,19 @@ public final class TransformerImpl extends Transformer
* com.sun.org.apache.xalan.internal.xsltc.dom.LoadDocument
*
*/
Source resolvedSource = _uriResolver.resolve(href, baseURI);
Source resolvedSource = null;
if (_uriResolver != null) {
resolvedSource = _uriResolver.resolve(href, baseURI);
}
if (resolvedSource == null && _useCatalog &&
_catalogFeatures.get(CatalogFeatures.Feature.FILES) != null) {
if (_catalogUriResolver == null) {
_catalogUriResolver = CatalogManager.catalogUriResolver(_catalogFeatures);
}
resolvedSource = _catalogUriResolver.resolve(href, baseURI);
}
if (resolvedSource == null) {
StreamSource streamSource = new StreamSource(
SystemIDResolver.getAbsoluteURI(href, baseURI));

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 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
*
@ -17,37 +17,32 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: Util.java,v 1.2.4.1 2005/09/14 09:37:34 pvedula Exp $
*/
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.XMLSecurityManager;
import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import java.io.InputStream;
import java.io.Reader;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
import jdk.xml.internal.JdkXmlFeatures;
import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
@ -57,6 +52,8 @@ import org.xml.sax.helpers.XMLReaderFactory;
/**
* @author Santiago Pericas-Geertsen
*
* Added Catalog Support for URI resolution
*/
public final class Util {
@ -72,9 +69,6 @@ public final class Util {
return com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util.toJavaName(name);
}
/**
* Creates a SAX2 InputSource object from a TrAX Source object
*/
@ -169,6 +163,29 @@ public final class Util {
} catch (SAXException se) {
XMLSecurityManager.printWarning(reader.getClass().getName(), lastProperty, se);
}
boolean supportCatalog = true;
boolean useCatalog = xsltc.getFeature(JdkXmlFeatures.XmlFeature.USE_CATALOG);
try {
reader.setFeature(JdkXmlUtils.USE_CATALOG, useCatalog);
}
catch (SAXNotRecognizedException | SAXNotSupportedException e) {
supportCatalog = false;
}
if (supportCatalog & useCatalog) {
try {
CatalogFeatures cf = (CatalogFeatures)xsltc.getProperty(JdkXmlFeatures.CATALOG_FEATURES);
if (cf != null) {
for (Feature f : CatalogFeatures.Feature.values()) {
reader.setProperty(f.getPropertyName(), cf.get(f));
}
}
} catch (SAXNotRecognizedException e) {
//shall not happen for internal settings
}
}
xsltc.setXMLReader(reader);
}catch (SAXNotRecognizedException snre ) {
throw new TransformerConfigurationException

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -51,6 +51,10 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlUtils;
import jdk.xml.internal.SecuritySupport;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMErrorHandler;
import org.w3c.dom.DOMException;
@ -191,7 +195,7 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
protected SymbolTable fSymbolTable;
/** Components. */
protected ArrayList fComponents;
protected ArrayList<XMLComponent> fComponents;
protected ValidationManager fValidationManager;
@ -253,7 +257,8 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
NORMALIZE_DATA,
SEND_PSVI,
NAMESPACE_GROWTH,
TOLERATE_DUPLICATES
TOLERATE_DUPLICATES,
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
@ -266,6 +271,7 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
setFeature(XERCES_NAMESPACES, true);
setFeature(SEND_PSVI, true);
setFeature(NAMESPACE_GROWTH, false);
setFeature(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
// add default recognized properties
final String[] recognizedProperties = {
@ -282,7 +288,11 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
DTD_VALIDATOR_FACTORY_PROPERTY,
SCHEMA_DV_FACTORY,
SECURITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
addRecognizedProperties(recognizedProperties);
@ -300,7 +310,7 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
}
fSymbolTable = symbolTable;
fComponents = new ArrayList();
fComponents = new ArrayList<>();
setProperty(SYMBOL_TABLE, fSymbolTable);
fErrorReporter = new XMLErrorReporter();
@ -354,7 +364,10 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
// REVISIT: What is the right thing to do? -Ac
}
// Initialize Catalog features
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
setProperty(f.getPropertyName(), null);
}
} // <init>(SymbolTable)
@ -1027,7 +1040,7 @@ public class DOMConfigurationImpl extends ParserConfigurationSettings
int count = fComponents.size();
for (int i = 0; i < count; i++) {
XMLComponent c = (XMLComponent) fComponents.get(i);
XMLComponent c = fComponents.get(i);
c.reset(this);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -29,9 +29,13 @@ import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
import com.sun.xml.internal.stream.StaxEntityResolverWrapper;
import java.util.HashMap;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLResolver;
import jdk.xml.internal.JdkXmlUtils;
import jdk.xml.internal.SecuritySupport;
/**
* This class manages different properties related to Stax specification and its implementation.
@ -58,7 +62,7 @@ public class PropertyManager {
private static final String XML_SECURITY_PROPERTY_MANAGER =
Constants.XML_SECURITY_PROPERTY_MANAGER;
HashMap supportedProps = new HashMap();
HashMap<String, Object> supportedProps = new HashMap<>();
private XMLSecurityManager fSecurityManager;
private XMLSecurityPropertyManager fSecurityPropertyMgr;
@ -85,13 +89,13 @@ public class PropertyManager {
*/
public PropertyManager(PropertyManager propertyManager){
HashMap properties = propertyManager.getProperties();
HashMap<String, Object> properties = propertyManager.getProperties();
supportedProps.putAll(properties);
fSecurityManager = (XMLSecurityManager)getProperty(SECURITY_MANAGER);
fSecurityPropertyMgr = (XMLSecurityPropertyManager)getProperty(XML_SECURITY_PROPERTY_MANAGER);
}
private HashMap getProperties(){
private HashMap<String, Object> getProperties(){
return supportedProps ;
}
@ -117,30 +121,36 @@ public class PropertyManager {
//zephyr (implementation) specific properties which can be set by the application.
//interning is always done
supportedProps.put(Constants.SAX_FEATURE_PREFIX + Constants.STRING_INTERNING_FEATURE , new Boolean(true));
supportedProps.put(Constants.SAX_FEATURE_PREFIX + Constants.STRING_INTERNING_FEATURE , true);
//recognizing java encoding names by default
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.ALLOW_JAVA_ENCODINGS_FEATURE, new Boolean(true)) ;
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.ALLOW_JAVA_ENCODINGS_FEATURE, true) ;
//in stax mode, namespace declarations are not added as attributes
supportedProps.put(Constants.ADD_NAMESPACE_DECL_AS_ATTRIBUTE , Boolean.FALSE) ;
supportedProps.put(Constants.READER_IN_DEFINED_STATE, new Boolean(true));
supportedProps.put(Constants.REUSE_INSTANCE, new Boolean(true));
supportedProps.put(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT , new Boolean(false));
supportedProps.put(Constants.READER_IN_DEFINED_STATE, true);
supportedProps.put(Constants.REUSE_INSTANCE, true);
supportedProps.put(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.STAX_REPORT_CDATA_EVENT , false);
supportedProps.put(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD, Boolean.FALSE);
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_DUPLICATE_ATTDEF_FEATURE, new Boolean(false));
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_DUPLICATE_ENTITYDEF_FEATURE, new Boolean(false));
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_UNDECLARED_ELEMDEF_FEATURE, new Boolean(false));
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_DUPLICATE_ATTDEF_FEATURE, false);
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_DUPLICATE_ENTITYDEF_FEATURE, false);
supportedProps.put(Constants.XERCES_FEATURE_PREFIX + Constants.WARN_ON_UNDECLARED_ELEMDEF_FEATURE, false);
fSecurityManager = new XMLSecurityManager(true);
supportedProps.put(SECURITY_MANAGER, fSecurityManager);
fSecurityPropertyMgr = new XMLSecurityPropertyManager();
supportedProps.put(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr);
// Initialize Catalog features
supportedProps.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
supportedProps.put(f.getPropertyName(), null);
}
}
private void initWriterProps(){
supportedProps.put(XMLOutputFactory.IS_REPAIRING_NAMESPACES , Boolean.FALSE);
//default value of escaping characters is 'true'
supportedProps.put(Constants.ESCAPE_CHARACTERS , Boolean.TRUE);
supportedProps.put(Constants.REUSE_INSTANCE, new Boolean(true));
supportedProps.put(Constants.REUSE_INSTANCE, true);
}
/**
@ -160,20 +170,20 @@ public class PropertyManager {
public void setProperty(String property, Object value){
String equivalentProperty = null ;
if(property == XMLInputFactory.IS_NAMESPACE_AWARE || property.equals(XMLInputFactory.IS_NAMESPACE_AWARE)){
if(property.equals(XMLInputFactory.IS_NAMESPACE_AWARE)){
equivalentProperty = Constants.XERCES_FEATURE_PREFIX + Constants.NAMESPACES_FEATURE ;
}
else if(property == XMLInputFactory.IS_VALIDATING || property.equals(XMLInputFactory.IS_VALIDATING)){
else if(property.equals(XMLInputFactory.IS_VALIDATING)){
if( (value instanceof Boolean) && ((Boolean)value).booleanValue()){
throw new java.lang.IllegalArgumentException("true value of isValidating not supported") ;
}
}
else if(property == STRING_INTERNING || property.equals(STRING_INTERNING)){
else if(property.equals(STRING_INTERNING)){
if( (value instanceof Boolean) && !((Boolean)value).booleanValue()){
throw new java.lang.IllegalArgumentException("false value of " + STRING_INTERNING + "feature is not supported") ;
}
}
else if(property == XMLInputFactory.RESOLVER || property.equals(XMLInputFactory.RESOLVER)){
else if(property.equals(XMLInputFactory.RESOLVER)){
//add internal stax property
supportedProps.put( Constants.XERCES_PROPERTY_PREFIX + Constants.STAX_ENTITY_RESOLVER_PROPERTY , new StaxEntityResolverWrapper((XMLResolver)value)) ;
}

View File

@ -48,9 +48,11 @@ import com.sun.xml.internal.stream.XMLEntityStorage;
import com.sun.xml.internal.stream.dtd.DTDGrammarUtil;
import java.io.EOFException;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.events.XMLEvent;
import jdk.xml.internal.JdkXmlUtils;
/**
*
@ -175,7 +177,8 @@ public class XMLDocumentFragmentScannerImpl
VALIDATION,
NOTIFY_BUILTIN_REFS,
NOTIFY_CHAR_REFS,
Constants.STAX_REPORT_CDATA_EVENT
Constants.STAX_REPORT_CDATA_EVENT,
XMLConstants.USE_CATALOG
};
/** Feature defaults. */
@ -184,25 +187,35 @@ public class XMLDocumentFragmentScannerImpl
null,
Boolean.FALSE,
Boolean.FALSE,
Boolean.TRUE
Boolean.TRUE,
JdkXmlUtils.USE_CATALOG_DEFAULT
};
/** Recognized properties. */
private static final String[] RECOGNIZED_PROPERTIES = {
SYMBOL_TABLE,
SYMBOL_TABLE,
ERROR_REPORTER,
ENTITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
/** Property defaults. */
private static final Object[] PROPERTY_DEFAULTS = {
null,
null,
null,
null,
null,
null,
null,
null
};
private static final char [] cdata = {'[','C','D','A','T','A','['};
static final char [] xmlDecl = {'<','?','x','m','l'};
// private static final char [] endTag = {'<','/'};

View File

@ -53,7 +53,17 @@ import java.util.Locale;
import java.util.Map;
import java.util.Stack;
import java.util.StringTokenizer;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogException;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.catalog.CatalogManager;
import javax.xml.catalog.CatalogResolver;
import javax.xml.catalog.CatalogUriResolver;
import javax.xml.stream.XMLInputFactory;
import javax.xml.transform.Source;
import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.InputSource;
/**
@ -184,7 +194,8 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
EXTERNAL_PARAMETER_ENTITIES,
ALLOW_JAVA_ENCODINGS,
WARN_ON_DUPLICATE_ENTITYDEF,
STANDARD_URI_CONFORMANT
STANDARD_URI_CONFORMANT,
XMLConstants.USE_CATALOG
};
/** Feature defaults. */
@ -194,7 +205,8 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
Boolean.TRUE,
Boolean.TRUE,
Boolean.FALSE,
Boolean.FALSE
Boolean.FALSE,
JdkXmlUtils.USE_CATALOG_DEFAULT
};
/** Recognized properties. */
@ -205,7 +217,11 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
VALIDATION_MANAGER,
BUFFER_SIZE,
SECURITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
/** Property defaults. */
@ -214,7 +230,11 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
null,
null,
null,
new Integer(DEFAULT_BUFFER_SIZE),
DEFAULT_BUFFER_SIZE,
null,
null,
null,
null,
null,
null
};
@ -396,6 +416,17 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
/** Pool of character buffers. */
private CharacterBufferPool fBufferPool = new CharacterBufferPool(fBufferSize, DEFAULT_INTERNAL_BUFFER_SIZE);
/** indicate whether Catalog should be used for resolving external resources */
private boolean fUseCatalog = true;
CatalogFeatures fCatalogFeatures;
CatalogResolver fCatalogResolver;
CatalogUriResolver fCatalogUriResolver;
private String fCatalogFile;
private String fDefer;
private String fPrefer;
private String fResolve;
//
// Constructors
//
@ -1007,6 +1038,22 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
staxInputSource = new StaxXMLInputSource(xmlInputSource, fISCreatedByResolver);
}
if (staxInputSource == null) {
if (fCatalogFeatures == null) {
fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve);
}
fCatalogFile = fCatalogFeatures.get(Feature.FILES);
if (fUseCatalog && fCatalogFile != null) {
if (fCatalogResolver == null) {
fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures);
}
InputSource is = fCatalogResolver.resolveEntity(publicId, literalSystemId);
if (is != null && !is.isEmpty()) {
staxInputSource = new StaxXMLInputSource(new XMLInputSource(is, true), true);
}
}
}
// do default resolution
//this works for both stax & Xerces, if staxInputSource is null,
//it means parser need to revert to default resolution
@ -1085,6 +1132,41 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
xmlInputSource = fEntityResolver.resolveEntity(resourceIdentifier);
}
if (xmlInputSource == null) {
if (fCatalogFeatures == null) {
fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve);
}
fCatalogFile = fCatalogFeatures.get(Feature.FILES);
if (fUseCatalog && fCatalogFile != null) {
/*
since the method can be called from various processors, both
CatalogResolver and CatalogUriResolver are used to attempt to find
a match
*/
InputSource is = null;
try {
if (fCatalogResolver == null) {
fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures);
}
String pid = (publicId != null? publicId : resourceIdentifier.getNamespace());
if (pid != null || literalSystemId != null) {
is = fCatalogResolver.resolveEntity(pid, literalSystemId);
}
} catch (CatalogException e) {}
if (is != null && !is.isEmpty()) {
xmlInputSource = new XMLInputSource(is, true);
} else if (literalSystemId != null) {
if (fCatalogUriResolver == null) {
fCatalogUriResolver = CatalogManager.catalogUriResolver(fCatalogFeatures);
}
Source source = fCatalogUriResolver.resolve(literalSystemId, baseSystemId);
if (source != null && !source.isEmpty()) {
xmlInputSource = new XMLInputSource(publicId, source.getSystemId(), baseSystemId, true);
}
}
}
}
// do default resolution
// REVISIT: what's the correct behavior if the user provided an entity
// resolver (fEntityResolver != null), but resolveEntity doesn't return
@ -1442,12 +1524,19 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
fStaxEntityResolver = null;
}
fSupportDTD = ((Boolean)propertyManager.getProperty(XMLInputFactory.SUPPORT_DTD)).booleanValue();
fReplaceEntityReferences = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES)).booleanValue();
fSupportExternalEntities = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES)).booleanValue();
fSupportDTD = ((Boolean)propertyManager.getProperty(XMLInputFactory.SUPPORT_DTD));
fReplaceEntityReferences = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES));
fSupportExternalEntities = ((Boolean)propertyManager.getProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES));
// Zephyr feature ignore-external-dtd is the opposite of Xerces' load-external-dtd
fLoadExternalDTD = !((Boolean)propertyManager.getProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD)).booleanValue();
fLoadExternalDTD = !((Boolean)propertyManager.getProperty(Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD));
//Use Catalog
fUseCatalog = (Boolean)propertyManager.getProperty(XMLConstants.USE_CATALOG);
fCatalogFile = (String)propertyManager.getProperty(JdkXmlUtils.CATALOG_FILES);
fDefer = (String)propertyManager.getProperty(JdkXmlUtils.CATALOG_DEFER);
fPrefer = (String)propertyManager.getProperty(JdkXmlUtils.CATALOG_PREFER);
fResolve = (String)propertyManager.getProperty(JdkXmlUtils.CATALOG_RESOLVE);
// JAXP 1.5 feature
XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager) propertyManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
@ -1535,6 +1624,13 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
}
fAccessExternalDTD = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
//Use Catalog
fUseCatalog = componentManager.getFeature(XMLConstants.USE_CATALOG, true);
fCatalogFile = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_FILES);
fDefer = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_DEFER);
fPrefer = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_PREFER);
fResolve = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_RESOLVE);
//reset general state
reset();
@ -1631,6 +1727,8 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
fLoadExternalDTD = state;
return;
}
} else if (featureId.equals(XMLConstants.USE_CATALOG)) {
fUseCatalog = state;
}
} // setFeature(String,boolean)
@ -1691,6 +1789,18 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
{
XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)value;
fAccessExternalDTD = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
return;
}
//Catalog properties
if (propertyId.equals(JdkXmlUtils.CATALOG_FILES)) {
fCatalogFile = (String)value;
} else if (propertyId.equals(JdkXmlUtils.CATALOG_DEFER)) {
fDefer = (String)value;
} else if (propertyId.equals(JdkXmlUtils.CATALOG_PREFER)) {
fPrefer = (String)value;
} else if (propertyId.equals(JdkXmlUtils.CATALOG_RESOLVE)) {
fResolve = (String)value;
}
}
@ -2066,7 +2176,6 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver {
// system id has to be a valid URI
if (strict) {
try {
// if it's already an absolute one, return it
new URI(systemId);

View File

@ -1,5 +1,5 @@
#
# Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
# Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@ -28,7 +28,7 @@
#
# The messages are arranged in key and value tuples in a ListResourceBundle.
#
# @version $Id: DOMMessages_ko.properties /st_wptg_1.8.0.0.0jdk/2 2013/05/29 02:40:33 gmolloy Exp $
# @version $Id: DOMMessages_ko.properties /st_wptg_1.9.dev.jdk/3 2016/07/14 00:25:31 gmolloy Exp $
BadMessageKey = \uBA54\uC2DC\uC9C0 \uD0A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uC624\uB958 \uBA54\uC2DC\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
FormatFailed = \uB2E4\uC74C \uBA54\uC2DC\uC9C0\uC758 \uD615\uC2DD\uC744 \uC9C0\uC815\uD558\uB294 \uC911 \uB0B4\uBD80 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\n
@ -82,7 +82,7 @@ jaxp-order-not-supported = ''{1}'' \uC18D\uC131\uC744 \uC124\uC815\uD558\uAE30 \
jaxp-null-input-source = \uC9C0\uC815\uB41C \uC18C\uC2A4\uB294 \uB110\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
#Ranges
BAD_BOUNDARYPOINTS_ERR = \uBC94\uC704\uC758 \uACBD\uACC4 \uC9C0\uC810\uC774 \uD2B9\uC815 \uC694\uAD6C \uC0AC\uD56D\uC744 \uCDA9\uC871\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
BAD_BOUNDARYPOINTS_ERR = \uBC94\uC704\uC758 \uACBD\uACC4 \uC9C0\uC810\uC774 \uD2B9\uC815 \uC694\uAD6C\uC0AC\uD56D\uC744 \uCDA9\uC871\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.
INVALID_NODE_TYPE_ERR = \uBC94\uC704\uC758 \uACBD\uACC4 \uC9C0\uC810 \uCEE8\uD14C\uC774\uB108\uAC00 \uBD80\uC801\uD569\uD55C \uC720\uD615\uC758 \uB178\uB4DC \uB610\uB294 \uBD80\uC801\uD569\uD55C \uC720\uD615\uC758 \uC870\uC0C1\uC744 \uAC00\uC9C4 \uB178\uB4DC\uB85C \uC124\uC815\uB418\uACE0 \uC788\uC2B5\uB2C8\uB2E4.

View File

@ -26,7 +26,7 @@
# This file contains error and warning messages related to XML Schema
# The messages are arranged in key and value tuples in a ListResourceBundle.
#
# @version $Id: XMLSchemaMessages_ko.properties /st_wptg_1.9.0.0.0jdk/2 2016/04/12 02:39:51 gmolloy Exp $
# @version $Id: XMLSchemaMessages_ko.properties /st_wptg_1.9.dev.jdk/3 2016/07/14 00:25:31 gmolloy Exp $
BadMessageKey = \uBA54\uC2DC\uC9C0 \uD0A4\uC5D0 \uD574\uB2F9\uD558\uB294 \uC624\uB958 \uBA54\uC2DC\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
FormatFailed = \uB2E4\uC74C \uBA54\uC2DC\uC9C0\uC758 \uD615\uC2DD\uC744 \uC9C0\uC815\uD558\uB294 \uC911 \uB0B4\uBD80 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.\n
@ -159,9 +159,9 @@
src-redefine.7.1 = src-redefine.7.1: <redefine> \uC694\uC18C\uC758 attributeGroup \uD558\uC704\uC5D0 \uC790\uC2E0\uC744 \uCC38\uC870\uD558\uB294 attributeGroup\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC744 \uACBD\uC6B0 \uC815\uD655\uD788 1\uC774 \uC0AC\uC6A9\uB418\uC5B4\uC57C \uD558\uC9C0\uB9CC {0}\uC774(\uAC00) \uC0AC\uC6A9\uB429\uB2C8\uB2E4.
src-redefine.7.2.1 = src-redefine.7.2.1: \uC7AC\uC815\uC758\uB41C \uC2A4\uD0A4\uB9C8\uC5D0 \uC774\uB984\uC774 ''{0}''\uC778 attributeGroup\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
src-redefine.7.2.2 = src-redefine.7.2.2: AttributeGroup ''{0}''\uC740(\uB294) \uC7AC\uC815\uC758\uD558\uB294 attributeGroup\uC744 \uC81C\uB300\uB85C \uC81C\uD55C\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC704\uBC18\uB41C \uC81C\uC57D \uC870\uAC74: ''{1}''.
src-resolve = src-resolve: ''{0}'' \uC774\uB984\uC744 ''{1}'' \uAD6C\uC131 \uC694\uC18C\uB85C \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
src-resolve.4.1 = src-resolve.4.1: ''{2}'' \uAD6C\uC131 \uC694\uC18C\uB97C \uBD84\uC11D\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uB294 \uAC83\uC73C\uB85C \uD655\uC778\uB418\uC5C8\uC9C0\uB9CC \uC2A4\uD0A4\uB9C8 \uBB38\uC11C ''{0}''\uC5D0\uC11C \uB300\uC0C1 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uB294 \uAD6C\uC131 \uC694\uC18C\uB97C \uCC38\uC870\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC788\uC5B4\uC57C \uD560 \uACBD\uC6B0 \uC811\uB450\uC5B4\uB97C \uC81C\uACF5\uD574\uC57C \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uC5B4\uC57C \uD560 \uACBD\uC6B0 "namespace" \uC18D\uC131 \uC5C6\uC774 ''import''\uB97C ''{0}''\uC5D0 \uCD94\uAC00\uD574\uC57C \uD569\uB2C8\uB2E4.
src-resolve.4.2 = src-resolve.4.2: ''{2}'' \uAD6C\uC131 \uC694\uC18C\uB97C \uBD84\uC11D\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. ''{2}''\uC774(\uAC00) ''{1}'' \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC5D0 \uC788\uB294 \uAC83\uC73C\uB85C \uD655\uC778\uB418\uC5C8\uC9C0\uB9CC \uC2A4\uD0A4\uB9C8 \uBB38\uC11C ''{0}''\uC5D0\uC11C \uC774 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC758 \uAD6C\uC131 \uC694\uC18C\uB97C \uCC38\uC870\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC77C \uACBD\uC6B0 \uC811\uB450\uC5B4\uC778 ''{2}''\uC744(\uB97C) \uBCC0\uACBD\uD574\uC57C \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC62C\uBC14\uB978 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC77C \uACBD\uC6B0 \uC801\uD569\uD55C ''import'' \uD0DC\uADF8\uB97C ''{0}''\uC5D0 \uCD94\uAC00\uD574\uC57C \uD569\uB2C8\uB2E4.
src-resolve = src-resolve: ''{0}'' \uC774\uB984\uC744 ''{1}'' \uAD6C\uC131\uC694\uC18C\uB85C \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
src-resolve.4.1 = src-resolve.4.1: ''{2}'' \uAD6C\uC131\uC694\uC18C\uB97C \uBD84\uC11D\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uB294 \uAC83\uC73C\uB85C \uD655\uC778\uB418\uC5C8\uC9C0\uB9CC \uC2A4\uD0A4\uB9C8 \uBB38\uC11C ''{0}''\uC5D0\uC11C \uB300\uC0C1 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uB294 \uAD6C\uC131\uC694\uC18C\uB97C \uCC38\uC870\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC788\uC5B4\uC57C \uD560 \uACBD\uC6B0 \uC811\uB450\uC5B4\uB97C \uC81C\uACF5\uD574\uC57C \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. ''{2}''\uC5D0 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uAC00 \uC5C6\uC5B4\uC57C \uD560 \uACBD\uC6B0 "namespace" \uC18D\uC131 \uC5C6\uC774 ''import''\uB97C ''{0}''\uC5D0 \uCD94\uAC00\uD574\uC57C \uD569\uB2C8\uB2E4.
src-resolve.4.2 = src-resolve.4.2: ''{2}'' \uAD6C\uC131\uC694\uC18C\uB97C \uBD84\uC11D\uD558\uB294 \uC911 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. ''{2}''\uC774(\uAC00) ''{1}'' \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC5D0 \uC788\uB294 \uAC83\uC73C\uB85C \uD655\uC778\uB418\uC5C8\uC9C0\uB9CC \uC2A4\uD0A4\uB9C8 \uBB38\uC11C ''{0}''\uC5D0\uC11C \uC774 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC758 \uAD6C\uC131\uC694\uC18C\uB97C \uCC38\uC870\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC77C \uACBD\uC6B0 \uC811\uB450\uC5B4\uC778 ''{2}''\uC744(\uB97C) \uBCC0\uACBD\uD574\uC57C \uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uC62C\uBC14\uB978 \uB124\uC784\uC2A4\uD398\uC774\uC2A4\uC77C \uACBD\uC6B0 \uC801\uD569\uD55C ''import'' \uD0DC\uADF8\uB97C ''{0}''\uC5D0 \uCD94\uAC00\uD574\uC57C \uD569\uB2C8\uB2E4.
src-simple-type.2.a = src-simple-type.2.a: \uD574\uB2F9 [children] \uC911 base [attribute]\uC640 <simpleType> \uC694\uC18C\uAC00 \uBAA8\uB450 \uC788\uB294 <restriction> \uC694\uC18C\uAC00 \uBC1C\uACAC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD558\uB098\uB9CC \uD5C8\uC6A9\uB429\uB2C8\uB2E4.
src-simple-type.2.b = src-simple-type.2.b: \uD574\uB2F9 [children] \uC911 base [attribute]\uC640 <simpleType> \uC694\uC18C\uAC00 \uBAA8\uB450 \uC5C6\uB294 <restriction> \uC694\uC18C\uAC00 \uBC1C\uACAC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD558\uB098\uB9CC \uD544\uC694\uD569\uB2C8\uB2E4.
src-simple-type.3.a = src-simple-type.3.a: \uD574\uB2F9 [children] \uC911 itemType [attribute]\uC640 <simpleType> \uC694\uC18C\uAC00 \uBAA8\uB450 \uC788\uB294 <list> \uC694\uC18C\uAC00 \uBC1C\uACAC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD558\uB098\uB9CC \uD5C8\uC6A9\uB429\uB2C8\uB2E4.
@ -190,8 +190,8 @@
cos-particle-restrict.2 = cos-particle-restrict.2: \uAE08\uC9C0\uB41C \uC870\uAC01 \uC81C\uD55C \uC0AC\uD56D: ''{0}''.
cos-st-restricts.1.1 = cos-st-restricts.1.1: ''{1}'' \uC720\uD615\uC774 \uAE30\uBCF8 \uB2E8\uC704\uC774\uBBC0\uB85C \uD574\uB2F9 '{'base type definition'}' ''{0}''\uC740(\uB294) \uAE30\uBCF8 \uB2E8\uC21C \uC720\uD615 \uC815\uC758 \uB610\uB294 \uB0B4\uC7A5\uB41C \uAE30\uBCF8 \uB370\uC774\uD130 \uC720\uD615\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.
cos-st-restricts.2.1 = cos-st-restricts.2.1: \uBAA9\uB85D \uC720\uD615 ''{0}''\uC758 \uC815\uC758\uC5D0\uC11C ''{1}'' \uC720\uD615\uC740 \uBAA9\uB85D \uC720\uD615\uC774\uAC70\uB098 \uBAA9\uB85D\uC744 \uD3EC\uD568\uD558\uB294 \uD569\uC9D1\uD569 \uC720\uD615\uC774\uBBC0\uB85C \uBD80\uC801\uD569\uD55C \uD56D\uBAA9 \uC720\uD615\uC785\uB2C8\uB2E4.
cos-st-restricts.2.3.1.1 = cos-st-restricts.2.3.1.1: '{'item type definition'}' ''{0}''\uC758 '{'final'}' \uAD6C\uC131 \uC694\uC18C\uC5D0 ''list''\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C ''{0}''\uC744(\uB97C) \uBAA9\uB85D \uC720\uD615 ''{1}''\uC5D0 \uB300\uD55C \uD56D\uBAA9 \uC720\uD615\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
cos-st-restricts.3.3.1.1 = cos-st-restricts.3.3.1.1: '{'member type definitions'}' ''{0}''\uC758 '{'final'}' \uAD6C\uC131 \uC694\uC18C\uC5D0 ''union''\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C ''{0}''\uC744(\uB97C) \uD569\uC9D1\uD569 \uC720\uD615 ''{1}''\uC5D0 \uB300\uD55C \uBA64\uBC84 \uC720\uD615\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
cos-st-restricts.2.3.1.1 = cos-st-restricts.2.3.1.1: '{'item type definition'}' ''{0}''\uC758 '{'final'}' \uAD6C\uC131\uC694\uC18C\uC5D0 ''list''\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C ''{0}''\uC744(\uB97C) \uBAA9\uB85D \uC720\uD615 ''{1}''\uC5D0 \uB300\uD55C \uD56D\uBAA9 \uC720\uD615\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
cos-st-restricts.3.3.1.1 = cos-st-restricts.3.3.1.1: '{'member type definitions'}' ''{0}''\uC758 '{'final'}' \uAD6C\uC131\uC694\uC18C\uC5D0 ''union''\uC774 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C ''{0}''\uC744(\uB97C) \uD569\uC9D1\uD569 \uC720\uD615 ''{1}''\uC5D0 \uB300\uD55C \uBA64\uBC84 \uC720\uD615\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.
cos-valid-default.2.1 = cos-valid-default.2.1: ''{0}'' \uC694\uC18C\uC5D0 \uAC12 \uC81C\uC57D \uC870\uAC74\uC774 \uC788\uC73C\uBBC0\uB85C \uD63C\uD569 \uB610\uB294 \uB2E8\uC21C \uCF58\uD150\uCE20 \uBAA8\uB378\uC774 \uD3EC\uD568\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4.
cos-valid-default.2.2.2 = cos-valid-default.2.2.2: ''{0}'' \uC694\uC18C\uC5D0 '{'value constraint'}'\uAC00 \uC788\uC73C\uBA70 \uD574\uB2F9 \uC720\uD615 \uC815\uC758\uC5D0 \uD63C\uD569 '{'content type'}'\uC774 \uC788\uC73C\uBBC0\uB85C '{'content type'}'\uC758 \uC870\uAC01\uC744 \uBE44\uC6B8 \uC218 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4.
c-props-correct.2 = c-props-correct.2: keyref ''{0}''\uACFC(\uC640) \uD0A4 ''{1}''\uC5D0 \uB300\uD55C \uD544\uB4DC \uAE30\uC218\uB294 \uC11C\uB85C \uC77C\uCE58\uD574\uC57C \uD569\uB2C8\uB2E4.
@ -282,7 +282,7 @@
rcase-RecurseUnordered.2 = rcase-RecurseUnordered.2: \uC870\uAC01 \uAC04 \uC804\uCCB4 \uAE30\uB2A5 \uB9E4\uD551\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.
# We're using sch-props-correct.2 instead of the old src-redefine.1
# src-redefine.1 = src-redefine.1: The component ''{0}'' is begin redefined, but its corresponding component isn't in the schema document being redefined (with namespace ''{2}''), but in a different document, with namespace ''{1}''.
sch-props-correct.2 = sch-props-correct.2: \uC2A4\uD0A4\uB9C8\uC5D0\uB294 \uB3D9\uC77C\uD55C \uC774\uB984\uC744 \uAC00\uC9C4 \uB450 \uAC1C\uC758 \uC804\uC5ED \uAD6C\uC131 \uC694\uC18C\uAC00 \uD3EC\uD568\uB420 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774 \uC2A4\uD0A4\uB9C8\uC5D0\uB294 \uB450 \uAC1C\uC758 ''{0}''\uC774(\uAC00) \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.
sch-props-correct.2 = sch-props-correct.2: \uC2A4\uD0A4\uB9C8\uC5D0\uB294 \uB3D9\uC77C\uD55C \uC774\uB984\uC744 \uAC00\uC9C4 \uB450 \uAC1C\uC758 \uC804\uC5ED \uAD6C\uC131\uC694\uC18C\uAC00 \uD3EC\uD568\uB420 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC774 \uC2A4\uD0A4\uB9C8\uC5D0\uB294 \uB450 \uAC1C\uC758 ''{0}''\uC774(\uAC00) \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.
st-props-correct.2 = st-props-correct.2: \uB2E8\uC21C \uC720\uD615 ''{0}''\uC5D0 \uB300\uD55C \uC21C\uD658 \uC815\uC758\uAC00 \uAC10\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB530\uB77C\uC11C ''{0}''\uC740(\uB294) \uACE0\uC720\uD55C \uC720\uD615 \uACC4\uCE35\uC5D0 \uD3EC\uD568\uB41C \uAC83\uC774\uBA70 \uC774\uB294 \uC624\uB958\uC785\uB2C8\uB2E4.
st-props-correct.3 = st-props-correct.3: ''{0}'' \uC720\uD615\uC5D0 \uB300\uD574 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. '{'base type definition'}' ''{1}''\uC758 '{'final'}' \uAC12\uC740 \uC81C\uD55C \uC0AC\uD56D\uC5D0 \uC758\uD55C \uD30C\uC0DD\uC744 \uAE08\uC9C0\uD569\uB2C8\uB2E4.
totalDigits-valid-restriction = totalDigits-valid-restriction: {2}\uC758 \uC815\uC758\uC5D0\uC11C ''totalDigits'' \uBA74\uC5D0 \uB300\uD55C ''{0}'' \uAC12\uC774 \uBD80\uC801\uD569\uD569\uB2C8\uB2E4. \uC774 \uAC12\uC740 \uC870\uC0C1 \uC720\uD615 \uC911 \uD558\uB098\uC5D0\uC11C ''{1}''(\uC73C)\uB85C \uC124\uC815\uB41C ''totalDigits''\uC5D0 \uB300\uD55C \uAC12\uBCF4\uB2E4 \uC791\uAC70\uB098 \uAC19\uC544\uC57C \uD569\uB2C8\uB2E4.

View File

@ -76,6 +76,7 @@ import java.util.Map;
import java.util.StringTokenizer;
import java.util.WeakHashMap;
import javax.xml.XMLConstants;
import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMError;
import org.w3c.dom.DOMErrorHandler;
@ -173,7 +174,8 @@ XSLoader, DOMConfiguration {
HONOUR_ALL_SCHEMALOCATIONS,
NAMESPACE_GROWTH,
TOLERATE_DUPLICATES,
USE_SERVICE_MECHANISM
USE_SERVICE_MECHANISM,
XMLConstants.USE_CATALOG
};
// property identifiers
@ -187,7 +189,7 @@ XSLoader, DOMConfiguration {
Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
/** Property identifier: error handler. */
protected static final String ERROR_HANDLER =
public static final String ERROR_HANDLER =
Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
/** Property identifier: entity resolver. */
@ -244,7 +246,11 @@ XSLoader, DOMConfiguration {
SECURITY_MANAGER,
LOCALE,
SCHEMA_DV_FACTORY,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
// Data
@ -813,7 +819,7 @@ XSLoader, DOMConfiguration {
// InputSource also, apart from [] of type Object.
Object[] objArr = (Object[]) fJAXPSource;
// make local array for storing target namespaces of schemasources specified in object arrays.
ArrayList jaxpSchemaSourceNamespaces = new ArrayList();
ArrayList<String> jaxpSchemaSourceNamespaces = new ArrayList<>();
for (int i = 0; i < objArr.length; i++) {
if (objArr[i] instanceof InputStream ||
objArr[i] instanceof InputSource) {
@ -1280,7 +1286,7 @@ XSLoader, DOMConfiguration {
*/
public DOMStringList getParameterNames() {
if (fRecognizedParameters == null){
ArrayList v = new ArrayList();
ArrayList<String> v = new ArrayList<>();
v.add(Constants.DOM_VALIDATE);
v.add(Constants.DOM_ERROR_HANDLER);
v.add(Constants.DOM_RESOURCE_RESOLVER);
@ -1381,7 +1387,7 @@ XSLoader, DOMConfiguration {
}
XMLInputSource dom2xmlInputSource(LSInput is) {
XMLInputSource dom2xmlInputSource(LSInput is) {
// need to wrap the LSInput with an XMLInputSource
XMLInputSource xis = null;

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -86,6 +86,8 @@ import java.util.Map;
import java.util.Stack;
import java.util.Vector;
import javax.xml.XMLConstants;
import jdk.xml.internal.JdkXmlUtils;
import jdk.xml.internal.SecuritySupport;
/**
* The XML Schema validator. The validator implements a document
@ -264,6 +266,8 @@ public class XMLSchemaValidator
protected static final String USE_SERVICE_MECHANISM = Constants.ORACLE_FEATURE_SERVICE_MECHANISM;
protected static final String USE_CATALOG = XMLConstants.USE_CATALOG;
// recognized features and properties
/** Recognized features. */
@ -286,7 +290,8 @@ public class XMLSchemaValidator
UNPARSED_ENTITY_CHECKING,
NAMESPACE_GROWTH,
TOLERATE_DUPLICATES,
USE_SERVICE_MECHANISM
USE_SERVICE_MECHANISM,
USE_CATALOG
};
/** Feature defaults. */
@ -317,7 +322,8 @@ public class XMLSchemaValidator
null,
null,
null,
Boolean.TRUE
Boolean.TRUE,
JdkXmlUtils.USE_CATALOG_DEFAULT
};
/** Recognized properties. */
@ -334,12 +340,17 @@ public class XMLSchemaValidator
ROOT_TYPE_DEF,
ROOT_ELEMENT_DECL,
SCHEMA_DV_FACTORY,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
/** Property defaults. */
private static final Object[] PROPERTY_DEFAULTS =
{ null, null, null, null, null, null, null, null, null, null, null, null};
{ null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null};
// this is the number of valuestores of each kind
// we expect an element to have. It's almost

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 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
*
@ -39,7 +39,6 @@ import com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter;
import com.sun.org.apache.xerces.internal.parsers.BasicParserConfiguration;
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;
@ -51,6 +50,9 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLDTDScanner;
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 javax.xml.XMLConstants;
import jdk.xml.internal.JdkXmlUtils;
import jdk.xml.internal.SecuritySupport;
/**
* @xerces.internal
@ -301,7 +303,8 @@ public class SchemaParsingConfig extends BasicParserConfiguration
PARSER_SETTINGS, WARN_ON_DUPLICATE_ATTDEF, WARN_ON_UNDECLARED_ELEMDEF,
ALLOW_JAVA_ENCODINGS, CONTINUE_AFTER_FATAL_ERROR,
LOAD_EXTERNAL_DTD, NOTIFY_BUILTIN_REFS,
NOTIFY_CHAR_REFS, GENERATE_SYNTHETIC_ANNOTATIONS
NOTIFY_CHAR_REFS, GENERATE_SYNTHETIC_ANNOTATIONS,
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
@ -315,6 +318,7 @@ public class SchemaParsingConfig extends BasicParserConfiguration
fFeatures.put(NOTIFY_BUILTIN_REFS, Boolean.FALSE);
fFeatures.put(NOTIFY_CHAR_REFS, Boolean.FALSE);
fFeatures.put(GENERATE_SYNTHETIC_ANNOTATIONS, Boolean.FALSE);
fFeatures.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
// add default recognized properties
final String[] recognizedProperties = {
@ -328,7 +332,11 @@ public class SchemaParsingConfig extends BasicParserConfiguration
DATATYPE_VALIDATOR_FACTORY,
VALIDATION_MANAGER,
GENERATE_SYNTHETIC_ANNOTATIONS,
LOCALE
LOCALE,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
addRecognizedProperties(recognizedProperties);

View File

@ -102,9 +102,11 @@ import java.util.Map;
import java.util.Stack;
import java.util.Vector;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
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;
@ -391,7 +393,7 @@ public class XSDHandler {
private Locale fLocale;
// the XMLEntityManager
private XMLEntityResolver fEntityManager;
private XMLEntityManager fEntityManager;
// the XSAttributeChecker
private XSAttributeChecker fAttributeChecker;
@ -411,6 +413,13 @@ public class XSDHandler {
// the security property manager
private XMLSecurityPropertyManager fSecurityPropertyMgr = null;
/** indicate whether Catalog should be used for resolving external resources */
private boolean fUseCatalog = true;
private String fCatalogFile;
private String fDefer;
private String fPrefer;
private String fResolve;
//************ Traversers **********
XSDAttributeGroupTraverser fAttributeGroupTraverser;
XSDAttributeTraverser fAttributeTraverser;
@ -710,6 +719,13 @@ public class XSDHandler {
fAnnotationValidator.setProperty(ERROR_HANDLER, (fErrorHandler != null) ? fErrorHandler : new DefaultErrorHandler());
/** Set locale. **/
fAnnotationValidator.setProperty(LOCALE, fLocale);
// Passing on the Catalog settings
fAnnotationValidator.setFeature(XMLConstants.USE_CATALOG, fUseCatalog);
fAnnotationValidator.setProperty(JdkXmlUtils.CATALOG_FILES, fCatalogFile);
fAnnotationValidator.setProperty(JdkXmlUtils.CATALOG_DEFER, fDefer);
fAnnotationValidator.setProperty(JdkXmlUtils.CATALOG_PREFER, fPrefer);
fAnnotationValidator.setProperty(JdkXmlUtils.CATALOG_RESOLVE, fResolve);
}
/**
@ -3514,7 +3530,7 @@ public class XSDHandler {
fSecurityManager = (XMLSecurityManager) componentManager.getProperty(SECURITY_MANAGER, null);
//set entity manager
fEntityManager = (XMLEntityResolver) componentManager.getProperty(ENTITY_MANAGER);
fEntityManager = (XMLEntityManager) componentManager.getProperty(ENTITY_MANAGER);
//set entity resolver
XMLEntityResolver er = (XMLEntityResolver)componentManager.getProperty(ENTITY_RESOLVER);
@ -3593,6 +3609,20 @@ public class XSDHandler {
fAccessExternalDTD = fSecurityPropertyMgr.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_DTD);
fAccessExternalSchema = fSecurityPropertyMgr.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
// Passing the Catalog settings to the parser
fUseCatalog = componentManager.getFeature(XMLConstants.USE_CATALOG);
fSchemaParser.setFeature(XMLConstants.USE_CATALOG, fUseCatalog);
fEntityManager.setFeature(XMLConstants.USE_CATALOG, fUseCatalog);
fCatalogFile = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_FILES);
fDefer = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_DEFER);
fPrefer = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_PREFER);
fResolve = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_RESOLVE);
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
fSchemaParser.setProperty(f.getPropertyName(), componentManager.getProperty(f.getPropertyName()));
fEntityManager.setProperty(f.getPropertyName(), componentManager.getProperty(f.getPropertyName()));
}
} // reset(XMLComponentManager)

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2005 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
* 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
*
@ -32,6 +32,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
import java.io.IOException;
import java.lang.ref.SoftReference;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerConfigurationException;
@ -41,6 +42,8 @@ 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.JdkXmlFeatures;
import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.SAXException;
/**
@ -190,6 +193,10 @@ final class StreamValidatorHelper implements ValidatorHelper {
fComponentManager.getProperty(Constants.XML_SECURITY_PROPERTY_MANAGER));
config.setProperty(Constants.SECURITY_MANAGER,
fComponentManager.getProperty(Constants.SECURITY_MANAGER));
// Passing on the CatalogFeatures settings
JdkXmlUtils.catalogFeaturesConfig2Config(fComponentManager, config);
fConfiguration = new SoftReference(config);
return config;
}

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2005 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
* 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
*
@ -71,6 +71,8 @@ import com.sun.org.apache.xerces.internal.xs.ElementPSVI;
import com.sun.org.apache.xerces.internal.xs.ItemPSVI;
import com.sun.org.apache.xerces.internal.xs.PSVIProvider;
import com.sun.org.apache.xerces.internal.xs.XSTypeDefinition;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.TypeInfo;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;
@ -701,6 +703,9 @@ final class ValidatorHandlerImpl extends ValidatorHandler implements
XMLConstants.ACCESS_EXTERNAL_DTD, exc);
}
}
// Passing on the CatalogFeatures settings from a configuration object to the reader
JdkXmlUtils.catalogFeaturesConfig2Reader(fComponentManager, reader);
} catch( Exception e ) {
// this is impossible, but better safe than sorry
throw new FactoryConfigurationError(e);
@ -1046,7 +1051,7 @@ final class ValidatorHandlerImpl extends ValidatorHandler implements
*/
InputSource inputSource = new InputSource();
inputSource.setPublicId(pubId);
inputSource.setSystemId((baseSystemId != null) ? resolveSystemId(systemId, baseSystemId) : systemId);
inputSource.setSystemId((baseSystemId != null) ? resolveSystemId(sysId, baseSystemId) : sysId);
if (charStream != null) {
inputSource.setCharacterStream(charStream);

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2005 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
* 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
*
@ -22,12 +22,10 @@ package com.sun.org.apache.xerces.internal.jaxp.validation;
import java.io.IOException;
import javax.xml.XMLConstants;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Validator;
@ -83,7 +81,8 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
private boolean fResourceResolverChanged = false;
/** Support current-element-node property */
private static final String CURRENT_ELEMENT_NODE = Constants.XERCES_PROPERTY_PREFIX + Constants.CURRENT_ELEMENT_NODE_PROPERTY;
private static final String CURRENT_ELEMENT_NODE =
Constants.XERCES_PROPERTY_PREFIX + Constants.CURRENT_ELEMENT_NODE_PROPERTY;
public ValidatorImpl(XSGrammarPoolContainer grammarContainer) {
fComponentManager = new XMLSchemaValidatorComponentManager(grammarContainer);
@ -91,6 +90,7 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
setResourceResolver(null);
}
@Override
public void validate(Source source, Result result)
throws SAXException, IOException {
if (source instanceof SAXSource) {
@ -133,24 +133,29 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
}
}
@Override
public void setErrorHandler(ErrorHandler errorHandler) {
fErrorHandlerChanged = (errorHandler != null);
fComponentManager.setErrorHandler(errorHandler);
}
@Override
public ErrorHandler getErrorHandler() {
return fComponentManager.getErrorHandler();
}
@Override
public void setResourceResolver(LSResourceResolver resourceResolver) {
fResourceResolverChanged = (resourceResolver != null);
fComponentManager.setResourceResolver(resourceResolver);
}
@Override
public LSResourceResolver getResourceResolver() {
return fComponentManager.getResourceResolver();
}
@Override
public boolean getFeature(String name)
throws SAXNotRecognizedException, SAXNotSupportedException {
if (name == null) {
@ -169,6 +174,7 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
}
}
@Override
public void setFeature(String name, boolean value)
throws SAXNotRecognizedException, SAXNotSupportedException {
if (name == null) {
@ -197,6 +203,7 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
fConfigurationChanged = true;
}
@Override
public Object getProperty(String name)
throws SAXNotRecognizedException, SAXNotSupportedException {
if (name == null) {
@ -219,6 +226,7 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
}
}
@Override
public void setProperty(String name, Object object)
throws SAXNotRecognizedException, SAXNotSupportedException {
if (name == null) {
@ -238,6 +246,7 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
fConfigurationChanged = true;
}
@Override
public void reset() {
// avoid resetting features and properties if the state the validator
// is currently in, is the same as it will be after reset.
@ -265,14 +274,17 @@ final class ValidatorImpl extends Validator implements PSVIProvider {
* PSVIProvider methods
*/
@Override
public ElementPSVI getElementPSVI() {
return (fSAXValidatorHelper != null) ? fSAXValidatorHelper.getElementPSVI() : null;
}
@Override
public AttributePSVI getAttributePSVI(int index) {
return (fSAXValidatorHelper != null) ? fSAXValidatorHelper.getAttributePSVI(index) : null;
}
@Override
public AttributePSVI getAttributePSVIByName(String uri, String localname) {
return (fSAXValidatorHelper != null) ? fSAXValidatorHelper.getAttributePSVIByName(uri, localname) : null;
}

View File

@ -1,3 +1,6 @@
/*
* Copyright (c) 2007, 2016, 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
@ -17,20 +20,6 @@
package com.sun.org.apache.xerces.internal.jaxp.validation;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import javax.xml.XMLConstants;
import javax.xml.stream.XMLEventReader;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import com.sun.org.apache.xerces.internal.impl.Constants;
import com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader;
import com.sun.org.apache.xerces.internal.util.DOMEntityResolverWrapper;
@ -49,6 +38,20 @@ import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;
import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.stream.XMLEventReader;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import jdk.xml.internal.JdkXmlUtils;
import org.w3c.dom.Node;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.ErrorHandler;
@ -156,6 +159,12 @@ public final class XMLSchemaFactory extends SchemaFactory {
fSecurityPropertyMgr = new XMLSecurityPropertyManager();
fXMLSchemaLoader.setProperty(XML_SECURITY_PROPERTY_MANAGER,
fSecurityPropertyMgr);
// use catalog
fXMLSchemaLoader.setFeature(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
for (Feature f : Feature.values()) {
fXMLSchemaLoader.setProperty(f.getPropertyName(), null);
}
}
/**

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@ -22,7 +22,6 @@ package com.sun.org.apache.xerces.internal.jaxp.validation;
import java.util.HashMap;
import java.util.Locale;
import java.util.Iterator;
import java.util.Map;
import javax.xml.XMLConstants;
@ -48,6 +47,7 @@ import com.sun.org.apache.xerces.internal.xni.XNIException;
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponent;
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
import javax.xml.catalog.CatalogFeatures;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.ErrorHandler;
@ -176,7 +176,7 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
private boolean fUseGrammarPoolOnly;
/** Lookup map for components required for validation. **/
private final HashMap fComponents = new HashMap();
private final HashMap<String, Object> fComponents = new HashMap<>();
//
// Components
@ -202,10 +202,10 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
//
/** Stores initial feature values for validator reset. */
private final HashMap fInitFeatures = new HashMap();
private final HashMap<String, Boolean> fInitFeatures = new HashMap<>();
/** Stores initial property values for validator reset. */
private final HashMap fInitProperties = new HashMap();
private final HashMap<String, Object> fInitProperties = new HashMap<>();
/** Stores the initial security manager. */
private XMLSecurityManager fInitSecurityManager;
@ -262,13 +262,15 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
DISALLOW_DOCTYPE_DECL_FEATURE,
NORMALIZE_DATA,
SCHEMA_ELEMENT_DEFAULT,
SCHEMA_AUGMENT_PSVI
SCHEMA_AUGMENT_PSVI,
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
fFeatures.put(DISALLOW_DOCTYPE_DECL_FEATURE, Boolean.FALSE);
fFeatures.put(NORMALIZE_DATA, Boolean.FALSE);
fFeatures.put(SCHEMA_ELEMENT_DEFAULT, Boolean.FALSE);
fFeatures.put(SCHEMA_AUGMENT_PSVI, Boolean.TRUE);
fFeatures.put(XMLConstants.USE_CATALOG, grammarContainer.getFeature(XMLConstants.USE_CATALOG));
addRecognizedParamsAndSetDefaults(fEntityManager, grammarContainer);
addRecognizedParamsAndSetDefaults(fErrorReporter, grammarContainer);
@ -304,6 +306,11 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
fSecurityPropertyMgr = (XMLSecurityPropertyManager)
grammarContainer.getProperty(Constants.XML_SECURITY_PROPERTY_MANAGER);
setProperty(XML_SECURITY_PROPERTY_MANAGER, fSecurityPropertyMgr);
//initialize Catalog properties
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
setProperty(f.getPropertyName(), grammarContainer.getProperty(f.getPropertyName()));
}
}
/**
@ -541,20 +548,16 @@ final class XMLSchemaValidatorComponentManager extends ParserConfigurationSettin
// Reset feature and property values to their initial values
if (!fInitFeatures.isEmpty()) {
Iterator iter = fInitFeatures.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String name = (String) entry.getKey();
boolean value = ((Boolean) entry.getValue()).booleanValue();
for (Map.Entry<String, Boolean> entry : fInitFeatures.entrySet()) {
String name = entry.getKey();
boolean value = entry.getValue();
super.setFeature(name, value);
}
fInitFeatures.clear();
}
if (!fInitProperties.isEmpty()) {
Iterator iter = fInitProperties.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String name = (String) entry.getKey();
for (Map.Entry<String, Object> entry : fInitProperties.entrySet()) {
String name = entry.getKey();
Object value = entry.getValue();
super.setProperty(name, value);
}

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 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
*
@ -36,7 +36,6 @@ import com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter;
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.utils.XMLSecurityPropertyManager;
import com.sun.org.apache.xerces.internal.xni.XMLLocator;
@ -49,6 +48,9 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLDTDScanner;
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 javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlUtils;
/**
* This is the DTD-only parser configuration. It extends the basic
@ -308,6 +310,7 @@ public class DTDConfiguration
//NOTIFY_BUILTIN_REFS, // from XMLDocumentFragmentScannerImpl
//NOTIFY_CHAR_REFS, // from XMLDocumentFragmentScannerImpl
//WARN_ON_DUPLICATE_ENTITYDEF, // from XMLEntityManager
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
@ -320,6 +323,7 @@ public class DTDConfiguration
//setFeature(NOTIFY_BUILTIN_REFS, false); // from XMLDocumentFragmentScannerImpl
//setFeature(NOTIFY_CHAR_REFS, false); // from XMLDocumentFragmentScannerImpl
//setFeature(WARN_ON_DUPLICATE_ENTITYDEF, false); // from XMLEntityManager
fFeatures.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
// add default recognized properties
final String[] recognizedProperties = {
@ -337,7 +341,11 @@ public class DTDConfiguration
JAXP_SCHEMA_LANGUAGE,
LOCALE,
SECURITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
addRecognizedProperties(recognizedProperties);
@ -416,6 +424,11 @@ public class DTDConfiguration
}
setProperty(XML_SECURITY_PROPERTY_MANAGER, new XMLSecurityPropertyManager());
// Initialize Catalog features
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
setProperty(f.getPropertyName(), null);
}
} // <init>(SymbolTable,XMLGrammarPool)
//

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* 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
*
@ -47,6 +47,9 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLDTDScanner;
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 javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlUtils;
/**
* This is the non validating parser configuration. It extends the basic
@ -281,8 +284,8 @@ public class NonValidatingConfiguration
// add default recognized features
final String[] recognizedFeatures = {
PARSER_SETTINGS,
NAMESPACES,
PARSER_SETTINGS,
NAMESPACES,
//WARN_ON_DUPLICATE_ATTDEF, // from XMLDTDScannerImpl
//WARN_ON_UNDECLARED_ELEMDEF, // from XMLDTDScannerImpl
//ALLOW_JAVA_ENCODINGS, // from XMLEntityManager
@ -291,6 +294,7 @@ public class NonValidatingConfiguration
//NOTIFY_BUILTIN_REFS, // from XMLDocumentFragmentScannerImpl
//NOTIFY_CHAR_REFS, // from XMLDocumentFragmentScannerImpl
//WARN_ON_DUPLICATE_ENTITYDEF // from XMLEntityManager
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
@ -299,12 +303,13 @@ public class NonValidatingConfiguration
//setFeature(WARN_ON_UNDECLARED_ELEMDEF, false); // from XMLDTDScannerImpl
//setFeature(ALLOW_JAVA_ENCODINGS, false); // from XMLEntityManager
fFeatures.put(CONTINUE_AFTER_FATAL_ERROR, Boolean.FALSE);
fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
fFeatures.put(NAMESPACES, Boolean.TRUE);
fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
fFeatures.put(NAMESPACES, Boolean.TRUE);
//setFeature(LOAD_EXTERNAL_DTD, true); // from XMLDTDScannerImpl
//setFeature(NOTIFY_BUILTIN_REFS, false); // from XMLDocumentFragmentScannerImpl
//setFeature(NOTIFY_CHAR_REFS, false); // from XMLDocumentFragmentScannerImpl
//setFeature(WARN_ON_DUPLICATE_ENTITYDEF, false); // from XMLEntityManager
fFeatures.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
// add default recognized properties
final String[] recognizedProperties = {
@ -319,7 +324,11 @@ public class NonValidatingConfiguration
VALIDATION_MANAGER,
LOCALE,
SECURITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
addRecognizedProperties(recognizedProperties);
@ -377,6 +386,11 @@ public class NonValidatingConfiguration
}
setProperty(XML_SECURITY_PROPERTY_MANAGER, new XMLSecurityPropertyManager());
// Initialize Catalog features
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
setProperty(f.getPropertyName(), null);
}
} // <init>(SymbolTable,XMLGrammarPool)
//

View File

@ -20,12 +20,6 @@
package com.sun.org.apache.xerces.internal.parsers;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import javax.xml.XMLConstants;
import com.sun.org.apache.xerces.internal.impl.Constants;
import com.sun.org.apache.xerces.internal.impl.XML11DTDScannerImpl;
import com.sun.org.apache.xerces.internal.impl.XML11DocumentScannerImpl;
@ -52,7 +46,6 @@ import com.sun.org.apache.xerces.internal.util.FeatureState;
import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings;
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.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;
@ -69,6 +62,13 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLEntityResolver;
import com.sun.org.apache.xerces.internal.xni.parser.XMLErrorHandler;
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
import com.sun.org.apache.xerces.internal.xni.parser.XMLPullParserConfiguration;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import jdk.xml.internal.JdkXmlUtils;
import jdk.xml.internal.SecuritySupport;
/**
* This class is the configuration used to parse XML 1.0 and XML 1.1 documents.
@ -478,10 +478,6 @@ public class XML11Configuration extends ParserConfigurationSettings
// Common components for XML 1.1. and XML 1.0
fCommonComponents = new ArrayList<>();
// create table for features and properties
fFeatures = new HashMap<>();
fProperties = new HashMap<>();
// add default recognized features
final String[] recognizedFeatures =
{
@ -503,7 +499,8 @@ public class XML11Configuration extends ParserConfigurationSettings
EXTERNAL_GENERAL_ENTITIES,
EXTERNAL_PARAMETER_ENTITIES,
PARSER_SETTINGS,
XMLConstants.FEATURE_SECURE_PROCESSING
XMLConstants.FEATURE_SECURE_PROCESSING,
XMLConstants.USE_CATALOG
};
addRecognizedFeatures(recognizedFeatures);
// set state for default features
@ -528,6 +525,7 @@ public class XML11Configuration extends ParserConfigurationSettings
fFeatures.put(USE_GRAMMAR_POOL_ONLY, Boolean.FALSE);
fFeatures.put(PARSER_SETTINGS, Boolean.TRUE);
fFeatures.put(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
fFeatures.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT);
// add default recognized properties
final String[] recognizedProperties =
@ -559,7 +557,11 @@ public class XML11Configuration extends ParserConfigurationSettings
LOCALE,
SCHEMA_DV_FACTORY,
SECURITY_MANAGER,
XML_SECURITY_PROPERTY_MANAGER
XML_SECURITY_PROPERTY_MANAGER,
JdkXmlUtils.CATALOG_DEFER,
JdkXmlUtils.CATALOG_FILES,
JdkXmlUtils.CATALOG_PREFER,
JdkXmlUtils.CATALOG_RESOLVE
};
addRecognizedProperties(recognizedProperties);
@ -622,6 +624,11 @@ public class XML11Configuration extends ParserConfigurationSettings
// REVISIT: What is the right thing to do? -Ac
}
// Initialize Catalog features
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
fProperties.put(f.getPropertyName(), null);
}
fConfigUpdated = false;
} // <init>(SymbolTable,XMLGrammarPool)

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2001, 2002,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
* 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
*
@ -20,16 +20,15 @@
package com.sun.org.apache.xerces.internal.util;
import com.sun.org.apache.xerces.internal.impl.Constants;
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.sun.org.apache.xerces.internal.impl.Constants;
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
/**
* This class implements the basic operations for managing parser
* configuration features and properties. This utility class can
@ -87,12 +86,12 @@ public class ParserConfigurationSettings
public ParserConfigurationSettings(XMLComponentManager parent) {
// create storage for recognized features and properties
fRecognizedFeatures = new HashSet<String>();
fRecognizedProperties = new HashSet<String>();
fRecognizedFeatures = new HashSet<>();
fRecognizedProperties = new HashSet<>();
// create table for features and properties
fFeatures = new HashMap<String, Boolean>();
fProperties = new HashMap<String, Object>();
fFeatures = new HashMap<>();
fProperties = new HashMap<>();
// save parent
fParentSettings = parent;
@ -195,6 +194,7 @@ public class ParserConfigurationSettings
* it is <strong>really</strong>
* a critical error.
*/
@Override
public final boolean getFeature(String featureId)
throws XMLConfigurationException {
@ -205,6 +205,7 @@ public class ParserConfigurationSettings
return state.state;
} // getFeature(String):boolean
@Override
public final boolean getFeature(String featureId, boolean defaultValue) {
FeatureState state = getFeatureState(featureId);
if (state.isExceptional()) {
@ -213,8 +214,9 @@ public class ParserConfigurationSettings
return state.state;
}
@Override
public FeatureState getFeatureState(String featureId) {
Boolean state = (Boolean) fFeatures.get(featureId);
Boolean state = fFeatures.get(featureId);
if (state == null) {
FeatureState checkState = checkFeature(featureId);
@ -238,6 +240,7 @@ public class ParserConfigurationSettings
* it is <strong>really</strong>
* a critical error.
*/
@Override
public final Object getProperty(String propertyId)
throws XMLConfigurationException {
@ -249,6 +252,7 @@ public class ParserConfigurationSettings
return state.state;
} // getProperty(String):Object
@Override
public final Object getProperty(String propertyId, Object defaultValue) {
PropertyState state = getPropertyState(propertyId);
if (state.isExceptional()) {
@ -258,6 +262,7 @@ public class ParserConfigurationSettings
return state.state;
}
@Override
public PropertyState getPropertyState(String propertyId) {
Object propertyValue = fProperties.get(propertyId);
@ -307,6 +312,7 @@ public class ParserConfigurationSettings
*
* @param propertyId The unique identifier (URI) of the property
* being set.
* @return the PropertyState
* @exception com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException If the
* requested feature is not known.
*/

View File

@ -1,21 +1,26 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
/*
* Copyright 2002,2004 The Apache Software Foundation.
* Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* 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
* 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.
*
* http://www.apache.org/licenses/LICENSE-2.0
* 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).
*
* 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.
* 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.xerces.internal.utils;
@ -48,72 +53,57 @@ public final class SecuritySupport {
/**
* Return an instance of this class.
* @return an instance of this class
*/
public static SecuritySupport getInstance() {
return securitySupport;
}
static ClassLoader getContextClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (SecurityException ex) { }
return cl;
}
return AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> {
ClassLoader cl = null;
try {
cl = Thread.currentThread().getContextClassLoader();
} catch (SecurityException ex) { }
return cl;
});
}
static ClassLoader getSystemClassLoader() {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader cl = null;
try {
cl = ClassLoader.getSystemClassLoader();
} catch (SecurityException ex) {}
return cl;
}
return AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> {
ClassLoader cl = null;
try {
cl = ClassLoader.getSystemClassLoader();
} catch (SecurityException ex) {}
return cl;
});
}
static ClassLoader getParentClassLoader(final ClassLoader cl) {
return (ClassLoader)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
ClassLoader parent = null;
try {
parent = cl.getParent();
} catch (SecurityException ex) {}
return AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> {
ClassLoader parent = null;
try {
parent = cl.getParent();
} catch (SecurityException ex) {}
// eliminate loops in case of the boot
// ClassLoader returning itself as a parent
return (parent == cl) ? null : parent;
}
// eliminate loops in case of the boot
// ClassLoader returning itself as a parent
return (parent == cl) ? null : parent;
});
}
public static String getSystemProperty(final String propName) {
return (String)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return System.getProperty(propName);
}
});
return AccessController.doPrivileged((PrivilegedAction<String>) () ->
System.getProperty(propName));
}
static FileInputStream getFileInputStream(final File file)
throws FileNotFoundException
{
try {
return (FileInputStream)
AccessController.doPrivileged(new PrivilegedExceptionAction() {
public Object run() throws FileNotFoundException {
return new FileInputStream(file);
}
});
return AccessController.doPrivileged(
(PrivilegedExceptionAction<FileInputStream>)() ->
new FileInputStream(file));
} catch (PrivilegedActionException e) {
throw (FileNotFoundException)e.getException();
}
@ -135,38 +125,28 @@ public final class SecuritySupport {
* @return a resource bundle for the given base name and locale
*/
public static ResourceBundle getResourceBundle(final String bundle, final Locale locale) {
return AccessController.doPrivileged(new PrivilegedAction<ResourceBundle>() {
public ResourceBundle run() {
return AccessController.doPrivileged((PrivilegedAction<ResourceBundle>) () -> {
try {
return PropertyResourceBundle.getBundle(bundle, locale);
} catch (MissingResourceException e) {
try {
return PropertyResourceBundle.getBundle(bundle, locale);
} catch (MissingResourceException e) {
try {
return PropertyResourceBundle.getBundle(bundle, new Locale("en", "US"));
} catch (MissingResourceException e2) {
throw new MissingResourceException(
"Could not load any resource bundle by " + bundle, bundle, "");
}
return PropertyResourceBundle.getBundle(bundle, new Locale("en", "US"));
} catch (MissingResourceException e2) {
throw new MissingResourceException(
"Could not load any resource bundle by " + bundle, bundle, "");
}
}
});
}
static boolean getFileExists(final File f) {
return ((Boolean)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return f.exists() ? Boolean.TRUE : Boolean.FALSE;
}
})).booleanValue();
return (AccessController.doPrivileged((PrivilegedAction<Boolean>) () ->
f.exists()));
}
static long getLastModified(final File f) {
return ((Long)
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return new Long(f.lastModified());
}
})).longValue();
return (AccessController.doPrivileged((PrivilegedAction<Long>) () ->
f.lastModified()));
}
/**
@ -193,6 +173,7 @@ public final class SecuritySupport {
* @param allowedProtocols a list of allowed protocols separated by comma
* @param accessAny keyword to indicate allowing any protocol
* @return the name of the protocol if rejected, null otherwise
* @throws java.io.IOException
*/
public static String checkAccess(String systemId, String allowedProtocols, String accessAny) throws IOException {
if (systemId == null || (allowedProtocols != null &&
@ -201,7 +182,7 @@ public final class SecuritySupport {
}
String protocol;
if (systemId.indexOf(":")==-1) {
if (!systemId.contains(":")) {
protocol = "file";
} else {
URL url = new URL(systemId);
@ -249,15 +230,15 @@ public final class SecuritySupport {
* Read JAXP system property in this order: system property,
* $java.home/conf/jaxp.properties if the system property is not specified
*
* @param propertyId the Id of the property
* @param sysPropertyId the Id of the property
* @return the value of the property
*/
public static String getJAXPSystemProperty(String sysPropertyId) {
String accessExternal = getSystemProperty(sysPropertyId);
if (accessExternal == null) {
accessExternal = readJAXPProperty(sysPropertyId);
String value = getSystemProperty(sysPropertyId);
if (value == null) {
value = readJAXPProperty(sysPropertyId);
}
return accessExternal;
return value;
}
/**
@ -288,7 +269,7 @@ public final class SecuritySupport {
value = cacheProps.getProperty(propertyId);
}
catch (Exception ex) {}
catch (IOException ex) {}
finally {
if (is != null) {
try {

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 2003-2005 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
* 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
*
@ -17,6 +17,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.sun.org.apache.xerces.internal.xinclude;
import java.io.CharConversionException;
@ -70,6 +71,14 @@ import com.sun.org.apache.xerces.internal.xpointer.XPointerProcessor;
import com.sun.org.apache.xerces.internal.utils.ObjectFactory;
import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
import java.util.Objects;
import javax.xml.catalog.CatalogException;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogManager;
import javax.xml.catalog.CatalogResolver;
import javax.xml.catalog.CatalogUriResolver;
import javax.xml.transform.Source;
import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.InputSource;
/**
* <p>
@ -247,7 +256,7 @@ public class XIncludeHandler
{ ERROR_REPORTER, ENTITY_RESOLVER, SECURITY_MANAGER, BUFFER_SIZE };
/** Property defaults. */
private static final Object[] PROPERTY_DEFAULTS = { null, null, null, new Integer(XMLEntityManager.DEFAULT_BUFFER_SIZE) };
private static final Object[] PROPERTY_DEFAULTS = { null, null, null, XMLEntityManager.DEFAULT_BUFFER_SIZE};
// instance variables
@ -335,8 +344,8 @@ public class XIncludeHandler
private int[] fState = new int[INITIAL_SIZE];
// buffering the necessary DTD events
private ArrayList fNotations;
private ArrayList fUnparsedEntities;
private final ArrayList<Notation> fNotations;
private final ArrayList<UnparsedEntity> fUnparsedEntities;
// flags which control whether base URI or language fixup is performed.
private boolean fFixupBaseURIs = true;
@ -358,6 +367,17 @@ public class XIncludeHandler
// track whether the child config needs its features refreshed
private boolean fNeedCopyFeatures = true;
/** indicate whether Catalog should be used for resolving external resources */
private boolean fUseCatalog = true;
CatalogFeatures fCatalogFeatures;
CatalogResolver fCatalogResolver;
CatalogUriResolver fCatalogUriResolver;
private String fCatalogFile;
private String fDefer;
private String fPrefer;
private String fResolve;
// Constructors
public XIncludeHandler() {
@ -366,8 +386,8 @@ public class XIncludeHandler
fSawFallback[fDepth] = false;
fSawInclude[fDepth] = false;
fState[fDepth] = STATE_NORMAL_PROCESSING;
fNotations = new ArrayList();
fUnparsedEntities = new ArrayList();
fNotations = new ArrayList<>();
fUnparsedEntities = new ArrayList<>();
fBaseURIScope = new IntStack();
fBaseURI = new Stack();
@ -534,24 +554,31 @@ public class XIncludeHandler
fSecurityPropertyMgr = (XMLSecurityPropertyManager)
componentManager.getProperty(Constants.XML_SECURITY_PROPERTY_MANAGER);
//Use Catalog
fUseCatalog = componentManager.getFeature(XMLConstants.USE_CATALOG);
fCatalogFile = (String)componentManager.getProperty(CatalogFeatures.Feature.FILES.getPropertyName());
fDefer = (String)componentManager.getProperty(CatalogFeatures.Feature.DEFER.getPropertyName());
fPrefer = (String)componentManager.getProperty(CatalogFeatures.Feature.PREFER.getPropertyName());
fResolve = (String)componentManager.getProperty(CatalogFeatures.Feature.RESOLVE.getPropertyName());
// Get buffer size.
try {
Integer value =
(Integer)componentManager.getProperty(
BUFFER_SIZE);
if (value != null && value.intValue() > 0) {
fBufferSize = value.intValue();
if (value != null && value > 0) {
fBufferSize = value;
if (fChildConfig != null) {
fChildConfig.setProperty(BUFFER_SIZE, value);
}
}
else {
fBufferSize = ((Integer)getPropertyDefault(BUFFER_SIZE)).intValue();
fBufferSize = ((Integer)getPropertyDefault(BUFFER_SIZE));
}
}
catch (XMLConfigurationException e) {
fBufferSize = ((Integer)getPropertyDefault(BUFFER_SIZE)).intValue();
fBufferSize = ((Integer)getPropertyDefault(BUFFER_SIZE));
}
// Reset XML 1.0 text reader.
@ -1599,6 +1626,39 @@ public class XIncludeHandler
includedSource =
fEntityResolver.resolveEntity(resourceIdentifier);
if (includedSource == null) {
if (fCatalogFeatures == null) {
fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve);
}
fCatalogFile = fCatalogFeatures.get(CatalogFeatures.Feature.FILES);
if (fUseCatalog && fCatalogFile != null) {
/*
Although URI entry is preferred for resolving XInclude, system entry
is allowed as well.
*/
Source source = null;
try {
if (fCatalogUriResolver == null) {
fCatalogUriResolver = CatalogManager.catalogUriResolver(fCatalogFeatures);
}
source = fCatalogUriResolver.resolve(href, fCurrentBaseURI.getExpandedSystemId());
} catch (CatalogException e) {}
if (source != null && !source.isEmpty()) {
includedSource = new XMLInputSource(null, source.getSystemId(),
fCurrentBaseURI.getExpandedSystemId(), true);
} else {
if (fCatalogResolver == null) {
fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures);
}
InputSource is = fCatalogResolver.resolveEntity(href, href);
if (is != null && !is.isEmpty()) {
includedSource = new XMLInputSource(is, true);
}
}
}
}
if (includedSource != null &&
!(includedSource instanceof HTTPInputSource) &&
(accept != null || acceptLanguage != null) &&

View File

@ -21,9 +21,9 @@
package com.sun.org.apache.xerces.internal.xni.parser;
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;
import java.io.InputStream;
import java.io.Reader;
import org.xml.sax.InputSource;
/**
* This class represents an input source for an XML document. The
@ -107,6 +107,23 @@ public class XMLInputSource {
fBaseSystemId = resourceIdentifier.getBaseSystemId();
} // <init>(XMLResourceIdentifier)
/**
* Constructs an input source from a SAX InputSource
* object.
*
* @param inputSource a SAX InputSource
* @param isCreatedByResolver a flag to indicate whether the source is
* created by a resolver
*/
public XMLInputSource(InputSource inputSource, boolean isCreatedByResolver) {
fPublicId = inputSource.getPublicId();
fSystemId = inputSource.getSystemId();
fByteStream = inputSource.getByteStream();
fCharStream = inputSource.getCharacterStream();
fEncoding = inputSource.getEncoding();
fIsCreatedByResolver = isCreatedByResolver;
}
/**
* Constructs an input source from a byte stream.
*

View File

@ -1,13 +1,13 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* 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
* 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
*
@ -17,9 +17,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Id: XMLReaderManager.java,v 1.2.4.1 2005/09/15 08:16:02 suresh_emailid Exp $
*/
package com.sun.org.apache.xml.internal.utils;
import com.sun.org.apache.xalan.internal.XalanConstants;
@ -27,13 +25,16 @@ import com.sun.org.apache.xalan.internal.utils.FactoryImpl;
import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
import com.sun.org.apache.xalan.internal.utils.XMLSecurityManager;
import java.util.HashMap;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import jdk.xml.internal.JdkXmlFeatures;
import jdk.xml.internal.JdkXmlUtils;
import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
@ -41,6 +42,7 @@ import org.xml.sax.helpers.XMLReaderFactory;
* Creates XMLReader objects and caches them for re-use.
* This class follows the singleton pattern.
*/
@SuppressWarnings("deprecation") //org.xml.sax.helpers.XMLReaderFactory
public class XMLReaderManager {
private static final String NAMESPACES_FEATURE =
@ -58,12 +60,12 @@ public class XMLReaderManager {
/**
* Cache of XMLReader objects
*/
private ThreadLocal m_readers;
private ThreadLocal<XMLReader> m_readers;
/**
* Keeps track of whether an XMLReader object is in use.
*/
private HashMap m_inUse;
private HashMap<XMLReader, Boolean> m_inUse;
private boolean m_useServicesMechanism = true;
@ -75,6 +77,10 @@ public class XMLReaderManager {
private XMLSecurityManager _xmlSecurityManager;
//Catalog Feature
private boolean _useCatalog;
private CatalogFeatures _catalogFeatures;
/**
* Hidden constructor
*/
@ -101,17 +107,17 @@ public class XMLReaderManager {
if (m_readers == null) {
// When the m_readers.get() method is called for the first time
// on a thread, a new XMLReader will automatically be created.
m_readers = new ThreadLocal();
m_readers = new ThreadLocal<>();
}
if (m_inUse == null) {
m_inUse = new HashMap();
m_inUse = new HashMap<>();
}
// If the cached reader for this thread is in use, construct a new
// one; otherwise, return the cached reader unless it isn't an
// instance of the class set in the 'org.xml.sax.driver' property
reader = (XMLReader) m_readers.get();
reader = m_readers.get();
boolean threadHasReader = (reader != null);
String factory = SecuritySupport.getSystemProperty(property);
if (threadHasReader && m_inUse.get(reader) != Boolean.TRUE &&
@ -131,7 +137,7 @@ public class XMLReaderManager {
XMLSecurityManager.printWarning(reader.getClass().getName(),
XMLConstants.FEATURE_SECURE_PROCESSING, e);
}
} catch (Exception e) {
} catch (SAXException e) {
try {
// If unable to create an instance, let's try to use
// the XMLReader from JAXP
@ -156,8 +162,7 @@ public class XMLReaderManager {
throw new SAXException(ex);
} catch (FactoryConfigurationError ex1) {
throw new SAXException(ex1.toString());
} catch (NoSuchMethodError ex2) {
} catch (AbstractMethodError ame) {
} catch (NoSuchMethodError | AbstractMethodError ex2) {
}
// Cache the XMLReader if this is the first time we've created
@ -193,6 +198,23 @@ public class XMLReaderManager {
XMLSecurityManager.printWarning(reader.getClass().getName(), lastProperty, se);
}
boolean supportCatalog = true;
try {
reader.setFeature(JdkXmlUtils.USE_CATALOG, _useCatalog);
}
catch (SAXNotRecognizedException | SAXNotSupportedException e) {
supportCatalog = false;
}
if (supportCatalog && _useCatalog && _catalogFeatures != null) {
try {
for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
reader.setProperty(f.getPropertyName(), _catalogFeatures.get(f));
}
} catch (SAXNotRecognizedException e) {
//shall not happen for internal settings
}
}
return reader;
}
@ -229,6 +251,8 @@ public class XMLReaderManager {
public void setFeature(String name, boolean value) {
if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
_secureProcessing = value;
} else if (XMLConstants.USE_CATALOG.equals(name)) {
_useCatalog = value;
}
}
@ -252,6 +276,9 @@ public class XMLReaderManager {
_accessExternalDTD = (String)value;
} else if (name.equals(XalanConstants.SECURITY_MANAGER)) {
_xmlSecurityManager = (XMLSecurityManager)value;
} else if (JdkXmlFeatures.CATALOG_FEATURES.equals(name)) {
_catalogFeatures = (CatalogFeatures)value;
}
}
}

View File

@ -1,15 +1,15 @@
/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
* Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright 1999-2004 The Apache Software Foundation.
* 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
*
* 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
* 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,
@ -18,27 +18,21 @@
* limitations under the License.
*/
// $Id: JAXPExtensionsProvider.java,v 1.1.2.1 2005/08/01 01:30:17 jeffsuttor Exp $
package com.sun.org.apache.xpath.internal.jaxp;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathFunctionResolver;
import com.sun.org.apache.xalan.internal.res.XSLMessages;
import com.sun.org.apache.xpath.internal.ExtensionsProvider;
import com.sun.org.apache.xpath.internal.functions.FuncExtFunction;
import com.sun.org.apache.xpath.internal.objects.XNodeSet;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import java.util.ArrayList;
import java.util.Vector;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathFunction;
import javax.xml.xpath.XPathFunctionException;
import com.sun.org.apache.xpath.internal.ExtensionsProvider;
import com.sun.org.apache.xpath.internal.XPathContext;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.objects.XNodeSet;
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.FeatureManager;
import com.sun.org.apache.xpath.internal.functions.FuncExtFunction;
import java.util.Vector;
import java.util.ArrayList;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPathFunctionResolver;
import jdk.xml.internal.JdkXmlFeatures;
/**
*
@ -55,10 +49,10 @@ public class JAXPExtensionsProvider implements ExtensionsProvider {
}
public JAXPExtensionsProvider(XPathFunctionResolver resolver,
boolean featureSecureProcessing, FeatureManager featureManager ) {
boolean featureSecureProcessing, JdkXmlFeatures featureManager ) {
this.resolver = resolver;
if (featureSecureProcessing &&
!featureManager.isFeatureEnabled(FeatureManager.Feature.ORACLE_ENABLE_EXTENSION_FUNCTION)) {
!featureManager.getFeature(JdkXmlFeatures.XmlFeature.ENABLE_EXTENSION_FUNCTION)) {
this.extensionInvocationDisabled = true;
}
}

View File

@ -20,7 +20,6 @@
package com.sun.org.apache.xpath.internal.jaxp;
import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import com.sun.org.apache.xpath.internal.objects.XObject;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
@ -30,6 +29,7 @@ import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import jdk.xml.internal.JdkXmlFeatures;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
@ -48,7 +48,7 @@ public class XPathExpressionImpl extends XPathImplUtil implements XPathExpressio
*/
protected XPathExpressionImpl() {
this(null, null, null, null,
false, true, new FeatureManager());
false, true, new JdkXmlFeatures(false));
};
protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
@ -56,13 +56,13 @@ public class XPathExpressionImpl extends XPathImplUtil implements XPathExpressio
XPathFunctionResolver functionResolver,
XPathVariableResolver variableResolver) {
this(xpath, prefixResolver, functionResolver, variableResolver,
false, true, new FeatureManager());
false, true, new JdkXmlFeatures(false));
};
protected XPathExpressionImpl(com.sun.org.apache.xpath.internal.XPath xpath,
JAXPPrefixResolver prefixResolver,XPathFunctionResolver functionResolver,
XPathVariableResolver variableResolver, boolean featureSecureProcessing,
boolean useServiceMechanism, FeatureManager featureManager) {
boolean useServiceMechanism, JdkXmlFeatures featureManager) {
this.xpath = xpath;
this.prefixResolver = prefixResolver;
this.functionResolver = functionResolver;

View File

@ -22,16 +22,14 @@
package com.sun.org.apache.xpath.internal.jaxp;
import com.sun.org.apache.xalan.internal.XalanConstants;
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.FeatureManager;
import com.sun.org.apache.xalan.internal.utils.FeaturePropertyBase;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
import javax.xml.XMLConstants;
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathFactoryConfigurationException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import jdk.xml.internal.JdkXmlFeatures;
/**
* The XPathFactory builds XPaths.
@ -69,7 +67,7 @@ public class XPathFactoryImpl extends XPathFactory {
private boolean _useServicesMechanism = true;
private final FeatureManager _featureManager;
private final JdkXmlFeatures _featureManager;
public XPathFactoryImpl() {
this(true);
@ -80,13 +78,11 @@ public class XPathFactoryImpl extends XPathFactory {
}
public XPathFactoryImpl(boolean 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);
}
_featureManager = new JdkXmlFeatures(!_isNotSecureProcessing);
this._useServicesMechanism = useServicesMechanism;
}
/**
@ -189,8 +185,8 @@ public class XPathFactoryImpl extends XPathFactory {
_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
@ -204,7 +200,7 @@ public class XPathFactoryImpl extends XPathFactory {
}
if (_featureManager != null &&
_featureManager.setValue(name, FeaturePropertyBase.State.APIPROPERTY, value)) {
_featureManager.setFeature(name, JdkXmlFeatures.State.APIPROPERTY, value)) {
return;
}
@ -257,11 +253,10 @@ public class XPathFactoryImpl extends XPathFactory {
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

View File

@ -20,20 +20,20 @@
package com.sun.org.apache.xpath.internal.jaxp;
import javax.xml.namespace.QName;
import javax.xml.namespace.NamespaceContext;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import javax.xml.xpath.XPathExpression;
import com.sun.org.apache.xpath.internal.*;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xalan.internal.utils.FeatureManager;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathEvaluationResult;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathVariableResolver;
import jdk.xml.internal.JdkXmlFeatures;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.transform.TransformerException;
import javax.xml.xpath.XPathEvaluationResult;
/**
* The XPathImpl class provides implementation for the methods defined in
@ -54,12 +54,12 @@ public class XPathImpl extends XPathImplUtil implements javax.xml.xpath.XPath {
private NamespaceContext namespaceContext=null;
XPathImpl(XPathVariableResolver vr, XPathFunctionResolver fr) {
this(vr, fr, false, true, new FeatureManager());
this(vr, fr, false, true, new JdkXmlFeatures(false));
}
XPathImpl(XPathVariableResolver vr, XPathFunctionResolver fr,
boolean featureSecureProcessing, boolean useServiceMechanism,
FeatureManager featureManager) {
JdkXmlFeatures featureManager) {
this.origVariableResolver = this.variableResolver = vr;
this.origFunctionResolver = this.functionResolver = fr;
this.featureSecureProcessing = featureSecureProcessing;

View File

@ -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.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -27,7 +27,6 @@ package com.sun.org.apache.xpath.internal.jaxp;
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 com.sun.org.apache.xml.internal.dtm.DTM;
import com.sun.org.apache.xpath.internal.objects.XObject;
import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
@ -42,6 +41,7 @@ import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFunctionResolver;
import javax.xml.xpath.XPathNodes;
import javax.xml.xpath.XPathVariableResolver;
import jdk.xml.internal.JdkXmlFeatures;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.traversal.NodeIterator;
@ -61,7 +61,7 @@ class XPathImplUtil {
// Secure Processing Feature is set on XPathFactory then the invocation of
// extensions function need to throw XPathFunctionException
boolean featureSecureProcessing = false;
FeatureManager featureManager;
JdkXmlFeatures featureManager;
/**
* Evaluate an XPath context using the internal XPath engine

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -381,4 +381,42 @@ public final class XMLConstants {
*/
public static final String ACCESS_EXTERNAL_STYLESHEET = "http://javax.xml.XMLConstants/property/accessExternalStylesheet";
/**
* Feature: useCatalog
*
* <p>
* Instructs XML processors to use XML Catalogs to resolve entity references.
* Catalogs may be set through JAXP factories, system properties, or
* jaxp.properties by using the {@code javax.xml.catalog.files} property
* defined in {@link javax.xml.catalog.CatalogFeatures}.
* The following code enables Catalog on SAX parser:
* <pre>{@code
* SAXParserFactory spf = SAXParserFactory.newInstance();
* spf.setFeature(XMLConstants.USE_CATALOG, true);
* SAXParser parser = spf.newSAXParser();
* parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), "catalog.xml");
* }</pre>
*
* <p>
* <b>Value:</b> a boolean. If the value is true, and a catalog is set,
* the XML parser will resolve external references using
* {@link javax.xml.catalog.CatalogResolver}. If the value is false,
* XML Catalog is ignored even if one is set. The default value is true.
*
* <p>
* <b>System Property:</b> The value of this property can be set or overridden by
* system property {@code javax.xml.useCatalog}
*
* <p>
* <b>jaxp.properties:</b> This configuration file is in standard
* {@link java.util.Properties} format and typically located in the {@code conf}
* directory of the Java installation. If the file exists and the system
* property is specified, its value will be used to override the default
* value of the property.
*
* @since 9
*/
public static final String USE_CATALOG = "http://javax.xml.XMLConstants/feature/useCatalog";
}

View File

@ -195,29 +195,184 @@ import jdk.xml.internal.SecuritySupport;
.build();
* }</pre>
*
* <p>
* <h3>JAXP XML Processor Support</h3>
* The Catalog Features are supported throughout the JAXP processors, including
* SAX and DOM ({@link javax.xml.parsers}), and StAX parsers ({@link javax.xml.stream}),
* Schema Validation ({@link javax.xml.validation}), and XML Transformation
* ({@link javax.xml.transform}). The features described above can be set through JAXP
* factories or processors that define a setProperty or setAttribute interface.
* For example, the following code snippet sets a path to a catalog file on a SAX
* parser through the {@code javax.xml.catalog.files} property:
* <p>
* <pre>{@code
* SAXParserFactory spf = SAXParserFactory.newInstance();
* spf.setFeature(XMLConstants.USE_CATALOG, true); [1]
* SAXParser parser = spf.newSAXParser();
* parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), "catalog.xml");
* }</pre>
* <p>
* [1] Note that this statement is not required since the default value of
* {@link javax.xml.XMLConstants#USE_CATALOG USE_CATALOG} is true.
*
* <p>
* The JAXP Processors' support for Catalog depends on both the
* {@link javax.xml.XMLConstants#USE_CATALOG USE_CATALOG} feature and the
* existence of valid Catalog file(s). A JAXP processor will use the Catalog
* only when the feature is true and valid Catalog file(s) are specified through
* the {@code javax.xml.catalog.files} property. It will make no attempt to use
* the Catalog if either {@link javax.xml.XMLConstants#USE_CATALOG USE_CATALOG}
* is set to false, or there is no Catalog file specified.
*
* <p>
* The JAXP processors will observe the default settings of the
* {@link javax.xml.catalog.CatalogFeatures}. The processors, for example, will
* report an Exception by default when no matching entry is found since the
* default value of the {@code javax.xml.catalog.resolve} property is strict.
*
* <p>
* The JAXP processors give preference to user-specified custom resolvers. If such
* a resolver is registered, it will be used over the CatalogResolver. If it returns
* null however, the processors will continue resolving with the CatalogResolver.
* If it returns an empty source, no attempt will be made by the CatalogResolver.
*
* <p>
* The Catalog support is available for any process in the JAXP library that
* supports a resolver. The following table lists all such processes.
*
* <p>
* <center><h3><a name="CatalogFeatures">Processes with Catalog Support</a></h3></center></p>
*
* <table border="1">
* <thead>
* <tr>
* <th>Process</th>
* <th>Catalog Entry Type</th>
* <th>Example</th>
* </tr>
* </thead>
* <tbody>
* <tr>
* <td>DTDs and external entities</td>
* <td>public, system</td>
* <td>
* <pre>{@literal
The following DTD reference:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Can be resolved using the following Catalog entry:
<public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="catalog/xhtml1-strict.dtd"/>
or
<systemSuffix systemIdSuffix="html1-strict.dtd" uri="catalog/xhtml1-strict.dtd"/>
* }</pre>
* </td>
* </tr>
* <tr>
* <td>XInclude</td>
* <td>uri</td>
* <td>
* <pre>{@literal
The following XInclude element:
<xi:include href="http://openjdk.java.net/xml/disclaimer.xml"/>
can be resolved using an uri entry:
<uri name="http://openjdk.java.net/xml/disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
or
<uriSuffix uriSuffix="disclaimer.xml" uri="file:///pathto/local/disclaimer.xml"/>
* }</pre>
* </td>
* </tr>
* <tr>
* <td>XSD import</td>
* <td>uri</td>
* <td>
* <pre>{@literal
The following import element:
<xsd:import namespace="http://openjdk.java.net/xsd/XSDImport_person"
schemaLocation="http://openjdk.java.net/xsd/XSDImport_person.xsd"/>
can be resolved using an uri entry:
<uri name="http://openjdk.java.net/xsd/XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
or
<uriSuffix uriSuffix="XSDImport_person.xsd" uri="file:///pathto/local/XSDImport_person.xsd"/>
or
<uriSuffix uriSuffix="http://openjdk.java.net/xsd/XSDImport_person" uri="file:///pathto/local/XSDImport_person.xsd"/>
* }</pre>
* </td>
* </tr>
* <tr>
* <td>XSD include</td>
* <td>uri</td>
* <td>
* <pre>{@literal
The following include element:
<xsd:include schemaLocation="http://openjdk.java.net/xsd/XSDInclude_person.xsd"/>
can be resolved using an uri entry:
<uri name="http://openjdk.java.net/xsd/XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
or
<uriSuffix uriSuffix="XSDInclude_person.xsd" uri="file:///pathto/local/XSDInclude_person.xsd"/>
* }</pre>
* </td>
* </tr>
* <tr>
* <td>XSL import and include</td>
* <td>uri</td>
* <td>
* <pre>{@literal
The following include element:
<xsl:include href="http://openjdk.java.net/xsl/include.xsl"/>
can be resolved using an uri entry:
<uri name="http://openjdk.java.net/xsl/include.xsl" uri="file:///pathto/local/include.xsl"/>
or
<uriSuffix uriSuffix="include.xsl" uri="file:///pathto/local/include.xsl"/>
* }</pre>
* </td>
* </tr>
* <tr>
* <td>XSL document function</td>
* <td>uri</td>
* <td>
* <pre>{@literal
The document in the following element:
<xsl:variable name="dummy" select="document('http://openjdk.java.net/xsl/list.xml')"/>
can be resolved using an uri entry:
<uri name="http://openjdk.java.net/xsl/list.xml" uri="file:///pathto/local/list.xml"/>
or
<uriSuffix uriSuffix="list.xml" uri="file:///pathto/local/list.xml"/>
* }</pre>
* </td>
* </tr>
* </tbody>
* </table>
*
* @since 9
*/
public class CatalogFeatures {
/**
* The constant name of the javax.xml.catalog.files property. See the property table for more details.
* The constant name of the javax.xml.catalog.files property as described
* in the property table above.
*/
static final String CATALOG_FILES = "javax.xml.catalog.files";
/**
* The javax.xml.catalog.prefer property. See the property table for more details.
* The javax.xml.catalog.prefer property as described
* in the property table above.
*/
static final String CATALOG_PREFER = "javax.xml.catalog.prefer";
/**
* Determines whether or not delegated catalogs and nextCatalog will be read
* when the current catalog is loaded.
* The javax.xml.catalog.defer property as described
* in the property table above.
*/
static final String CATALOG_DEFER = "javax.xml.catalog.defer";
/**
* Determines the action if there is no matching entry found after
* all of the specified catalogs are exhausted.
* The javax.xml.catalog.resolve property as described
* in the property table above.
*/
static final String CATALOG_RESOLVE = "javax.xml.catalog.resolve";
@ -305,7 +460,7 @@ public class CatalogFeatures {
* Returns the default value of the property.
* @return the default value of the property
*/
String defaultValue() {
public String defaultValue() {
return defaultValue;
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -181,78 +181,78 @@ import java.util.GregorianCalendar;
public abstract class XMLGregorianCalendar
implements Cloneable {
/**
* Default no-arg constructor.
*
* <p>Note: Always use the {@link DatatypeFactory} to
* construct an instance of {@code XMLGregorianCalendar}.
* The constructor on this class cannot be guaranteed to
* produce an object with a consistent state and may be
* removed in the future.
*/
public XMLGregorianCalendar() {
}
/**
* Default no-arg constructor.
*
* <p>Note: Always use the {@link DatatypeFactory} to
* construct an instance of {@code XMLGregorianCalendar}.
* The constructor on this class cannot be guaranteed to
* produce an object with a consistent state and may be
* removed in the future.
*/
public XMLGregorianCalendar() {
}
/**
* Unset all fields to undefined.
*
* <p>Set all int fields to {@link DatatypeConstants#FIELD_UNDEFINED} and reference fields
* to null.
*/
public abstract void clear();
/**
* Unset all fields to undefined.
*
* <p>Set all int fields to {@link DatatypeConstants#FIELD_UNDEFINED} and reference fields
* to null.
*/
public abstract void clear();
/**
* Reset this {@code XMLGregorianCalendar} to its original values.
*
* <p>{@code XMLGregorianCalendar} is reset to the same values as when it was created with
* {@link DatatypeFactory#newXMLGregorianCalendar()},
* {@link DatatypeFactory#newXMLGregorianCalendar(String lexicalRepresentation)},
* {@link DatatypeFactory#newXMLGregorianCalendar(
* BigInteger year,
* int month,
* int day,
* int hour,
* int minute,
* int second,
* BigDecimal fractionalSecond,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendar(
* int year,
* int month,
* int day,
* int hour,
* int minute,
* int second,
* int millisecond,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendar(GregorianCalendar cal)},
* {@link DatatypeFactory#newXMLGregorianCalendarDate(
* int year,
* int month,
* int day,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* BigDecimal fractionalSecond,
* int timezone)} or
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* int milliseconds,
* int timezone)}.
*
* <p>{@code reset()} is designed to allow the reuse of existing {@code XMLGregorianCalendar}s
* thus saving resources associated with the creation of new {@code XMLGregorianCalendar}s.
*/
public abstract void reset();
/**
* Reset this {@code XMLGregorianCalendar} to its original values.
*
* <p>{@code XMLGregorianCalendar} is reset to the same values as when it was created with
* {@link DatatypeFactory#newXMLGregorianCalendar()},
* {@link DatatypeFactory#newXMLGregorianCalendar(String lexicalRepresentation)},
* {@link DatatypeFactory#newXMLGregorianCalendar(
* BigInteger year,
* int month,
* int day,
* int hour,
* int minute,
* int second,
* BigDecimal fractionalSecond,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendar(
* int year,
* int month,
* int day,
* int hour,
* int minute,
* int second,
* int millisecond,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendar(GregorianCalendar cal)},
* {@link DatatypeFactory#newXMLGregorianCalendarDate(
* int year,
* int month,
* int day,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* int timezone)},
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* BigDecimal fractionalSecond,
* int timezone)} or
* {@link DatatypeFactory#newXMLGregorianCalendarTime(
* int hours,
* int minutes,
* int seconds,
* int milliseconds,
* int timezone)}.
*
* <p>{@code reset()} is designed to allow the reuse of existing {@code XMLGregorianCalendar}s
* thus saving resources associated with the creation of new {@code XMLGregorianCalendar}s.
*/
public abstract void reset();
/**
* Set low and high order component of XSD {@code dateTime} year field.
@ -340,75 +340,75 @@ public abstract class XMLGregorianCalendar
*/
public void setTime(int hour, int minute, int second) {
setTime(
hour,
minute,
second,
null // fractional
);
setTime(
hour,
minute,
second,
null // fractional
);
}
/**
* Set hours.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param hour value constraints summarized in <a href="#datetimefield-hour">hour field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code hour} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setHour(int hour);
/**
* Set hours.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param hour value constraints summarized in <a href="#datetimefield-hour">hour field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code hour} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setHour(int hour);
/**
* Set minutes.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param minute value constraints summarized in <a href="#datetimefield-minute">minute field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code minute} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setMinute(int minute);
/**
* Set minutes.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param minute value constraints summarized in <a href="#datetimefield-minute">minute field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code minute} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setMinute(int minute);
/**
* Set seconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param second value constraints summarized in <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code second} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setSecond(int second);
/**
* Set seconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param second value constraints summarized in <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code second} parameter is outside value constraints for the field as specified in
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setSecond(int second);
/**
* Set milliseconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param millisecond value constraints summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code millisecond} parameter is outside value constraints for the field as specified
* in <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setMillisecond(int millisecond);
/**
* Set milliseconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @param millisecond value constraints summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code millisecond} parameter is outside value constraints for the field as specified
* in <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setMillisecond(int millisecond);
/**
* Set fractional seconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@code null}.
*
* @param fractional value constraints summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code fractional} parameter is outside value constraints for the field as specified
* in <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setFractionalSecond(BigDecimal fractional);
/**
* Set fractional seconds.
*
* <p>Unset this field by invoking the setter with a parameter value of {@code null}.
*
* @param fractional value constraints summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @throws IllegalArgumentException if {@code fractional} parameter is outside value constraints for the field as specified
* in <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public abstract void setFractionalSecond(BigDecimal fractional);
/**
@ -429,12 +429,12 @@ public abstract class XMLGregorianCalendar
* <a href="#datetimefieldmapping">date/time field mapping table</a>.
*/
public void setTime(
int hour,
int minute,
int second,
BigDecimal fractional) {
int hour,
int minute,
int second,
BigDecimal fractional) {
setHour(hour);
setHour(hour);
setMinute(minute);
setSecond(second);
setFractionalSecond(fractional);
@ -465,173 +465,182 @@ public abstract class XMLGregorianCalendar
setMillisecond(millisecond);
}
/**
* Return high order component for XML Schema 1.0 dateTime datatype field for
* {@code year}.
* {@code null} if this optional part of the year field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
* @return eon of this {@code XMLGregorianCalendar}. The value
* returned is an integer multiple of 10^9.
*
* @see #getYear()
* @see #getEonAndYear()
*/
public abstract BigInteger getEon();
/**
* Returns the high order component for XML Schema 1.0 dateTime datatype field for
* {@code year}.
* {@code null} if this optional part of the year field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
* @return The eon of this {@code XMLGregorianCalendar}. The value
* returned is an integer multiple of 10^9.
*
* @see #getYear()
* @see #getEonAndYear()
*/
public abstract BigInteger getEon();
/**
* Return low order component for XML Schema 1.0 dateTime datatype field for
* {@code year} or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
*
* @return year of this {@code XMLGregorianCalendar}.
*
* @see #getEon()
* @see #getEonAndYear()
*/
public abstract int getYear();
/**
* Returns the low order component for XML Schema 1.0 dateTime datatype field for
* {@code year} or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
*
* @return The year of this {@code XMLGregorianCalendar}.
*
* @see #getEon()
* @see #getEonAndYear()
*/
public abstract int getYear();
/**
* Return XML Schema 1.0 dateTime datatype field for
* {@code year}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
*
* @return sum of {@code eon} and {@code BigInteger.valueOf(year)}
* when both fields are defined. When only {@code year} is defined,
* return it. When both {@code eon} and {@code year} are not
* defined, return {@code null}.
*
* @see #getEon()
* @see #getYear()
*/
public abstract BigInteger getEonAndYear();
/**
* Returns the XML Schema 1.0 dateTime datatype field for
* {@code year}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-year">year field of date/time field mapping table</a>.
*
* @return sum of {@code eon} and {@code BigInteger.valueOf(year)}
* when both fields are defined. When only {@code year} is defined,
* return it. When both {@code eon} and {@code year} are not
* defined, return {@code null}.
*
* @see #getEon()
* @see #getYear()
*/
public abstract BigInteger getEonAndYear();
/**
* Return number of month or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-month">month field of date/time field mapping table</a>.
*
* @return year of this {@code XMLGregorianCalendar}.
*
*/
public abstract int getMonth();
/**
* Returns the month of this calendar or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-month">month field of date/time field mapping table</a>.
*
* @return The month of this {@code XMLGregorianCalendar}, from 1 to 12.
*
*/
public abstract int getMonth();
/**
* Return day in month or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-day">day field of date/time field mapping table</a>.
*
* @see #setDay(int)
*/
public abstract int getDay();
/**
* Returns the day of month or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-day">day field of date/time field mapping table</a>.
*
* @return The day of month of this {@code XMLGregorianCalendar}, from 1 to 31.
*
* @see #setDay(int)
*/
public abstract int getDay();
/**
* Return timezone offset in minutes or
* {@link DatatypeConstants#FIELD_UNDEFINED} if this optional field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-timezone">timezone field of date/time field mapping table</a>.
*
* @see #setTimezone(int)
*/
public abstract int getTimezone();
/**
* Returns the Timezone offset in minutes or
* {@link DatatypeConstants#FIELD_UNDEFINED} if this optional field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-timezone">timezone field of date/time field mapping table</a>.
*
* @return The Timezone offset in minutes of this {@code XMLGregorianCalendar}.
*
* @see #setTimezone(int)
*/
public abstract int getTimezone();
/**
* Return hours or {@link DatatypeConstants#FIELD_UNDEFINED}.
* Returns {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-hour">hour field of date/time field mapping table</a>.
* @see #setTime(int, int, int)
*/
public abstract int getHour();
/**
* Returns the hour of day or
* {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-hour">hour field of date/time field mapping table</a>.
*
* @return The hour of day of this {@code XMLGregorianCalendar}, from 0 to 23.
*
* @see #setTime(int, int, int)
*/
public abstract int getHour();
/**
* Return minutes or {@link DatatypeConstants#FIELD_UNDEFINED}.
* Returns {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-minute">minute field of date/time field mapping table</a>.
* @see #setTime(int, int, int)
*/
public abstract int getMinute();
/**
* Returns the minute of hour or
* {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-minute">minute field of date/time field mapping table</a>.
*
* @return The minute of hour of this {@code XMLGregorianCalendar}, from 0 to 59.
*
* @see #setTime(int, int, int)
*/
public abstract int getMinute();
/**
* Return seconds or {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Returns {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
* When this field is not defined, the optional xs:dateTime
* fractional seconds field, represented by
* {@link #getFractionalSecond()} and {@link #getMillisecond()},
* must not be defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @return Second of this {@code XMLGregorianCalendar}.
*
* @see #getFractionalSecond()
* @see #getMillisecond()
* @see #setTime(int, int, int)
*/
public abstract int getSecond();
/**
* Returns the second of minute or
* {@link DatatypeConstants#FIELD_UNDEFINED} if this field is not defined.
* When this field is not defined, the optional xs:dateTime
* fractional seconds field, represented by
* {@link #getFractionalSecond()} and {@link #getMillisecond()},
* must not be defined.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @return The second of minute of this {@code XMLGregorianCalendar}, from 0 to 59.
*
* @see #getFractionalSecond()
* @see #getMillisecond()
* @see #setTime(int, int, int)
*/
public abstract int getSecond();
/**
* Return millisecond precision of {@link #getFractionalSecond()}.
*
* <p>This method represents a convenience accessor to infinite
* precision fractional second value returned by
* {@link #getFractionalSecond()}. The returned value is the rounded
* down to milliseconds value of
* {@link #getFractionalSecond()}. When {@link #getFractionalSecond()}
* returns {@code null}, this method must return
* {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @return Millisecond of this {@code XMLGregorianCalendar}.
*
* @see #getFractionalSecond()
* @see #setTime(int, int, int)
*/
public int getMillisecond() {
/**
* Returns the millisecond precision of {@link #getFractionalSecond()}.
*
* <p>This method represents a convenience accessor to infinite
* precision fractional second value returned by
* {@link #getFractionalSecond()}. The returned value is the rounded
* down to milliseconds value of
* {@link #getFractionalSecond()}. When {@link #getFractionalSecond()}
* returns {@code null}, this method must return
* {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* <p>Value constraints for this value are summarized in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* @return The millisecond precision of this {@code XMLGregorianCalendar}.
*
* @see #getFractionalSecond()
* @see #setTime(int, int, int)
*/
public int getMillisecond() {
BigDecimal fractionalSeconds = getFractionalSecond();
BigDecimal fractionalSeconds = getFractionalSecond();
// is field undefined?
if (fractionalSeconds == null) {
return DatatypeConstants.FIELD_UNDEFINED;
}
return getFractionalSecond().movePointRight(3).intValue();
// is field undefined?
if (fractionalSeconds == null) {
return DatatypeConstants.FIELD_UNDEFINED;
}
/**
* Return fractional seconds.
*
* <p>{@code null} is returned when this optional field is not defined.
*
* <p>Value constraints are detailed in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* <p>This optional field can only have a defined value when the
* xs:dateTime second field, represented by {@link #getSecond()},
* does not return {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @return fractional seconds of this {@code XMLGregorianCalendar}.
*
* @see #getSecond()
* @see #setTime(int, int, int, BigDecimal)
*/
public abstract BigDecimal getFractionalSecond();
return getFractionalSecond().movePointRight(3).intValue();
}
/**
* Returns fractional seconds.
*
* <p>{@code null} is returned when this optional field is not defined.
*
* <p>Value constraints are detailed in
* <a href="#datetimefield-second">second field of date/time field mapping table</a>.
*
* <p>This optional field can only have a defined value when the
* xs:dateTime second field, represented by {@link #getSecond()},
* does not return {@link DatatypeConstants#FIELD_UNDEFINED}.
*
* @return Fractional seconds of this {@code XMLGregorianCalendar}.
*
* @see #getSecond()
* @see #setTime(int, int, int, BigDecimal)
*/
public abstract BigDecimal getFractionalSecond();
// comparisons
/**
@ -681,10 +690,11 @@ public abstract class XMLGregorianCalendar
* returns {@link DatatypeConstants#EQUAL},
* otherwise {@code false}.
*/
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof XMLGregorianCalendar)) {
return false;
return false;
}
return compare((XMLGregorianCalendar) obj) == DatatypeConstants.EQUAL;
}
@ -694,6 +704,7 @@ public abstract class XMLGregorianCalendar
*
* @return hash code of this object.
*/
@Override
public int hashCode() {
// Following two dates compare to EQUALS since in different timezones.
@ -846,18 +857,19 @@ public abstract class XMLGregorianCalendar
*/
public abstract QName getXMLSchemaType();
/**
* Returns a {@code String} representation of this {@code XMLGregorianCalendar} {@code Object}.
*
* <p>The result is a lexical representation generated by {@link #toXMLFormat()}.
*
* @return A non-{@code null} valid {@code String} representation of this {@code XMLGregorianCalendar}.
*
/**
* Returns a {@code String} representation of this {@code XMLGregorianCalendar} {@code Object}.
*
* <p>The result is a lexical representation generated by {@link #toXMLFormat()}.
*
* @return A non-{@code null} valid {@code String} representation of this {@code XMLGregorianCalendar}.
*
* @throws IllegalStateException if the combination of set fields
* does not match one of the eight defined XML Schema builtin date/time datatypes.
*
* @see #toXMLFormat()
*/
*/
@Override
public String toString() {
return toXMLFormat();
@ -970,6 +982,8 @@ public abstract class XMLGregorianCalendar
* {@code Calendar.set(int,int)}</li>
* </ul>
*
* @return An instance of {@link java.util.GregorianCalendar}.
*
* @see #toGregorianCalendar(java.util.TimeZone, java.util.Locale, XMLGregorianCalendar)
*/
public abstract GregorianCalendar toGregorianCalendar();
@ -1026,9 +1040,9 @@ public abstract class XMLGregorianCalendar
* @return a java.util.GregorianCalendar conversion of this instance.
*/
public abstract GregorianCalendar toGregorianCalendar(
java.util.TimeZone timezone,
java.util.Locale aLocale,
XMLGregorianCalendar defaults);
java.util.TimeZone timezone,
java.util.Locale aLocale,
XMLGregorianCalendar defaults);
/**
* Returns a {@code java.util.TimeZone} for this class.
@ -1055,5 +1069,7 @@ public abstract class XMLGregorianCalendar
*
* @return copy of this {@code Object}
*/
public abstract Object clone();
@Override
public abstract Object clone();
}

View File

@ -0,0 +1,348 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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 jdk.xml.internal;
import javax.xml.XMLConstants;
import static jdk.xml.internal.JdkXmlUtils.SP_USE_CATALOG;
/**
* This class manages JDK's XML Features. Previously added features and properties
* may be gradually moved to this class.
*/
public class JdkXmlFeatures {
public static final String ORACLE_JAXP_PROPERTY_PREFIX =
"http://www.oracle.com/xml/jaxp/properties/";
/**
* Feature enableExtensionFunctions
*/
public static final String ORACLE_ENABLE_EXTENSION_FUNCTION =
ORACLE_JAXP_PROPERTY_PREFIX + "enableExtensionFunctions";
public static final String SP_ENABLE_EXTENSION_FUNCTION =
"javax.xml.enableExtensionFunctions";
public static final String CATALOG_FEATURES = "javax.xml.catalog.catalogFeatures";
public final static String PROPERTY_USE_CATALOG = XMLConstants.USE_CATALOG;
public static enum XmlFeature {
/**
* Feature enableExtensionFunctions
* FSP: extension function is enforced by FSP. When FSP is on, entension
* function is disabled.
*/
ENABLE_EXTENSION_FUNCTION(ORACLE_ENABLE_EXTENSION_FUNCTION,
SP_ENABLE_EXTENSION_FUNCTION, true, false, true, true),
/**
* The {@link javax.xml.XMLConstants.USE_CATALOG} feature.
* FSP: USE_CATALOG is not enforced by FSP.
*/
USE_CATALOG(PROPERTY_USE_CATALOG, SP_USE_CATALOG, true, false, true, false);
private final String name;
private final String nameSP;
private final boolean valueDefault;
private final boolean valueEnforced;
private final boolean hasSystem;
private final boolean enforced;
/**
* Constructs an XmlFeature instance.
* @param name the name of the feature
* @param nameSP the name of the System Property
* @param value the value of the feature
* @param hasSystem a flag to indicate whether the feature is supported
* @param enforced a flag indicating whether the feature is
* FSP (Feature_Secure_Processing) enforced
* with a System property
*/
XmlFeature(String name, String nameSP, boolean value, boolean valueEnforced, boolean hasSystem, boolean enforced) {
this.name = name;
this.nameSP = nameSP;
this.valueDefault = value;
this.valueEnforced = valueEnforced;
this.hasSystem = hasSystem;
this.enforced = enforced;
}
/**
* Checks whether the specified property is equal to the current property.
* @param propertyName the name of a property
* @return true if the specified property is the current property, false
* otherwise
*/
boolean equalsPropertyName(String propertyName) {
return name.equals(propertyName);
}
/**
* Returns the name of the property.
*
* @return the name of the property
*/
public String apiProperty() {
return name;
}
/**
* Returns the name of the corresponding System Property.
*
* @return the name of the System Property
*/
String systemProperty() {
return nameSP;
}
/**
* Returns the default value of the property.
* @return the default value of the property
*/
public boolean defaultValue() {
return valueDefault;
}
/**
* Returns the FSP-enforced value.
* @return the FSP-enforced value
*/
public boolean enforcedValue() {
return valueEnforced;
}
/**
* Checks whether System property is supported for the feature.
* @return true it is supported, false otherwise
*/
boolean hasSystemProperty() {
return hasSystem;
}
/**
* Checks whether the property is enforced by FSP
* @return true it is, false otherwise
*/
boolean enforced() {
return enforced;
}
}
/**
* 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("default"), FSP("FEATURE_SECURE_PROCESSING"),
JAXPDOTPROPERTIES("jaxp.properties"), SYSTEMPROPERTY("system property"),
APIPROPERTY("property");
final String literal;
State(String literal) {
this.literal = literal;
}
String literal() {
return literal;
}
}
/**
* Values of the features
*/
private boolean[] featureValues;
/**
* States of the settings for each property
*/
private State[] states;
/**
* Flag indicating if secure processing is set
*/
boolean secureProcessing;
/**
* Instantiate JdkXmlFeatures and initialize the fields
* @param secureProcessing
*/
public JdkXmlFeatures(boolean secureProcessing) {
featureValues = new boolean[XmlFeature.values().length];
states = new State[XmlFeature.values().length];
this.secureProcessing = secureProcessing;
for (XmlFeature f : XmlFeature.values()) {
if (secureProcessing && f.enforced()) {
featureValues[f.ordinal()] = f.enforcedValue();
states[f.ordinal()] = State.FSP;
} else {
featureValues[f.ordinal()] = f.defaultValue();
states[f.ordinal()] = State.DEFAULT;
}
}
//read system properties or jaxp.properties
readSystemProperties();
}
/**
* Updates the JdkXmlFeatures instance by reading the system properties again.
* This will become necessary in case the system properties are set after
* the instance has been created.
*/
public void update() {
readSystemProperties();
}
/**
* Set feature by property name and state
* @param propertyName property name
* @param state the state of the property
* @param value the value of the property
* @return true if the property is managed by the JdkXmlFeatures instance;
* false otherwise.
*/
public boolean setFeature(String propertyName, State state, Object value) {
int index = getIndex(propertyName);
if (index > -1) {
setFeature(index, state, value);
return true;
}
return false;
}
/**
* Set the value for a specific feature.
*
* @param feature the feature
* @param state the state of the property
* @param value the value of the property
*/
public void setFeature(XmlFeature feature, State state, boolean value) {
setFeature(feature.ordinal(), state, value);
}
/**
* Return the value of the specified property
*
* @param feature the property
* @return the value of the property
*/
public boolean getFeature(XmlFeature feature) {
return featureValues[feature.ordinal()];
}
/**
* Return the value of a feature by its index (the Feature's ordinal)
* @param index the index of a feature
* @return value of a feature
*/
public boolean getFeature(int index) {
return featureValues[index];
}
/**
* Set the value of a property by its index
*
* @param index the index of the property
* @param state the state of the property
* @param value the value of the property
*/
public void setFeature(int index, State state, Object value) {
boolean temp;
if (Boolean.class.isAssignableFrom(value.getClass())) {
temp = (Boolean)value;
} else {
temp = Boolean.parseBoolean((String) value);
}
setFeature(index, state, temp);
}
/**
* Set the value of a property by its index
*
* @param index the index of the property
* @param state the state of the property
* @param value the value of the property
*/
public void setFeature(int index, State state, boolean value) {
//only update if it shall override
if (state.compareTo(states[index]) >= 0) {
featureValues[index] = value;
states[index] = state;
}
}
/**
* 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 (XmlFeature feature : XmlFeature.values()) {
if (feature.equalsPropertyName(propertyName)) {
//internally, ordinal is used as index
return feature.ordinal();
}
}
return -1;
}
/**
* Read from system properties, or those in jaxp.properties
*/
private void readSystemProperties() {
for (XmlFeature feature : XmlFeature.values()) {
getSystemProperty(feature, feature.systemProperty());
}
}
/**
* Read from system properties, or those in jaxp.properties
*
* @param property the type of the property
* @param sysPropertyName the name of system property
*/
private boolean getSystemProperty(XmlFeature feature, String sysPropertyName) {
try {
String value = SecuritySupport.getSystemProperty(sysPropertyName);
if (value != null && !value.equals("")) {
setFeature(feature, State.SYSTEMPROPERTY, Boolean.parseBoolean(value));
return true;
}
value = SecuritySupport.readJAXPProperty(sysPropertyName);
if (value != null && !value.equals("")) {
setFeature(feature, State.JAXPDOTPROPERTIES, Boolean.parseBoolean(value));
return true;
}
} catch (NumberFormatException e) {
//invalid setting
throw new NumberFormatException("Invalid setting for system property: " + feature.systemProperty());
}
return false;
}
}

View File

@ -0,0 +1,166 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. 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 jdk.xml.internal;
import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings;
import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager;
import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.catalog.CatalogFeatures.Feature;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.XMLReader;
/**
* Constants for use across JAXP processors.
*/
public class JdkXmlUtils {
/**
* Catalog features
*/
public final static String USE_CATALOG = XMLConstants.USE_CATALOG;
public final static String SP_USE_CATALOG = "javax.xml.useCatalog";
public final static String CATALOG_FILES = CatalogFeatures.Feature.FILES.getPropertyName();
public final static String CATALOG_DEFER = CatalogFeatures.Feature.DEFER.getPropertyName();
public final static String CATALOG_PREFER = CatalogFeatures.Feature.PREFER.getPropertyName();
public final static String CATALOG_RESOLVE = CatalogFeatures.Feature.RESOLVE.getPropertyName();
/**
* Values for a feature
*/
public static final String FEATURE_TRUE = "true";
public static final String FEATURE_FALSE = "false";
/**
* Default value of USE_CATALOG. This will read the System property
*/
public static final boolean USE_CATALOG_DEFAULT =
SecuritySupport.getJAXPSystemProperty(SP_USE_CATALOG, true);
/**
* Returns the value of a Catalog feature by the property name.
* @param features a CatalogFeatures instance
* @param name the name of a Catalog feature
* @return the value of a Catalog feature, null if the name does not match
* any feature supported by the Catalog.
*/
public static String getCatalogFeature(CatalogFeatures features, String name) {
for (Feature feature : Feature.values()) {
if (feature.getPropertyName().equals(name)) {
return features.get(feature);
}
}
return null;
}
/**
* Creates an instance of a CatalogFeatures.
*
* @param defer the defer property defined in CatalogFeatures
* @param file the file path to a catalog
* @param prefer the prefer property defined in CatalogFeatures
* @param resolve the resolve property defined in CatalogFeatures
* @return a {@link javax.xml.transform.Source} object
*/
public static CatalogFeatures getCatalogFeatures(String defer, String file,
String prefer, String resolve) {
CatalogFeatures.Builder builder = CatalogFeatures.builder();
if (file != null) {
builder = builder.with(CatalogFeatures.Feature.FILES, file);
}
if (prefer != null) {
builder = builder.with(CatalogFeatures.Feature.PREFER, prefer);
}
if (defer != null) {
builder = builder.with(CatalogFeatures.Feature.DEFER, defer);
}
if (resolve != null) {
builder = builder.with(CatalogFeatures.Feature.RESOLVE, resolve);
}
return builder.build();
}
/**
* Passing on the CatalogFeatures settings from one Xerces configuration object
* to another.
*
* @param config1 a Xerces configuration object
* @param config2 a Xerces configuration object
*/
public static void catalogFeaturesConfig2Config(XMLComponentManager config1,
ParserConfigurationSettings config2) {
boolean supportCatalog = true;
boolean useCatalog = config1.getFeature(XMLConstants.USE_CATALOG);
try {
config2.setFeature(JdkXmlUtils.USE_CATALOG, useCatalog);
}
catch (XMLConfigurationException e) {
supportCatalog = false;
}
if (supportCatalog && useCatalog) {
try {
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
config2.setProperty(f.getPropertyName(), config1.getProperty(f.getPropertyName()));
}
} catch (XMLConfigurationException e) {
//shall not happen for internal settings
}
}
}
/**
* Passing on the CatalogFeatures settings from a Xerces configuration object
* to an XMLReader.
*
* @param config a Xerces configuration object
* @param reader an XMLReader
*/
public static void catalogFeaturesConfig2Reader(XMLComponentManager config, XMLReader reader) {
boolean supportCatalog = true;
boolean useCatalog = config.getFeature(XMLConstants.USE_CATALOG);
try {
reader.setFeature(JdkXmlUtils.USE_CATALOG, useCatalog);
}
catch (SAXNotRecognizedException | SAXNotSupportedException e) {
supportCatalog = false;
}
if (supportCatalog && useCatalog) {
try {
for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) {
reader.setProperty(f.getPropertyName(), config.getProperty(f.getPropertyName()));
}
} catch (SAXNotRecognizedException | SAXNotSupportedException e) {
//shall not happen for internal settings
}
}
}
}

View File

@ -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.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -82,6 +82,22 @@ public class SecuritySupport {
(PrivilegedAction<String>) () -> (String)System.getProperty(propName));
}
/**
* Reads boolean type system property.
*
* @param propName the name of the property
* @param defValue the default value
* @return the value of the property, or the default value of no system
* property is found
*/
public static boolean getJAXPSystemProperty(String propName, boolean defValue) {
String value = getJAXPSystemProperty(propName);
if (value == null) {
return defValue;
}
return Boolean.parseBoolean(value);
}
/**
* Reads JAXP system property in this order: system property,
* $java.home/conf/jaxp.properties if the system property is not specified

View File

@ -15,7 +15,7 @@ keys=intermittent randomness
othervm.dirs=javax/xml/jaxp
# Group definitions
groups=TEST.groups
groups=TEST.groups
# Minimum jtreg version
requiredVersion=4.2 b02

View File

@ -0,0 +1,321 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.File;
import java.io.StringReader;
import javax.xml.transform.Source;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
/**
* @bug 8158084 8162438 8162442
* @summary verifies the use of Catalog in SAX/DOM/StAX/Validation/Transform.
* The two main scenarios for all processors are:
* A custom resolver is used whether or not there's a Catalog;
* A Catalog is used when there's no custom resolver, and the USE_CATALOG
* is true (which is the case by default).
*/
/**
* Support Catalog:
* With this patch, the Catalog features are supported by all of the JAXP processors.
* The support is enabled by default. Using Catalog is as simple as setting a
* path to a catalog, through the API, or System property, or jaxp.properties.
*
* Test notes:
* For all DataProviders, the 1st and 2nd columns determine whether to set USE_CATALOG
* through the API and to use Catalog. When a custom resolver is specified, these
* settings should not affect the operation, thus the tests are repeated for both
* false and true.
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupport extends CatalogSupportBase {
/*
* Initializing fields
*/
@BeforeClass
public void setUpClass() throws Exception {
setUp();
}
/*
Verifies the Catalog support on SAXParser.
*/
@Test(dataProvider = "data_SAXA")
public void testSAXA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XMLReader.
*/
@Test(dataProvider = "data_SAXA")
public void testXMLReaderA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XInclude.
*/
@Test(dataProvider = "data_XIA")
public void testXIncludeA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXInclude(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on DOM parser.
*/
@Test(dataProvider = "data_DOMA")
public void testDOMA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
@Test(dataProvider = "data_SchemaA")
public void testValidationA(boolean setUseCatalog, boolean useCatalog,
String catalog, String xsd, LSResourceResolver resolver)
throws Exception {
testValidation(setUseCatalog, useCatalog, catalog, xsd, resolver) ;
}
/*
@bug 8158084 8162438 these tests also verifies the fix for 8162438
Verifies the Catalog support on the Schema Validator.
*/
@Test(dataProvider = "data_ValidatorA")
public void testValidatorA(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
testValidator(setUseCatalog1, setUseCatalog2, useCatalog, source,
resolver1, resolver2, catalog1, catalog2);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLA")
public void testXSLImportA(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml, URIResolver resolver, String expected)
throws Exception {
testXSLImport(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
@bug 8158084 8162442
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLA")
public void testXSLImportWTemplatesA(boolean setUseCatalog, boolean useCatalog,
String catalog, SAXSource xsl, StreamSource xml, URIResolver resolver, String expected)
throws Exception {
testXSLImportWTemplates(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
DataProvider: for testing the SAX parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_SAXA")
Object[][] getDataSAX() {
String[] systemIds = {"system.xsd"};
InputSource[] returnValues = {new InputSource(new StringReader(dtd_systemResolved))};
MyEntityHandler entityHandler = new MyEntityHandler(systemIds, returnValues, elementInSystem);
return new Object[][]{
{false, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog},
{false, true, xml_catalog, xml_system, entityHandler, expectedWResolver},
{true, true, xml_catalog, xml_system, entityHandler, expectedWResolver}
};
}
/*
DataProvider: for testing XInclude
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_XIA")
Object[][] getDataXI() {
String[] systemIds = {"XI_simple.xml"};
InputSource[] returnValues = {new InputSource(xml_xIncludeSimple)};
MyEntityHandler entityHandler = new MyEntityHandler(systemIds, returnValues, elementInXISimple);
return new Object[][]{
{false, true, xml_catalog, xml_xInclude, new MyHandler(elementInXISimple), contentInUIutf8Catalog},
{false, true, xml_catalog, xml_xInclude, entityHandler, contentInXIutf8},
{true, true, xml_catalog, xml_xInclude, entityHandler, contentInXIutf8}
};
}
/*
DataProvider: for testing DOM parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_DOMA")
Object[][] getDataDOM() {
String[] systemIds = {"system.xsd"};
InputSource[] returnValues = {new InputSource(new StringReader(dtd_systemResolved))};
MyEntityHandler entityHandler = new MyEntityHandler(systemIds, returnValues, elementInSystem);
return new Object[][]{
{false, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog},
{false, true, xml_catalog, xml_system, getMyEntityHandler(elementInSystem, systemIds,
new InputSource(new StringReader(dtd_systemResolved))), expectedWResolver},
{true, true, xml_catalog, xml_system, getMyEntityHandler(elementInSystem, systemIds,
new InputSource(new StringReader(dtd_systemResolved))), expectedWResolver}
};
}
MyEntityHandler getMyEntityHandler(String elementName, String[] systemIds, InputSource... returnValues) {
return new MyEntityHandler(systemIds, returnValues, elementName);
}
/*
DataProvider: for testing Schema validation
Data: set use_catalog, use_catalog, catalog file, xsd file, a LSResourceResolver
*/
@DataProvider(name = "data_SchemaA")
Object[][] getDataSchema() {
String[] systemIds = {"pathto/XMLSchema.dtd", "datatypes.dtd"};
XmlInput[] returnValues = {new XmlInput(null, dtd_xmlSchema, null), new XmlInput(null, dtd_datatypes, null)};
LSResourceResolver resolver = new SourceResolver(null, systemIds, returnValues);
String[] systemIds1 = {"xml.xsd"};
XmlInput[] returnValues1 = {new XmlInput(null, xsd_xml, null)};
LSResourceResolver resolverImport = new SourceResolver(null, systemIds1, returnValues1);
String[] systemIds2 = {"XSDInclude_person.xsd", "XSDInclude_product.xsd"};
XmlInput[] returnValues2 = {new XmlInput(null, xsd_include_person, null),
new XmlInput(null, xsd_include_product, null)};
LSResourceResolver resolverInclude = new SourceResolver(null, systemIds2, returnValues2);
return new Object[][]{
// for resolving DTD in xsd
{false, true, xml_catalog, xsd_xmlSchema, null},
{false, true, xml_bogus_catalog, xsd_xmlSchema, resolver},
{true, true, xml_bogus_catalog, xsd_xmlSchema, resolver},
// for resolving xsd import
{false, true, xml_catalog, xsd_xmlSchema_import, null},
{false, true, xml_bogus_catalog, xsd_xmlSchema_import, resolverImport},
{true, true, xml_bogus_catalog, xsd_xmlSchema_import, resolverImport},
// for resolving xsd include
{false, true, xml_catalog, xsd_include_company, null},
{false, true, xml_bogus_catalog, xsd_include_company, resolverInclude},
{true, true, xml_bogus_catalog, xsd_include_company, resolverInclude}
};
}
/*
DataProvider: for testing Schema Validator
Data: source, resolver1, resolver2, catalog1, a catalog2
*/
@DataProvider(name = "data_ValidatorA")
Object[][] getDataValidator() {
DOMSource ds = getDOMSource(xml_val_test, xml_val_test_id, false, true, xml_catalog);
SAXSource ss = new SAXSource(new InputSource(xml_val_test));
ss.setSystemId(xml_val_test_id);
StAXSource stax = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax1 = getStaxSource(xml_val_test, xml_val_test_id);
StreamSource source = new StreamSource(new File(xml_val_test));
String[] systemIds = {"system.dtd", "val_test.xsd"};
XmlInput[] returnValues = {new XmlInput(null, dtd_system, null), new XmlInput(null, xsd_val_test, null)};
LSResourceResolver resolver = new SourceResolver(null, systemIds, returnValues);
StAXSource stax2 = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax3 = getStaxSource(xml_val_test, xml_val_test_id);
return new Object[][]{
// use catalog
{false, false, true, ds, null, null, xml_catalog, null},
{false, false, true, ds, null, null, null, xml_catalog},
{false, false, true, ss, null, null, xml_catalog, null},
{false, false, true, ss, null, null, null, xml_catalog},
{false, false, true, stax, null, null, xml_catalog, null},
{false, false, true, stax1, null, null, null, xml_catalog},
{false, false, true, source, null, null, xml_catalog, null},
{false, false, true, source, null, null, null, xml_catalog},
// use resolver
{false, false, true, ds, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, ss, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, stax2, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, source, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog}
};
}
/*
DataProvider: for testing XSL import and include
Data: set use_catalog, use_catalog, catalog file, xsl file, xml file, a URIResolver, expected result
*/
@DataProvider(name = "data_XSLA")
Object[][] getDataXSL() {
// XSLInclude.xsl has one import XSLImport_html.xsl and two includes,
// XSLInclude_header.xsl and XSLInclude_footer.xsl;
String[] hrefs = {"XSLImport_html.xsl", "XSLInclude_header.xsl", "XSLInclude_footer.xsl"};
Source[] returnValues = {new StreamSource(xsl_import_html),
new StreamSource(xsl_include_header),
new StreamSource(xsl_include_footer)};
URIResolver resolver = new XslResolver(hrefs, returnValues);
SAXSource xslSourceDTD = new SAXSource(new InputSource(new StringReader(xsl_includeDTD)));
StreamSource xmlSourceDTD = new StreamSource(new StringReader(xml_xslDTD));
String[] hrefs1 = {"pathto/DocFunc2.xml"};
Source[] returnValues1 = {new StreamSource(xml_doc2)};
URIResolver docResolver = new XslResolver(hrefs1, returnValues1);
SAXSource xslDocSource = new SAXSource(new InputSource(new File(xsl_doc).toURI().toASCIIString()));
StreamSource xmlDocSource = new StreamSource(new File(xml_doc));
return new Object[][]{
// for resolving DTD, import and include in xsl
{false, true, xml_catalog, xslSourceDTD, xmlSourceDTD, null, ""},
{false, true, xml_bogus_catalog, new SAXSource(new InputSource(new StringReader(xsl_include))),
new StreamSource(new StringReader(xml_xsl)), resolver, ""},
{true, true, xml_bogus_catalog, new SAXSource(new InputSource(new StringReader(xsl_include))),
new StreamSource(new StringReader(xml_xsl)), resolver, ""},
// for resolving reference by the document function
{false, true, xml_catalog, xslDocSource, xmlDocSource, null, "Resolved by a catalog"},
{false, true, xml_bogus_catalog, xslDocSource, xmlDocSource, docResolver, "Resolved by a resolver"},
{true, true, xml_bogus_catalog, xslDocSource, xmlDocSource, docResolver, "Resolved by a resolver"}
};
}
}

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<!-- DTDs and external entities -->
<system systemId="http://openjdk.java.net/xml/catalog/dtd/system.dtd" uri="system.dtd"/>
<!-- XMLSchema refers to XMLSchema.dtd -->
<public publicId="-//W3C//DTD XMLSCHEMA 200102//EN" uri="XMLSchema.dtd"/>
<!-- XMLSchema.dtd refers to datatypes.dtd -->
<systemSuffix systemIdSuffix="datatypes.dtd" uri="datatypes.dtd"/>
<!-- XMLSchema.dtd refers to datatypes.dtd, can use public entry as well -->
<!-- public publicId="datatypes" uri="datatypes.dtd"/-->
<!-- XInclude -->
<uri name="XI_simple.xml" uri="XI_simple4Catalog.xml"/>
<uri name="XI_utf8.xml" uri="XI_utf8.xml"/>
<uri name="XI_utf8Catalog.xml" uri="XI_utf8Catalog.xml"/>
<uri name="XI_test2.xml" uri="XI_test2.xml"/>
<system systemId="XI_red.dtd" uri="XI_red.dtd"/>
<!-- xsd import can be mapped using the namespace or systemId -->
<!--public publicId="http://www.w3.org/XML/1998/namespace" uri="xml.xsd"/-->
<!--uri name="http://www.w3.org/XML/1998/namespace" uri="xml.xsd"/-->
<uri name="http://www.w3.org/2001/pathto/xml.xsd" uri="xml.xsd"/>
<!-- schema include -->
<uri name="pathto/XSDInclude_person.xsd" uri="XSDInclude_person.xsd"/>
<uri name="pathto/XSDInclude_product.xsd" uri="XSDInclude_product.xsd"/>
<!-- for relative path, use Suffix -->
<systemSuffix systemIdSuffix="pathto/val_test.xsd" uri="val_test.xsd"/>
<!-- XSL import and include -->
<uri name="pathto/XSLImport_html.xsl" uri="XSLImport_html.xsl"/>
<uri name="pathto/XSLInclude_header.xsl" uri="XSLInclude_header.xsl"/>
<uri name="pathto/XSLInclude_footer.xsl" uri="XSLInclude_footer.xsl"/>
<!-- and DTDs -->
<system systemId="http://openjdk.java.net/xml/catalog/dtd/XSLDTD.dtd" uri="XSLDTD.dtd"/>
<system systemId="http://openjdk.java.net/xml/catalog/dtd/include.dtd" uri="include.dtd"/>
<!-- XSLT document function -->
<uri name="pathto/DocFunc2.xml" uri="DocFuncCatalog.xml"/>
</catalog>

View File

@ -0,0 +1,259 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.File;
import java.io.StringReader;
import javax.xml.catalog.CatalogFeatures.Feature;
import javax.xml.transform.Source;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
/*
* @bug 8158084 8162438 8162442
* @summary extends CatalogSupport, verifies that the catalog file can be set
* using the System property.
*/
/**
* The name of a System property in javax.xml.catalog is the same as that of the
* property, and can be read through CatalogFeatures.Feature.
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupport1 extends CatalogSupportBase {
/*
* Initializing fields
*/
@BeforeClass
public void setUpClass() throws Exception {
setUp();
System.setProperty(Feature.FILES.getPropertyName(), xml_catalog);
}
@AfterClass
public void tearDownClass() throws Exception {
System.clearProperty(Feature.FILES.getPropertyName());
}
/*
Verifies the Catalog support on SAXParser.
*/
@Test(dataProvider = "data_SAXC")
public void testSAXC(boolean setUseCatalog, boolean useCatalog, String catalog, String xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XMLReader.
*/
@Test(dataProvider = "data_SAXC")
public void testXMLReaderC(boolean setUseCatalog, boolean useCatalog, String catalog, String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XInclude.
*/
@Test(dataProvider = "data_XIC")
public void testXIncludeC(boolean setUseCatalog, boolean useCatalog, String catalog, String xml, MyHandler handler, String expected) throws Exception {
testXInclude(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on DOM parser.
*/
@Test(dataProvider = "data_DOMC")
public void testDOMC(boolean setUseCatalog, boolean useCatalog, String catalog, String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
@Test(dataProvider = "data_SchemaC")
public void testValidationC(boolean setUseCatalog, boolean useCatalog, String catalog, String xsd, LSResourceResolver resolver)
throws Exception {
testValidation(setUseCatalog, useCatalog, catalog, xsd, resolver) ;
}
/*
@bug 8158084 8162438 these tests also verifies the fix for 8162438
Verifies the Catalog support on the Schema Validator.
*/
@Test(dataProvider = "data_ValidatorC")
public void testValidatorA(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
testValidator(setUseCatalog1, setUseCatalog2, useCatalog, source,
resolver1, resolver2, catalog1, catalog2);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC")
public void testXSLImportC(boolean setUseCatalog, boolean useCatalog, String catalog, SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
testXSLImport(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
@bug 8158084 8162442
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC")
public void testXSLImportWTemplatesC(boolean setUseCatalog, boolean useCatalog, String catalog, SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
testXSLImportWTemplates(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
DataProvider: for testing the SAX parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_SAXC")
Object[][] getDataSAXC() {
return new Object[][]{
{false, true, null, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing XInclude
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_XIC")
Object[][] getDataXIC() {
return new Object[][]{
{false, true, null, xml_xInclude, new MyHandler(elementInXISimple), contentInUIutf8Catalog},
};
}
/*
DataProvider: for testing DOM parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_DOMC")
Object[][] getDataDOMC() {
return new Object[][]{
{false, true, null, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing Schema validation
Data: set use_catalog, use_catalog, catalog file, xsd file, a LSResourceResolver
*/
@DataProvider(name = "data_SchemaC")
Object[][] getDataSchemaC() {
return new Object[][]{
// for resolving DTD in xsd
{false, true, null, xsd_xmlSchema, null},
// for resolving xsd import
{false, true, null, xsd_xmlSchema_import, null},
// for resolving xsd include
{false, true, null, xsd_include_company, null}
};
}
/*
DataProvider: for testing Schema Validator
Data: source, resolver1, resolver2, catalog1, a catalog2
*/
@DataProvider(name = "data_ValidatorC")
Object[][] getDataValidator() {
DOMSource ds = getDOMSource(xml_val_test, xml_val_test_id, false, true, null);
SAXSource ss = new SAXSource(new InputSource(xml_val_test));
ss.setSystemId(xml_val_test_id);
StAXSource stax = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax1 = getStaxSource(xml_val_test, xml_val_test_id);
StreamSource source = new StreamSource(new File(xml_val_test));
String[] systemIds = {"system.dtd", "val_test.xsd"};
XmlInput[] returnValues = {new XmlInput(null, dtd_system, null), new XmlInput(null, xsd_val_test, null)};
LSResourceResolver resolver = new SourceResolver(null, systemIds, returnValues);
StAXSource stax2 = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax3 = getStaxSource(xml_val_test, xml_val_test_id);
return new Object[][]{
// use catalog
{false, false, true, ds, null, null, null, null},
{false, false, true, ds, null, null, null, null},
{false, false, true, ss, null, null, null, null},
{false, false, true, ss, null, null, null, null},
{false, false, true, stax, null, null, null, null},
{false, false, true, stax1, null, null, null, null},
{false, false, true, source, null, null, null, null},
{false, false, true, source, null, null, null, null},
// use resolver
{false, false, true, ds, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, ss, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, stax2, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog},
{false, false, true, source, resolver, resolver, xml_bogus_catalog, xml_bogus_catalog}
};
}
/*
DataProvider: for testing XSL import and include
Data: set use_catalog, use_catalog, catalog file, xsl file, xml file, a URIResolver, expected
*/
@DataProvider(name = "data_XSLC")
Object[][] getDataXSLC() {
SAXSource xslSourceDTD = new SAXSource(new InputSource(new StringReader(xsl_includeDTD)));
StreamSource xmlSourceDTD = new StreamSource(new StringReader(xml_xslDTD));
SAXSource xslDocSource = new SAXSource(new InputSource(new File(xsl_doc).toURI().toASCIIString()));
StreamSource xmlDocSource = new StreamSource(new File(xml_doc));
return new Object[][]{
// for resolving DTD, import and include in xsl
{false, true, null, xslSourceDTD, xmlSourceDTD, null, ""},
// for resolving reference by the document function
{false, true, null, xslDocSource, xmlDocSource, null, "Resolved by a catalog"},
};
}
}

View File

@ -0,0 +1,262 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.StringReader;
import java.net.SocketTimeoutException;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/*
* @bug 8158084 8162438 8162442
* @summary extends CatalogSupport tests, verifies that the use of the Catalog may
* be disabled through the System property.
*/
/**
* For all of the JAXP processors that support the Catalog, the use of the Catalog
* is turned on by default. It can then be turned off through the API and the
* System property.
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupport2 extends CatalogSupportBase {
static final String TTIMEOUTREAD = "sun.net.client.defaultReadTimeout";
static final String TIMEOUTCONNECT = "sun.net.client.defaultConnectTimeout";
static String timeoutRead = System.getProperty(TTIMEOUTREAD);
static String timeoutConnect = System.getProperty(TIMEOUTCONNECT);
/*
* Initializing fields
*/
@BeforeClass
public void setUpClass() throws Exception {
setUp();
System.setProperty(SP_USE_CATALOG, "false");
timeoutRead = System.getProperty(TTIMEOUTREAD);
timeoutConnect = System.getProperty(TIMEOUTCONNECT);
System.setProperty(TTIMEOUTREAD, "1000");
System.setProperty(TIMEOUTCONNECT, "1000");
}
@AfterClass
public void tearDownClass() throws Exception {
System.clearProperty(SP_USE_CATALOG);
System.setProperty(TIMEOUTCONNECT, "-1");
System.setProperty(TTIMEOUTREAD, "-1");
}
/*
Verifies the Catalog support on SAXParser.
*/
@Test(dataProvider = "data_SAXC", expectedExceptions = FileNotFoundException.class)
public void testSAXC(boolean setUseCatalog, boolean useCatalog, String catalog, String
xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XMLReader.
*/
@Test(dataProvider = "data_SAXC", expectedExceptions = FileNotFoundException.class)
public void testXMLReaderC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XInclude.
*/
@Test(dataProvider = "data_XIC", expectedExceptions = SAXParseException.class)
public void testXIncludeC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXInclude(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on DOM parser.
*/
@Test(dataProvider = "data_DOMC", expectedExceptions = {FileNotFoundException.class, SocketTimeoutException.class})
public void testDOMC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
@Test(dataProvider = "data_SchemaC", expectedExceptions = SAXParseException.class)
public void testValidationC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xsd, LSResourceResolver resolver)
throws Exception {
testValidation(setUseCatalog, useCatalog, catalog, xsd, resolver) ;
}
@Test(dataProvider = "data_ValidatorC", expectedExceptions = {SAXException.class, FileNotFoundException.class})
public void testValidatorC(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
testValidator(setUseCatalog1, setUseCatalog2, useCatalog, source,
resolver1, resolver2, catalog1, catalog2);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC", expectedExceptions = TransformerException.class)
public void testXSLImportC(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml, URIResolver resolver, String expected) throws Exception {
testXSLImport(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
@bug 8158084 8162442
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC", expectedExceptions = TransformerException.class)
public void testXSLImportWTemplatesC(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml, URIResolver resolver, String expected) throws Exception {
testXSLImportWTemplates(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
DataProvider: for testing the SAX parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_SAXC")
Object[][] getDataSAXC() {
return new Object[][]{
{false, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing XInclude
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_XIC")
Object[][] getDataXIC() {
return new Object[][]{
{false, true, xml_catalog, xml_xInclude, new MyHandler(elementInXISimple), contentInUIutf8Catalog},
};
}
/*
DataProvider: for testing DOM parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_DOMC")
Object[][] getDataDOMC() {
return new Object[][]{
{false, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing Schema validation
Data: set use_catalog, use_catalog, catalog file, xsd file, a LSResourceResolver
*/
@DataProvider(name = "data_SchemaC")
Object[][] getDataSchemaC() {
return new Object[][]{
// for resolving DTD in xsd
{false, true, xml_catalog, xsd_xmlSchema, null},
// for resolving xsd import
{false, true, xml_catalog, xsd_xmlSchema_import, null},
// for resolving xsd include
{false, true, xml_catalog, xsd_include_company, null}
};
}
/*
DataProvider: for testing Schema Validator
Data: source, resolver1, resolver2, catalog1, a catalog2
*/
@DataProvider(name = "data_ValidatorC")
Object[][] getDataValidator() {
DOMSource ds = getDOMSource(xml_val_test, xml_val_test_id, true, true, xml_catalog);
SAXSource ss = new SAXSource(new InputSource(xml_val_test));
ss.setSystemId(xml_val_test_id);
StAXSource stax = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax1 = getStaxSource(xml_val_test, xml_val_test_id);
StreamSource source = new StreamSource(new File(xml_val_test));
return new Object[][]{
// use catalog
{false, false, true, ds, null, null, xml_catalog, null},
{false, false, true, ds, null, null, null, xml_catalog},
{false, false, true, ss, null, null, xml_catalog, null},
{false, false, true, ss, null, null, null, xml_catalog},
{false, false, true, stax, null, null, xml_catalog, null},
{false, false, true, stax1, null, null, null, xml_catalog},
{false, false, true, source, null, null, xml_catalog, null},
{false, false, true, source, null, null, null, xml_catalog},
};
}
/*
DataProvider: for testing XSL import and include
Data: set use_catalog, use_catalog, catalog file, xsl file, xml file, a URIResolver, expected
*/
@DataProvider(name = "data_XSLC")
Object[][] getDataXSLC() {
SAXSource xslSourceDTD = new SAXSource(new InputSource(new StringReader(xsl_includeDTD)));
StreamSource xmlSourceDTD = new StreamSource(new StringReader(xml_xslDTD));
SAXSource xslDocSource = new SAXSource(new InputSource(new File(xsl_doc).toURI().toASCIIString()));
StreamSource xmlDocSource = new StreamSource(new File(xml_doc));
return new Object[][]{
// for resolving DTD, import and include in xsl
{false, true, xml_catalog, xslSourceDTD, xmlSourceDTD, null, ""},
// for resolving reference by the document function
{false, true, xml_catalog, xslDocSource, xmlDocSource, null, "Resolved by a catalog"},
};
}
}

View File

@ -0,0 +1,273 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.StringReader;
import java.net.SocketTimeoutException;
import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/*
* @bug 8158084 8162438 8162442
* @summary extends CatalogSupport tests, verifies that the use of the Catalog may
* be disabled through the API property.
*/
/**
* For all of the JAXP processors that support the Catalog, the use of the Catalog
* is turned on by default. It can then be turned off through the API and the
* System property.
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupport3 extends CatalogSupportBase {
static final String TTIMEOUTREAD = "sun.net.client.defaultReadTimeout";
static final String TIMEOUTCONNECT = "sun.net.client.defaultConnectTimeout";
static String timeoutRead = System.getProperty(TTIMEOUTREAD);
static String timeoutConnect = System.getProperty(TIMEOUTCONNECT);
/*
* Initializing fields
*/
@BeforeClass
public void setUpClass() throws Exception {
setUp();
timeoutRead = System.getProperty(TTIMEOUTREAD);
timeoutConnect = System.getProperty(TIMEOUTCONNECT);
System.setProperty(TTIMEOUTREAD, "1000");
System.setProperty(TIMEOUTCONNECT, "1000");
}
@AfterClass
public void tearDownClass() throws Exception {
System.setProperty(TIMEOUTCONNECT, "-1");
System.setProperty(TTIMEOUTREAD, "-1");
}
/*
Verifies the Catalog support on SAXParser.
*/
@Test(dataProvider = "data_SAXC", expectedExceptions = FileNotFoundException.class)
public void testSAXC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XMLReader.
*/
@Test(dataProvider = "data_SAXC", expectedExceptions = FileNotFoundException.class)
public void testXMLReaderC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XInclude.
*/
@Test(dataProvider = "data_XIC", expectedExceptions = SAXParseException.class)
public void testXIncludeC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXInclude(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on DOM parser.
*/
@Test(dataProvider = "data_DOMC", expectedExceptions = {FileNotFoundException.class, SocketTimeoutException.class})
public void testDOMC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
@Test(dataProvider = "data_SchemaC", expectedExceptions = SAXParseException.class)
public void testValidationC(boolean setUseCatalog, boolean useCatalog, String catalog,
String xsd, LSResourceResolver resolver)
throws Exception {
testValidation(setUseCatalog, useCatalog, catalog, xsd, resolver) ;
}
/*
@bug 8158084 8162438 these tests also verifies the fix for 8162438
Verifies the Catalog support on the Schema Validator.
*/
@Test(dataProvider = "data_ValidatorC", expectedExceptions = {SAXException.class, FileNotFoundException.class})
public void testValidatorC(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
testValidator(setUseCatalog1, setUseCatalog2, useCatalog, source,
resolver1, resolver2, catalog1, catalog2);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC", expectedExceptions = TransformerException.class)
public void testXSLImportC(boolean setUseCatalog, boolean useCatalog, String catalog, SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
testXSLImport(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
@bug 8158084 8162442
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLC", expectedExceptions = TransformerException.class)
public void testXSLImportWTemplatesC(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
testXSLImportWTemplates(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
DataProvider: for testing the SAX parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_SAXC")
Object[][] getDataSAXC() {
return new Object[][]{
{true, false, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing XInclude
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_XIC")
Object[][] getDataXIC() {
return new Object[][]{
{true, false, xml_catalog, xml_xInclude, new MyHandler(elementInXISimple), contentInUIutf8Catalog},
};
}
/*
DataProvider: for testing DOM parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_DOMC")
Object[][] getDataDOMC() {
return new Object[][]{
{true, false, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog}
};
}
/*
DataProvider: for testing Schema validation
Data: set use_catalog, use_catalog, catalog file, xsd file, a LSResourceResolver
*/
@DataProvider(name = "data_SchemaC")
Object[][] getDataSchemaC() {
return new Object[][]{
// for resolving DTD in xsd
{true, false, xml_catalog, xsd_xmlSchema, null},
// for resolving xsd import
{true, false, xml_catalog, xsd_xmlSchema_import, null},
// for resolving xsd include
{true, false, xml_catalog, xsd_include_company, null}
};
}
/*
DataProvider: for testing Schema Validator
Data: source, resolver1, resolver2, catalog1, a catalog2
*/
@DataProvider(name = "data_ValidatorC")
Object[][] getDataValidator() {
DOMSource ds = getDOMSource(xml_val_test, xml_val_test_id, false, true, xml_catalog);
SAXSource ss = new SAXSource(new InputSource(xml_val_test));
ss.setSystemId(xml_val_test_id);
StAXSource stax = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax1 = getStaxSource(xml_val_test, xml_val_test_id);
StreamSource source = new StreamSource(new File(xml_val_test));
return new Object[][]{
// use catalog disabled through factory
{true, false, false, ds, null, null, xml_catalog, null},
{true, false, false, ds, null, null, null, xml_catalog},
{true, false, false, ss, null, null, xml_catalog, null},
{true, false, false, ss, null, null, null, xml_catalog},
{true, false, false, stax, null, null, xml_catalog, null},
{true, false, false, stax1, null, null, null, xml_catalog},
{true, false, false, source, null, null, xml_catalog, null},
{true, false, false, source, null, null, null, xml_catalog},
// use catalog disabled through validatory
{false, true, false, ds, null, null, xml_catalog, null},
{false, true, false, ds, null, null, null, xml_catalog},
{false, true, false, ss, null, null, xml_catalog, null},
{false, true, false, ss, null, null, null, xml_catalog},
{false, true, false, stax, null, null, xml_catalog, null},
{false, true, false, stax1, null, null, null, xml_catalog},
{false, true, false, source, null, null, xml_catalog, null},
{false, true, false, source, null, null, null, xml_catalog},
};
}
/*
DataProvider: for testing XSL import and include
Data: set use_catalog, use_catalog, catalog file, xsl file, xml file, a URIResolver, expected
*/
@DataProvider(name = "data_XSLC")
Object[][] getDataXSLC() {
SAXSource xslSourceDTD = new SAXSource(new InputSource(new StringReader(xsl_includeDTD)));
StreamSource xmlSourceDTD = new StreamSource(new StringReader(xml_xslDTD));
SAXSource xslDocSource = new SAXSource(new InputSource(new File(xsl_doc).toURI().toASCIIString()));
StreamSource xmlDocSource = new StreamSource(new File(xml_doc));
return new Object[][]{
// for resolving DTD, import and include in xsl
{true, false, xml_catalog, xslSourceDTD, xmlSourceDTD, null, ""},
// for resolving reference by the document function
{true, false, xml_catalog, xslDocSource, xmlDocSource, null, "Resolved by a catalog"},
};
}
}

View File

@ -0,0 +1,260 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.File;
import java.io.StringReader;
import javax.xml.transform.Source;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamSource;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.InputSource;
/**
* @bug 8158084 8162438 8162442
* @summary verifies the overriding over of the USE_CATALOG feature. Extending
* CatalogSupport tests, the USE_CATALOG is turned off system-wide, however,
* a JAXP processor may decide to use Catalog by enabling it through the factory
* or a processor created by the factory.
*/
/**
*
* Test notes:
* Same set of data as in CatalogSupport without the ones with resolvers.
* The set-use-catalog is set to true.
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupport4 extends CatalogSupportBase {
/*
* Initializing fields
*/
@BeforeClass
public void setUpClass() throws Exception {
setUp();
//turn off USE_CATALOG system-wide
System.setProperty(SP_USE_CATALOG, "false");
}
@AfterClass
public void tearDownClass() throws Exception {
System.clearProperty(SP_USE_CATALOG);
}
/*
Verifies the Catalog support on SAXParser.
*/
@Test(dataProvider = "data_SAXA")
public void testSAXA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testSAX(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XMLReader.
*/
@Test(dataProvider = "data_SAXA")
public void testXMLReaderA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXMLReader(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on XInclude.
*/
@Test(dataProvider = "data_XIA")
public void testXIncludeA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testXInclude(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on DOM parser.
*/
@Test(dataProvider = "data_DOMA")
public void testDOMA(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
testDOM(setUseCatalog, useCatalog, catalog, xml, handler, expected);
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
@Test(dataProvider = "data_SchemaA")
public void testValidationA(boolean setUseCatalog, boolean useCatalog,
String catalog, String xsd, LSResourceResolver resolver)
throws Exception {
testValidation(setUseCatalog, useCatalog, catalog, xsd, resolver) ;
}
/*
@bug 8158084 8162438 these tests also verifies the fix for 8162438
Verifies the Catalog support on the Schema Validator.
*/
@Test(dataProvider = "data_ValidatorA")
public void testValidatorA(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
testValidator(setUseCatalog1, setUseCatalog2, useCatalog, source,
resolver1, resolver2, catalog1, catalog2);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLA")
public void testXSLImportA(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml, URIResolver resolver, String expected)
throws Exception {
testXSLImport(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
@bug 8158084 8162442
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
@Test(dataProvider = "data_XSLA")
public void testXSLImportWTemplatesA(boolean setUseCatalog, boolean useCatalog,
String catalog, SAXSource xsl, StreamSource xml, URIResolver resolver, String expected)
throws Exception {
testXSLImportWTemplates(setUseCatalog, useCatalog, catalog, xsl, xml, resolver, expected);
}
/*
DataProvider: for testing the SAX parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_SAXA")
Object[][] getDataSAX() {
return new Object[][]{
{true, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog},
};
}
/*
DataProvider: for testing XInclude
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_XIA")
Object[][] getDataXI() {
return new Object[][]{
{true, true, xml_catalog, xml_xInclude, new MyHandler(elementInXISimple), contentInUIutf8Catalog},
};
}
/*
DataProvider: for testing DOM parser
Data: set use_catalog, use_catalog, catalog file, xml file, handler, expected result string
*/
@DataProvider(name = "data_DOMA")
Object[][] getDataDOM() {
return new Object[][]{
{true, true, xml_catalog, xml_system, new MyHandler(elementInSystem), expectedWCatalog},
};
}
MyEntityHandler getMyEntityHandler(String elementName, String[] systemIds, InputSource... returnValues) {
return new MyEntityHandler(systemIds, returnValues, elementName);
}
/*
DataProvider: for testing Schema validation
Data: set use_catalog, use_catalog, catalog file, xsd file, a LSResourceResolver
*/
@DataProvider(name = "data_SchemaA")
Object[][] getDataSchema() {
return new Object[][]{
// for resolving DTD in xsd
{true, true, xml_catalog, xsd_xmlSchema, null},
// for resolving xsd import
{true, true, xml_catalog, xsd_xmlSchema_import, null},
// for resolving xsd include
{true, true, xml_catalog, xsd_include_company, null},
};
}
/*
DataProvider: for testing Schema Validator
Data: source, resolver1, resolver2, catalog1, a catalog2
*/
@DataProvider(name = "data_ValidatorA")
Object[][] getDataValidator() {
DOMSource ds = getDOMSource(xml_val_test, xml_val_test_id, true, true, xml_catalog);
SAXSource ss = new SAXSource(new InputSource(xml_val_test));
ss.setSystemId(xml_val_test_id);
StAXSource stax = getStaxSource(xml_val_test, xml_val_test_id);
StAXSource stax1 = getStaxSource(xml_val_test, xml_val_test_id);
StreamSource source = new StreamSource(new File(xml_val_test));
return new Object[][]{
// use catalog
{true, false, true, ds, null, null, xml_catalog, null},
{false, true, true, ds, null, null, null, xml_catalog},
{true, false, true, ss, null, null, xml_catalog, null},
{false, true, true, ss, null, null, null, xml_catalog},
{true, false, true, stax, null, null, xml_catalog, null},
{false, true, true, stax1, null, null, null, xml_catalog},
{true, false, true, source, null, null, xml_catalog, null},
{false, true, true, source, null, null, null, xml_catalog},
};
}
/*
DataProvider: for testing XSL import and include
Data: set use_catalog, use_catalog, catalog file, xsl file, xml file, a URIResolver, expected result
*/
@DataProvider(name = "data_XSLA")
Object[][] getDataXSL() {
// XSLInclude.xsl has one import XSLImport_html.xsl and two includes,
// XSLInclude_header.xsl and XSLInclude_footer.xsl;
SAXSource xslSourceDTD = new SAXSource(new InputSource(new StringReader(xsl_includeDTD)));
StreamSource xmlSourceDTD = new StreamSource(new StringReader(xml_xslDTD));
SAXSource xslDocSource = new SAXSource(new InputSource(new File(xsl_doc).toURI().toASCIIString()));
StreamSource xmlDocSource = new StreamSource(new File(xml_doc));
return new Object[][]{
// for resolving DTD, import and include in xsl
{true, true, xml_catalog, xslSourceDTD, xmlSourceDTD, null, ""},
// for resolving reference by the document function
{true, true, xml_catalog, xslDocSource, xmlDocSource, null, "Resolved by a catalog"},
};
}
}

View File

@ -0,0 +1,934 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package catalog;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import javax.xml.XMLConstants;
import javax.xml.catalog.CatalogFeatures;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLResolver;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.URIResolver;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stax.StAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.ls.LSInput;
import org.w3c.dom.ls.LSResourceResolver;
import org.xml.sax.Attributes;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.ext.DefaultHandler2;
/**
* Base class:
* Initialized xml/xsd/xsl used for the test;
* Handler classes
*
* @author huizhe.wang@oracle.com
*/
public class CatalogSupportBase {
// the System Property for the USE_CATALOG feature
final static String SP_USE_CATALOG = "javax.xml.useCatalog";
boolean debug = false;
String filepath;
String slash = "";
protected void setUp() {
String file1 = getClass().getResource("CatalogSupport.xml").getFile();
if (System.getProperty("os.name").contains("Windows")) {
filepath = file1.substring(1, file1.lastIndexOf("/") + 1);
slash = "/";
} else {
filepath = file1.substring(0, file1.lastIndexOf("/") + 1);
}
initFiles();
}
String xml_catalog, xml_bogus_catalog;
// For tests using system.xml
String xml_system, dtd_system, dtd_systemResolved;
final String elementInSystem = "catalogtest";
final String expectedWCatalog = "Test system entry";
final String expectedWResolver = "Test resolved by an EntityHandler, rather than a Catalog entry";
// For tests using XInclude.xml
String xml_xInclude, xml_xIncludeSimple;
final String elementInXISimple = "blue";
final String contentInXIutf8 = "trjsagdkasgdhasdgashgdhsadgashdg";
final String contentInUIutf8Catalog = "usingCatalog";
// For the xsd import and include
String xsd_xmlSchema, dtd_xmlSchema, dtd_datatypes;
String xsd_xmlSchema_import, xsd_xml;
String xml_val_test, xml_val_test_id, xsd_val_test;
String xsd_include_company, xsd_include_person, xsd_include_product;
String xsl_include, xsl_includeDTD, xsl_import_html, xsl_include_header, xsl_include_footer;
// For the xsl import and include
String xml_xsl, xml_xslDTD;
// For document function
String xml_doc, xsl_doc, xml_doc2;
void initFiles() {
xml_system = filepath + "system.xml";
dtd_system = filepath + "system.dtd";
dtd_systemResolved = "<!ENTITY system \"resolved by an EntityHandler, rather than a Catalog\">";
xml_catalog = filepath + "CatalogSupport.xml";
xml_bogus_catalog = filepath + "CatalogSupport_bogus.xml";
xml_xInclude = "<?xml version=\"1.0\"?>\n" +
"<xinclude:include xmlns:xinclude=\"http://www.w3.org/2001/XInclude\"\n" +
" href=\"XI_simple.xml\"/>\n";
xml_xIncludeSimple = filepath + "XI_simple.xml";
xsd_xmlSchema = "<?xml version=\"1.1\" encoding=\"UTF-8\"?>"
+ "<!DOCTYPE xs:schema PUBLIC \"-//W3C//DTD XMLSCHEMA 200102//EN\" \"pathto/XMLSchema.dtd\" >"
+ "<xs:schema targetNamespace=\"http://www.w3.org/2001/XMLSchema\" blockDefault=\"#all\" "
+ " elementFormDefault=\"qualified\" version=\"1.0\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" "
+ " xml:lang=\"EN\" xmlns:hfp=\"http://www.w3.org/2001/XMLSchema-hasFacetAndProperty\">"
+ " <xs:annotation>"
+ " <xs:documentation>"
+ " Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp "
+ " Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp "
+ " </xs:documentation>"
+ " </xs:annotation>"
+ "</xs:schema>";
dtd_xmlSchema = filepath + "XMLSchema.dtd";
dtd_datatypes = filepath + "datatypes.dtd";
xsd_xmlSchema_import = "<?xml version=\"1.1\" encoding=\"UTF-8\"?>"
+ "<xs:schema targetNamespace=\"http://www.w3.org/2001/XMLSchema\" "
+ "blockDefault=\"#all\" elementFormDefault=\"qualified\" version=\"1.0\" "
+ "xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xml:lang=\"EN\" "
+ "xmlns:hfp=\"http://www.w3.org/2001/XMLSchema-hasFacetAndProperty\">"
+ " <xs:annotation>"
+ " <xs:documentation>"
+ " Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp "
+ " Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp "
+ " </xs:documentation>"
+ " </xs:annotation>"
+ ""
+ " <xs:import namespace=\"http://www.w3.org/XML/1998/namespace\" "
+ "schemaLocation=\"http://www.w3.org/2001/pathto/xml.xsd\">"
+ " <xs:annotation>"
+ " <xs:documentation>"
+ " Get access to the xml: attribute groups for xml:lang"
+ " as declared on 'schema' and 'documentation' below"
+ " </xs:documentation>"
+ " </xs:annotation>"
+ " </xs:import>"
+ " <xs:element name=\"schema\" id=\"schema\">"
+ " <xs:complexType>"
+ " <xs:simpleContent>"
+ " <xs:extension base=\"xs:integer\">"
+ " <xs:attribute ref=\"xml:lang\"/>"
+ " </xs:extension>"
+ " </xs:simpleContent>"
+ " </xs:complexType>"
+ " </xs:element>"
+ "</xs:schema>";
xsd_xml = filepath + "xml.xsd";
xsd_include_company = "<?xml version=\"1.1\"?>"
+ "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
+ " targetNamespace=\"http://www.company.org\""
+ " xmlns=\"http://www.company.org\""
+ " elementFormDefault=\"qualified\">"
+ " <xsd:include schemaLocation=\"pathto/XSDInclude_person.xsd\"/>"
+ " <xsd:include schemaLocation=\"pathto/XSDInclude_product.xsd\"/>"
+ " <xsd:element name=\"Company\">"
+ " <xsd:complexType>"
+ " <xsd:sequence>"
+ " <xsd:element name=\"Person\" type=\"PersonType\""
+ " maxOccurs=\"unbounded\"/>"
+ " <xsd:element name=\"Product\" type=\"ProductType\""
+ " maxOccurs=\"unbounded\"/>"
+ " </xsd:sequence>"
+ " </xsd:complexType>"
+ " </xsd:element>"
+ "</xsd:schema>";
xsd_include_person = filepath + "XSDInclude_person.xsd";
xsd_include_product = filepath + "XSDInclude_product.xsd";
xsl_include = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"
+ " <xsl:import href=\"pathto/XSLImport_html.xsl\"/>"
+ " <xsl:include href=\"pathto/XSLInclude_header.xsl\"/>"
+ " "
+ ""
+ " <xsl:template match=\"content/title\">"
+ " <h1><xsl:apply-templates/></h1>"
+ " </xsl:template>"
+ " "
+ " <xsl:include href=\"pathto/XSLInclude_footer.xsl\"/>"
+ ""
+ "</xsl:stylesheet>";
xsl_includeDTD = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<!DOCTYPE HTMLlat1 SYSTEM \"http://openjdk.java.net/xml/catalog/dtd/XSLDTD.dtd\">"
+ "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">"
+ " <xsl:import href=\"pathto/XSLImport_html.xsl\"/>"
+ " <xsl:include href=\"pathto/XSLInclude_header.xsl\"/>"
+ " "
+ ""
+ " <xsl:template match=\"content/title\">"
+ " <h1><xsl:apply-templates/></h1>"
+ " </xsl:template>"
+ " "
+ " <xsl:include href=\"pathto/XSLInclude_footer.xsl\"/>"
+ ""
+ "</xsl:stylesheet>";
xsl_import_html = filepath + "XSLImport_html.xsl";
xsl_include_header = filepath + "XSLInclude_header.xsl";
xsl_include_footer = filepath + "XSLInclude_footer.xsl";
xml_val_test = filepath + "/val_test.xml";
xml_val_test_id = "file://" + slash + xml_val_test;
xsd_val_test = filepath + "/val_test.xsd";
xml_xsl = "<?xml version=\"1.0\"?>\n" +
"<content>\n" +
" <header>This is the header</header>\n" +
" Some content\n" +
" <footer>footer</footer>\n" +
"</content>";
xml_xslDTD = "<?xml version=\"1.0\"?>\n" +
"<!DOCTYPE content SYSTEM \"http://openjdk.java.net/xml/catalog/dtd/include.dtd\">" +
"<content>\n" +
" <header>This is the header</header>\n" +
" Some content\n" +
" <footer>footer</footer>\n" +
"</content>";
xml_doc = filepath + "/DocFunc.xml";
xsl_doc = filepath + "/DocFunc.xsl";
xml_doc2 = filepath + "/DocFunc2.xml";
}
/*
Verifies the Catalog support on SAXParser.
*/
public void testSAX(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
SAXParser parser = getSAXParser(setUseCatalog, useCatalog, catalog);
parser.parse(xml, handler);
assertEquals(expected, handler.getResult().trim(), "");
}
/*
Verifies the Catalog support on XMLReader.
*/
public void testXMLReader(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
XMLReader reader = getXMLReader(setUseCatalog, useCatalog, catalog);
reader.setContentHandler(handler);
reader.parse(xml);
assertEquals(expected, handler.getResult().trim(), "");
}
/*
Verifies the Catalog support on XInclude.
*/
public void testXInclude(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
SAXParser parser = getSAXParser(setUseCatalog, useCatalog, catalog);
parser.parse(new InputSource(new StringReader(xml)), handler);
debugPrint("handler.result:" + handler.getResult());
assertEquals(expected, handler.getResult(), "Catalog support for XInclude");
}
/*
Verifies the Catalog support on DOM parser.
*/
public void testDOM(boolean setUseCatalog, boolean useCatalog, String catalog,
String xml, MyHandler handler, String expected) throws Exception {
DocumentBuilder docBuilder = getDomBuilder(setUseCatalog, useCatalog, catalog);
docBuilder.setEntityResolver(handler);
Document doc = docBuilder.parse(xml);
Node node = doc.getElementsByTagName(elementInSystem).item(0);
String result = node.getFirstChild().getTextContent();
assertEquals(expected, result.trim(), "Catalog support for DOM");
}
/*
Verifies the Catalog support on resolving DTD, xsd import and include in
Schema files.
*/
public void testValidation(boolean setUseCatalog, boolean useCatalog, String catalog,
String xsd, LSResourceResolver resolver)
throws Exception {
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
// use resolver or catalog if resolver = null
if (resolver != null) {
factory.setResourceResolver(resolver);
}
if (setUseCatalog) {
factory.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
factory.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
Schema schema = factory.newSchema(new StreamSource(new StringReader(xsd)));
success("XMLSchema.dtd and datatypes.dtd are resolved.");
}
/**
* Verifies Catalog Support for the Validator.
* @param setUseCatalog1 a flag to indicate whether USE_CATALOG shall be set
* on the factory.
* @param setUseCatalog2 a flag to indicate whether USE_CATALOG shall be set
* on the Validator.
* @param source the XML source
* @param resolver1 a resolver to be set on the factory if specified
* @param resolver2 a resolver to be set on the Validator if specified
* @param catalog1 a catalog to be set on the factory if specified
* @param catalog2 a catalog to be set on the Validator if specified
*/
public void testValidator(boolean setUseCatalog1, boolean setUseCatalog2, boolean useCatalog,
Source source, LSResourceResolver resolver1, LSResourceResolver resolver2,
String catalog1, String catalog2)
throws Exception {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
if (setUseCatalog1) {
schemaFactory.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
if (catalog1 != null) {
schemaFactory.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog1);
}
if (resolver1 != null) {
schemaFactory.setResourceResolver(resolver1);
}
Schema schema = schemaFactory.newSchema();
Validator validator = schema.newValidator();
if (setUseCatalog2) {
validator.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
if (catalog2 != null) {
validator.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog2);
}
if (resolver2 != null) {
validator.setResourceResolver(resolver2);
}
validator.validate(source);
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
public void testXSLImport(boolean setUseCatalog, boolean useCatalog, String catalog,
SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
TransformerFactory factory = getTransformerFactory(setUseCatalog, useCatalog, catalog, resolver);
Transformer transformer = factory.newTransformer(xsl);
StringWriter out = new StringWriter();
transformer.transform(xml, new StreamResult(out));
debugPrint("out:\n" + out.toString());
Assert.assertTrue(out.toString().contains(expected), "testXSLImport");
}
/*
Verifies the Catalog support on resolving DTD, xsl import and include in
XSL files.
*/
public void testXSLImportWTemplates(boolean setUseCatalog, boolean useCatalog,
String catalog, SAXSource xsl, StreamSource xml,
URIResolver resolver, String expected) throws Exception {
TransformerFactory factory = getTransformerFactory(setUseCatalog, useCatalog, catalog, resolver);
Transformer transformer = factory.newTemplates(xsl).newTransformer();
StringWriter out = new StringWriter();
transformer.transform(xml, new StreamResult(out));
Assert.assertTrue(out.toString().contains(expected), "testXSLImportWTemplates");
}
/**
* Returns an instance of SAXParser with a catalog if one is provided.
*
* @param setUseCatalog a flag indicates whether USE_CATALOG shall be set
* through the factory
* @param useCatalog the value of USE_CATALOG
* @param catalog a catalog
* @return an instance of SAXParser
* @throws ParserConfigurationException
* @throws SAXException
*/
SAXParser getSAXParser(boolean setUseCatalog, boolean useCatalog, String catalog)
throws ParserConfigurationException, SAXException {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
spf.setXIncludeAware(true);
if (setUseCatalog) {
spf.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
SAXParser parser = spf.newSAXParser();
parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
return parser;
}
/**
* Returns an instance of XMLReader with a catalog if one is provided.
*
* @param setUseCatalog a flag indicates whether USE_CATALOG shall be set
* through the factory
* @param useCatalog the value of USE_CATALOG
* @param catalog a catalog
* @return an instance of XMLReader
* @throws ParserConfigurationException
* @throws SAXException
*/
XMLReader getXMLReader(boolean setUseCatalog, boolean useCatalog, String catalog)
throws ParserConfigurationException, SAXException {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setNamespaceAware(true);
XMLReader reader = spf.newSAXParser().getXMLReader();
if (setUseCatalog) {
reader.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
reader.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
return reader;
}
/**
* Returns an instance of DocumentBuilder that may have set a Catalog.
*
* @param setUseCatalog a flag indicates whether USE_CATALOG shall be set
* through the factory
* @param useCatalog the value of USE_CATALOG
* @param catalog a catalog
* @return an instance of DocumentBuilder
* @throws ParserConfigurationException
*/
DocumentBuilder getDomBuilder(boolean setUseCatalog, boolean useCatalog, String catalog)
throws ParserConfigurationException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
if (setUseCatalog) {
dbf.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
dbf.setAttribute(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
return docBuilder;
}
/**
* Creates a DOMSource.
*
* @param uri the URI to the XML source file
* @param systemId the systemId of the source
* @param setUseCatalog a flag indicates whether USE_CATALOG shall be set
* through the factory
* @param useCatalog the value of USE_CATALOG
* @param catalog a catalog
* @return a DOMSource
* @throws Exception
*/
DOMSource getDOMSource(String uri, String systemId, boolean setUseCatalog,
boolean useCatalog, String catalog) {
DOMSource ds = null;
try {
DocumentBuilder builder = getDomBuilder(setUseCatalog, useCatalog, catalog);
Document doc = builder.parse(new File(uri));
ds = new DOMSource(doc, systemId);
} catch (Exception e) {}
return ds;
}
/**
* Creates a StAXSource.
*
* @param xmlFile the XML source file
* @param xmlFileId the systemId of the source
* @return a StAXSource
* @throws XMLStreamException
* @throws FileNotFoundException
*/
StAXSource getStaxSource(String xmlFile, String xmlFileId) {
StAXSource ss = null;
try {
ss = new StAXSource(
XMLInputFactory.newFactory().createXMLEventReader(
xmlFileId, new FileInputStream(xmlFile)));
} catch (Exception e) {}
return ss;
}
/**
* Creates an XMLStreamReader.
* @param catalog the path to a catalog
* @param xml the xml to be parsed
* @param resolver a resolver to be set on the reader
* @return an instance of the XMLStreamReader
* @throws FileNotFoundException
* @throws XMLStreamException
*/
XMLStreamReader getStreamReader(boolean setUseCatalog, boolean useCatalog,
String catalog, String xml, XMLResolver resolver)
throws FileNotFoundException, XMLStreamException {
XMLInputFactory factory = XMLInputFactory.newInstance();
factory.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
factory.setProperty(XMLInputFactory.IS_COALESCING, true);
factory.setProperty(XMLInputFactory.RESOLVER, resolver);
if (setUseCatalog) {
factory.setProperty(XMLConstants.USE_CATALOG, useCatalog);
}
InputStream entityxml = new FileInputStream(xml);
XMLStreamReader streamReader = factory.createXMLStreamReader(xml, entityxml);
return streamReader;
}
/**
* Returns the text of the first element found by the reader.
* @param streamReader the XMLStreamReader
* @return the text of the first element
* @throws XMLStreamException
*/
String getText(XMLStreamReader streamReader) throws XMLStreamException {
while(streamReader.hasNext()){
int eventType = streamReader.next() ;
if(eventType == XMLStreamConstants.START_ELEMENT){
eventType = streamReader.next() ;
if(eventType == XMLStreamConstants.CHARACTERS){
return streamReader.getText() ;
}
}
}
return null;
}
/**
* Returns an instance of TransformerFactory with either a custom URIResolver
* or Catalog.
*
* @param setUseCatalog a flag indicates whether USE_CATALOG shall be set
* through the factory
* @param useCatalog the value of USE_CATALOG
* @param catalog a catalog
* @param resolver a custom resolver
* @return an instance of TransformerFactory
* @throws Exception
*/
TransformerFactory getTransformerFactory(boolean setUseCatalog, boolean useCatalog,
String catalog, URIResolver resolver)
throws Exception {
TransformerFactory factory = TransformerFactory.newInstance();
if (setUseCatalog) {
factory.setFeature(XMLConstants.USE_CATALOG, useCatalog);
}
if (catalog != null) {
factory.setAttribute(CatalogFeatures.Feature.FILES.getPropertyName(), catalog);
}
// use resolver or catalog if resolver = null
if (resolver != null) {
factory.setURIResolver(resolver);
}
return factory;
}
void assertNotNull(Object obj, String msg) {
if (obj == null) {
debugPrint("Test failed: " + msg);
} else {
debugPrint("Test passed: " + obj + " is not null");
}
}
void assertEquals(String expected, String actual, String msg) {
if (!expected.equals(actual)) {
debugPrint("Test failed: " + msg);
} else {
debugPrint("Test passed: ");
}
debugPrint("Expected: " + expected);
debugPrint("Actual: " + actual);
}
void fail(String msg) {
System.out.println("Test failed:");
System.out.println(msg);
}
void success(String msg) {
System.out.println("Test succeded:");
System.out.println(msg);
}
void debugPrint(String msg) {
if (debug) {
System.out.println(msg);
}
}
/**
* Extends MyStaxResolver to override resolveEntity
*/
class MyStaxEntityResolver implements XMLResolver {
public MyStaxEntityResolver() {
}
public Object resolveEntity(String publicId, String systemId, String baseURI,
String namespace)
throws javax.xml.stream.XMLStreamException {
try {
return new ByteArrayInputStream(
"<!ENTITY system \"resolved by an EntityHandler, rather than a Catalog\">".getBytes("UTF-8"));
} catch (UnsupportedEncodingException ex) {
return null;
}
}
}
/**
* A custom XMLResolver
*/
class MyStaxResolver implements XMLResolver {
public MyStaxResolver() {
}
public Object resolveEntity(String publicId, String systemId, String baseURI,
String namespace) throws javax.xml.stream.XMLStreamException {
return null;
}
}
/**
* Extends MyHandler and overrides resolveEntity
*/
class MyEntityHandler extends MyHandler {
String[] systemIds;
InputSource[] returnValues;
public MyEntityHandler(String[] systemIds, InputSource[] returnValues, String elementName) {
super(elementName);
this.systemIds = systemIds;
this.returnValues = returnValues;
}
@Override
public InputSource resolveEntity(String name, String publicId,
String baseURI, String systemId) {
for (int i = 0; i < systemIds.length; i++) {
if (systemId.endsWith(systemIds[i])) {
return returnValues[i];
}
}
return null;
}
}
/**
* SAX handler
*/
public class MyHandler extends DefaultHandler2 implements ErrorHandler {
String elementName, currentElementName, result;
StringBuilder textContent = new StringBuilder();
/**
*
* @param elementName the name of the element from which the content
* is to be captured
*/
MyHandler(String elementName) {
textContent.setLength(0);
this.elementName = elementName;
}
String getResult() {
return result.trim();
}
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
currentElementName = localName;
textContent.delete(0, textContent.length());
try {
debugPrint("Element: " + uri + ":" + localName + " " + qName);
} catch (Exception e) {
throw new SAXException(e);
}
}
public void endElement(String uri, String localName, String qName) throws SAXException {
debugPrint("Text: " + textContent.toString() + "");
debugPrint("End Element: " + uri + ":" + localName + " " + qName);
if (currentElementName.equals(elementName)) {
result = textContent.toString();
}
}
public void characters(char ch[], int start, int length) throws SAXException {
if (currentElementName.equals(elementName)) {
textContent.append(ch, start, length);
}
}
public void internalEntityDecl(String name, String value) throws SAXException {
super.internalEntityDecl(name, value);
debugPrint("internalEntityDecl() is invoked for entity : " + name);
}
public void externalEntityDecl(String name, String publicId, String systemId)
throws SAXException {
super.externalEntityDecl(name, publicId, systemId);
debugPrint("externalEntityDecl() is invoked for entity : " + name);
}
public void startEntity(String name) throws SAXException {
super.startEntity(name);
// debugPrint("startEntity() is invoked for entity : " + name) ;
}
public void endEntity(String name) throws SAXException {
super.endEntity(name);
// debugPrint("endEntity() is invoked for entity : " + name) ;
}
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
debugPrint("resolveEntity(publicId, systemId) is invoked");
return super.resolveEntity(publicId, systemId);
}
/**
* public InputSource resolveEntity(String name, String publicId, String
* baseURI, String systemId) throws SAXException, IOException {
* System.out.println("resolveEntity(name, publicId, baseURI, systemId)
* is invoked"); return super.resolveEntity(name, publicId, baseURI,
* systemId); }
*/
public InputSource getExternalSubset(String name, String baseURI)
throws SAXException, IOException {
debugPrint("getExternalSubset() is invoked");
return super.getExternalSubset(name, baseURI);
}
}
/**
* The purpose of this class, vs an anonymous class, is to show clearly what
* we're testing by passing the parameters to the constructor.
*/
class SourceResolver implements LSResourceResolver {
String publicId;
String[] systemIds;
XmlInput[] returnValues;
public SourceResolver(String publicId, String[] systemIds, XmlInput[] returnValues) {
this.publicId = publicId;
this.systemIds = systemIds;
this.returnValues = returnValues;
}
@Override
public LSInput resolveResource(String type, String namespaceURI, String publicId,
String systemId, String baseURI) {
for (int i = 0; i < systemIds.length; i++) {
if (systemId.endsWith(systemIds[i])) {
return returnValues[i];
}
}
return null;
}
}
class XmlInput implements LSInput {
private InputStream inputStream;
private String systemId;
private String baseUri;
public XmlInput(InputStream inputStream, String systemId, String baseUri) {
this.inputStream = inputStream;
this.systemId = systemId;
this.baseUri = baseUri;
}
@Override
public Reader getCharacterStream() {
return null;
}
@Override
public void setCharacterStream(Reader characterStream) {
}
@Override
public InputStream getByteStream() {
return inputStream;
}
@Override
public void setByteStream(InputStream byteStream) {
this.inputStream = byteStream;
}
@Override
public String getStringData() {
return null;
}
@Override
public void setStringData(String stringData) {
}
@Override
public String getSystemId() {
return systemId;
}
@Override
public void setSystemId(String systemId) {
this.systemId = systemId;
}
@Override
public String getPublicId() {
return null;
}
@Override
public void setPublicId(String publicId) {
}
@Override
public String getBaseURI() {
return baseUri;
}
@Override
public void setBaseURI(String baseURI) {
this.baseUri = baseURI;
}
@Override
public String getEncoding() {
return null;
}
@Override
public void setEncoding(String encoding) {
}
@Override
public boolean getCertifiedText() {
return false;
}
@Override
public void setCertifiedText(boolean certifiedText) {
}
}
class XslResolver implements URIResolver {
String[] hrefs;
Source[] returnValues;
public XslResolver(String[] href, Source[] returnValues) {
this.hrefs = href;
this.returnValues = returnValues;
}
@Override
public Source resolve(String href, String base) throws TransformerException {
for (int i = 0; i < hrefs.length; i++) {
if (href.endsWith(hrefs[i])) {
return returnValues[i];
}
}
return null;
}
}
}

View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
</catalog>

View File

@ -0,0 +1,4 @@
<?xml version="1.0"?>
<root>
<test></test>
</root>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="dummy" select="document('pathto/DocFunc2.xml')"/>
<xsl:template match="/">
<test2><xsl:apply-templates select="$dummy//reference/test"/></test2>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<reference>
<test>Resolved by a resolver</test>
</reference>

View File

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<reference>
<test>Resolved by a catalog</test>
</reference>

View File

@ -0,0 +1,4 @@
<!--
Comment in DTD
-->

View File

@ -0,0 +1,18 @@
<simple>
<test xmlns:xinclude="http://www.w3.org/2001/XInclude">
<latin1>
<firstElement/>
<xinclude:include href="XI_utf8.xml" parse="text"/>
<insideChildren/>
<another>
<deeper>text</deeper>
</another>
</latin1>
<test2>
<xinclude:include href="XI_test2.xml"/>
</test2>
<test3>
<!-- <xinclude:include href="XI_roottest.xml"/> -->
</test3>
</test>
</simple>

View File

@ -0,0 +1,18 @@
<simple>
<test xmlns:xinclude="http://www.w3.org/2001/XInclude">
<latin1>
<firstElement/>
<xinclude:include href="XI_utf8Catalog.xml" parse="text"/>
<insideChildren/>
<another>
<deeper>text</deeper>
</another>
</latin1>
<test2>
<xinclude:include href="XI_test2.xml"/>
</test2>
<test3>
<!-- <xinclude:include href="XI_roottest.xml"/> -->
</test3>
</test>
</simple>

View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<!-- comment before root -->
<!DOCTYPE red SYSTEM "XI_red.dtd">
<red xmlns:xinclude="http://www.w3.org/2001/XInclude">
<blue>
<xinclude:include href="XI_utf8.xml" parse="text"/>
</blue>
</red>
<!-- comment after root -->

View File

@ -0,0 +1 @@
trjsagdkasgdhasdgashgdhsadgashdg

View File

@ -0,0 +1 @@
usingCatalog

View File

@ -0,0 +1,402 @@
<!-- DTD for XML Schemas: Part 1: Structures
Public Identifier: "-//W3C//DTD XMLSCHEMA 200102//EN"
Official Location: http://www.w3.org/2001/XMLSchema.dtd -->
<!-- $Id: XMLSchema.dtd,v 1.31 2001/10/24 15:50:16 ht Exp $ -->
<!-- Note this DTD is NOT normative, or even definitive. --> <!--d-->
<!-- prose copy in the structures REC is the definitive version --> <!--d-->
<!-- (which shouldn't differ from this one except for this --> <!--d-->
<!-- comment and entity expansions, but just in case) --> <!--d-->
<!-- With the exception of cases with multiple namespace
prefixes for the XML Schema namespace, any XML document which is
not valid per this DTD given redefinitions in its internal subset of the
'p' and 's' parameter entities below appropriate to its namespace
declaration of the XML Schema namespace is almost certainly not
a valid schema. -->
<!-- The simpleType element and its constituent parts
are defined in XML Schema: Part 2: Datatypes -->
<!ENTITY % xs-datatypes PUBLIC 'datatypes' 'datatypes.dtd' >
<!ENTITY % p 'xs:'> <!-- can be overriden in the internal subset of a
schema document to establish a different
namespace prefix -->
<!ENTITY % s ':xs'> <!-- if %p is defined (e.g. as foo:) then you must
also define %s as the suffix for the appropriate
namespace declaration (e.g. :foo) -->
<!ENTITY % nds 'xmlns%s;'>
<!-- Define all the element names, with optional prefix -->
<!ENTITY % schema "%p;schema">
<!ENTITY % complexType "%p;complexType">
<!ENTITY % complexContent "%p;complexContent">
<!ENTITY % simpleContent "%p;simpleContent">
<!ENTITY % extension "%p;extension">
<!ENTITY % element "%p;element">
<!ENTITY % unique "%p;unique">
<!ENTITY % key "%p;key">
<!ENTITY % keyref "%p;keyref">
<!ENTITY % selector "%p;selector">
<!ENTITY % field "%p;field">
<!ENTITY % group "%p;group">
<!ENTITY % all "%p;all">
<!ENTITY % choice "%p;choice">
<!ENTITY % sequence "%p;sequence">
<!ENTITY % any "%p;any">
<!ENTITY % anyAttribute "%p;anyAttribute">
<!ENTITY % attribute "%p;attribute">
<!ENTITY % attributeGroup "%p;attributeGroup">
<!ENTITY % include "%p;include">
<!ENTITY % import "%p;import">
<!ENTITY % redefine "%p;redefine">
<!ENTITY % notation "%p;notation">
<!-- annotation elements -->
<!ENTITY % annotation "%p;annotation">
<!ENTITY % appinfo "%p;appinfo">
<!ENTITY % documentation "%p;documentation">
<!-- Customisation entities for the ATTLIST of each element type.
Define one of these if your schema takes advantage of the
anyAttribute='##other' in the schema for schemas -->
<!ENTITY % schemaAttrs ''>
<!ENTITY % complexTypeAttrs ''>
<!ENTITY % complexContentAttrs ''>
<!ENTITY % simpleContentAttrs ''>
<!ENTITY % extensionAttrs ''>
<!ENTITY % elementAttrs ''>
<!ENTITY % groupAttrs ''>
<!ENTITY % allAttrs ''>
<!ENTITY % choiceAttrs ''>
<!ENTITY % sequenceAttrs ''>
<!ENTITY % anyAttrs ''>
<!ENTITY % anyAttributeAttrs ''>
<!ENTITY % attributeAttrs ''>
<!ENTITY % attributeGroupAttrs ''>
<!ENTITY % uniqueAttrs ''>
<!ENTITY % keyAttrs ''>
<!ENTITY % keyrefAttrs ''>
<!ENTITY % selectorAttrs ''>
<!ENTITY % fieldAttrs ''>
<!ENTITY % includeAttrs ''>
<!ENTITY % importAttrs ''>
<!ENTITY % redefineAttrs ''>
<!ENTITY % notationAttrs ''>
<!ENTITY % annotationAttrs ''>
<!ENTITY % appinfoAttrs ''>
<!ENTITY % documentationAttrs ''>
<!ENTITY % complexDerivationSet "CDATA">
<!-- #all or space-separated list drawn from derivationChoice -->
<!ENTITY % blockSet "CDATA">
<!-- #all or space-separated list drawn from
derivationChoice + 'substitution' -->
<!ENTITY % mgs '%all; | %choice; | %sequence;'>
<!ENTITY % cs '%choice; | %sequence;'>
<!ENTITY % formValues '(qualified|unqualified)'>
<!ENTITY % attrDecls '((%attribute;| %attributeGroup;)*,(%anyAttribute;)?)'>
<!ENTITY % particleAndAttrs '((%mgs; | %group;)?, %attrDecls;)'>
<!-- This is used in part2 -->
<!ENTITY % restriction1 '((%mgs; | %group;)?)'>
%xs-datatypes;
<!-- the duplication below is to produce an unambiguous content model
which allows annotation everywhere -->
<!ELEMENT %schema; ((%include; | %import; | %redefine; | %annotation;)*,
((%simpleType; | %complexType;
| %element; | %attribute;
| %attributeGroup; | %group;
| %notation; ),
(%annotation;)*)* )>
<!ATTLIST %schema;
targetNamespace %URIref; #IMPLIED
version CDATA #IMPLIED
%nds; %URIref; #FIXED 'http://www.w3.org/2001/XMLSchema'
xmlns CDATA #IMPLIED
finalDefault %complexDerivationSet; ''
blockDefault %blockSet; ''
id ID #IMPLIED
elementFormDefault %formValues; 'unqualified'
attributeFormDefault %formValues; 'unqualified'
xml:lang CDATA #IMPLIED
%schemaAttrs;>
<!-- Note the xmlns declaration is NOT in the Schema for Schemas,
because at the Infoset level where schemas operate,
xmlns(:prefix) is NOT an attribute! -->
<!-- The declaration of xmlns is a convenience for schema authors -->
<!-- The id attribute here and below is for use in external references
from non-schemas using simple fragment identifiers.
It is NOT used for schema-to-schema reference, internal or
external. -->
<!-- a type is a named content type specification which allows attribute
declarations-->
<!-- -->
<!ELEMENT %complexType; ((%annotation;)?,
(%simpleContent;|%complexContent;|
%particleAndAttrs;))>
<!ATTLIST %complexType;
name %NCName; #IMPLIED
id ID #IMPLIED
abstract %boolean; #IMPLIED
final %complexDerivationSet; #IMPLIED
block %complexDerivationSet; #IMPLIED
mixed (true|false) 'false'
%complexTypeAttrs;>
<!-- particleAndAttrs is shorthand for a root type -->
<!-- mixed is disallowed if simpleContent, overriden if complexContent
has one too. -->
<!-- If anyAttribute appears in one or more referenced attributeGroups
and/or explicitly, the intersection of the permissions is used -->
<!ELEMENT %complexContent; ((%annotation;)?, (%restriction;|%extension;))>
<!ATTLIST %complexContent;
mixed (true|false) #IMPLIED
id ID #IMPLIED
%complexContentAttrs;>
<!-- restriction should use the branch defined above, not the simple
one from part2; extension should use the full model -->
<!ELEMENT %simpleContent; ((%annotation;)?, (%restriction;|%extension;))>
<!ATTLIST %simpleContent;
id ID #IMPLIED
%simpleContentAttrs;>
<!-- restriction should use the simple branch from part2, not the
one defined above; extension should have no particle -->
<!ELEMENT %extension; ((%annotation;)?, (%particleAndAttrs;))>
<!ATTLIST %extension;
base %QName; #REQUIRED
id ID #IMPLIED
%extensionAttrs;>
<!-- an element is declared by either:
a name and a type (either nested or referenced via the type attribute)
or a ref to an existing element declaration -->
<!ELEMENT %element; ((%annotation;)?, (%complexType;| %simpleType;)?,
(%unique; | %key; | %keyref;)*)>
<!-- simpleType or complexType only if no type|ref attribute -->
<!-- ref not allowed at top level -->
<!ATTLIST %element;
name %NCName; #IMPLIED
id ID #IMPLIED
ref %QName; #IMPLIED
type %QName; #IMPLIED
minOccurs %nonNegativeInteger; #IMPLIED
maxOccurs CDATA #IMPLIED
nillable %boolean; #IMPLIED
substitutionGroup %QName; #IMPLIED
abstract %boolean; #IMPLIED
final %complexDerivationSet; #IMPLIED
block %blockSet; #IMPLIED
default CDATA #IMPLIED
fixed CDATA #IMPLIED
form %formValues; #IMPLIED
%elementAttrs;>
<!-- type and ref are mutually exclusive.
name and ref are mutually exclusive, one is required -->
<!-- In the absence of type AND ref, type defaults to type of
substitutionGroup, if any, else the ur-type, i.e. unconstrained -->
<!-- default and fixed are mutually exclusive -->
<!ELEMENT %group; ((%annotation;)?,(%mgs;)?)>
<!ATTLIST %group;
name %NCName; #IMPLIED
ref %QName; #IMPLIED
minOccurs %nonNegativeInteger; #IMPLIED
maxOccurs CDATA #IMPLIED
id ID #IMPLIED
%groupAttrs;>
<!ELEMENT %all; ((%annotation;)?, (%element;)*)>
<!ATTLIST %all;
minOccurs (1) #IMPLIED
maxOccurs (1) #IMPLIED
id ID #IMPLIED
%allAttrs;>
<!ELEMENT %choice; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
<!ATTLIST %choice;
minOccurs %nonNegativeInteger; #IMPLIED
maxOccurs CDATA #IMPLIED
id ID #IMPLIED
%choiceAttrs;>
<!ELEMENT %sequence; ((%annotation;)?, (%element;| %group;| %cs; | %any;)*)>
<!ATTLIST %sequence;
minOccurs %nonNegativeInteger; #IMPLIED
maxOccurs CDATA #IMPLIED
id ID #IMPLIED
%sequenceAttrs;>
<!-- an anonymous grouping in a model, or
a top-level named group definition, or a reference to same -->
<!-- Note that if order is 'all', group is not allowed inside.
If order is 'all' THIS group must be alone (or referenced alone) at
the top level of a content model -->
<!-- If order is 'all', minOccurs==maxOccurs==1 on element/any inside -->
<!-- Should allow minOccurs=0 inside order='all' . . . -->
<!ELEMENT %any; (%annotation;)?>
<!ATTLIST %any;
namespace CDATA '##any'
processContents (skip|lax|strict) 'strict'
minOccurs %nonNegativeInteger; '1'
maxOccurs CDATA '1'
id ID #IMPLIED
%anyAttrs;>
<!-- namespace is interpreted as follows:
##any - - any non-conflicting WFXML at all
##other - - any non-conflicting WFXML from namespace other
than targetNamespace
##local - - any unqualified non-conflicting WFXML/attribute
one or - - any non-conflicting WFXML from
more URI the listed namespaces
references
##targetNamespace ##local may appear in the above list,
with the obvious meaning -->
<!ELEMENT %anyAttribute; (%annotation;)?>
<!ATTLIST %anyAttribute;
namespace CDATA '##any'
processContents (skip|lax|strict) 'strict'
id ID #IMPLIED
%anyAttributeAttrs;>
<!-- namespace is interpreted as for 'any' above -->
<!-- simpleType only if no type|ref attribute -->
<!-- ref not allowed at top level, name iff at top level -->
<!ELEMENT %attribute; ((%annotation;)?, (%simpleType;)?)>
<!ATTLIST %attribute;
name %NCName; #IMPLIED
id ID #IMPLIED
ref %QName; #IMPLIED
type %QName; #IMPLIED
use (prohibited|optional|required) #IMPLIED
default CDATA #IMPLIED
fixed CDATA #IMPLIED
form %formValues; #IMPLIED
%attributeAttrs;>
<!-- type and ref are mutually exclusive.
name and ref are mutually exclusive, one is required -->
<!-- default for use is optional when nested, none otherwise -->
<!-- default and fixed are mutually exclusive -->
<!-- type attr and simpleType content are mutually exclusive -->
<!-- an attributeGroup is a named collection of attribute decls, or a
reference thereto -->
<!ELEMENT %attributeGroup; ((%annotation;)?,
(%attribute; | %attributeGroup;)*,
(%anyAttribute;)?) >
<!ATTLIST %attributeGroup;
name %NCName; #IMPLIED
id ID #IMPLIED
ref %QName; #IMPLIED
%attributeGroupAttrs;>
<!-- ref iff no content, no name. ref iff not top level -->
<!-- better reference mechanisms -->
<!ELEMENT %unique; ((%annotation;)?, %selector;, (%field;)+)>
<!ATTLIST %unique;
name %NCName; #REQUIRED
id ID #IMPLIED
%uniqueAttrs;>
<!ELEMENT %key; ((%annotation;)?, %selector;, (%field;)+)>
<!ATTLIST %key;
name %NCName; #REQUIRED
id ID #IMPLIED
%keyAttrs;>
<!ELEMENT %keyref; ((%annotation;)?, %selector;, (%field;)+)>
<!ATTLIST %keyref;
name %NCName; #REQUIRED
refer %QName; #REQUIRED
id ID #IMPLIED
%keyrefAttrs;>
<!ELEMENT %selector; ((%annotation;)?)>
<!ATTLIST %selector;
xpath %XPathExpr; #REQUIRED
id ID #IMPLIED
%selectorAttrs;>
<!ELEMENT %field; ((%annotation;)?)>
<!ATTLIST %field;
xpath %XPathExpr; #REQUIRED
id ID #IMPLIED
%fieldAttrs;>
<!-- Schema combination mechanisms -->
<!ELEMENT %include; (%annotation;)?>
<!ATTLIST %include;
schemaLocation %URIref; #REQUIRED
id ID #IMPLIED
%includeAttrs;>
<!ELEMENT %import; (%annotation;)?>
<!ATTLIST %import;
namespace %URIref; #IMPLIED
schemaLocation %URIref; #IMPLIED
id ID #IMPLIED
%importAttrs;>
<!ELEMENT %redefine; (%annotation; | %simpleType; | %complexType; |
%attributeGroup; | %group;)*>
<!ATTLIST %redefine;
schemaLocation %URIref; #REQUIRED
id ID #IMPLIED
%redefineAttrs;>
<!ELEMENT %notation; (%annotation;)?>
<!ATTLIST %notation;
name %NCName; #REQUIRED
id ID #IMPLIED
public CDATA #REQUIRED
system %URIref; #IMPLIED
%notationAttrs;>
<!-- Annotation is either application information or documentation -->
<!-- By having these here they are available for datatypes as well
as all the structures elements -->
<!ELEMENT %annotation; (%appinfo; | %documentation;)*>
<!ATTLIST %annotation; %annotationAttrs;>
<!-- User must define annotation elements in internal subset for this
to work -->
<!ELEMENT %appinfo; ANY> <!-- too restrictive -->
<!ATTLIST %appinfo;
source %URIref; #IMPLIED
id ID #IMPLIED
%appinfoAttrs;>
<!ELEMENT %documentation; ANY> <!-- too restrictive -->
<!ATTLIST %documentation;
source %URIref; #IMPLIED
id ID #IMPLIED
xml:lang CDATA #IMPLIED
%documentationAttrs;>
<!NOTATION XMLSchemaStructures PUBLIC
'structures' 'http://www.w3.org/2001/XMLSchema.xsd' >
<!NOTATION XML PUBLIC
'REC-xml-1998-0210' 'http://www.w3.org/TR/1998/REC-xml-19980210' >

View File

@ -0,0 +1,92 @@
<?xml version="1.1" encoding="UTF-8"?>
<!-- XML Schema schema for XML Schemas: Part 1: Structures -->
<!-- Note this schema is NOT the normative structures schema. -->
<!-- The prose copy in the structures REC is the normative -->
<!-- version (which shouldn't differ from this one except for -->
<!-- this comment and entity expansions, but just in case -->
<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "pathto/XMLSchema.dtd" [
<!-- provide ID type information even for parsers which only read the
internal subset -->
<!ATTLIST xs:schema id ID #IMPLIED>
<!ATTLIST xs:complexType id ID #IMPLIED>
<!ATTLIST xs:complexContent id ID #IMPLIED>
<!ATTLIST xs:simpleContent id ID #IMPLIED>
<!ATTLIST xs:extension id ID #IMPLIED>
<!ATTLIST xs:element id ID #IMPLIED>
<!ATTLIST xs:group id ID #IMPLIED>
<!ATTLIST xs:all id ID #IMPLIED>
<!ATTLIST xs:choice id ID #IMPLIED>
<!ATTLIST xs:sequence id ID #IMPLIED>
<!ATTLIST xs:any id ID #IMPLIED>
<!ATTLIST xs:anyAttribute id ID #IMPLIED>
<!ATTLIST xs:attribute id ID #IMPLIED>
<!ATTLIST xs:attributeGroup id ID #IMPLIED>
<!ATTLIST xs:unique id ID #IMPLIED>
<!ATTLIST xs:key id ID #IMPLIED>
<!ATTLIST xs:keyref id ID #IMPLIED>
<!ATTLIST xs:selector id ID #IMPLIED>
<!ATTLIST xs:field id ID #IMPLIED>
<!ATTLIST xs:include id ID #IMPLIED>
<!ATTLIST xs:import id ID #IMPLIED>
<!ATTLIST xs:redefine id ID #IMPLIED>
<!ATTLIST xs:notation id ID #IMPLIED>
<!--
keep this schema XML1.0 DTD valid
-->
<!ENTITY % schemaAttrs 'xmlns:hfp CDATA #IMPLIED'>
<!ELEMENT hfp:hasFacet EMPTY>
<!ATTLIST hfp:hasFacet
name NMTOKEN #REQUIRED>
<!ELEMENT hfp:hasProperty EMPTY>
<!ATTLIST hfp:hasProperty
name NMTOKEN #REQUIRED
value CDATA #REQUIRED>
<!--
Make sure that processors that do not read the external
subset will know about the various IDs we declare
-->
<!ATTLIST xs:simpleType id ID #IMPLIED>
<!ATTLIST xs:maxExclusive id ID #IMPLIED>
<!ATTLIST xs:minExclusive id ID #IMPLIED>
<!ATTLIST xs:maxInclusive id ID #IMPLIED>
<!ATTLIST xs:minInclusive id ID #IMPLIED>
<!ATTLIST xs:totalDigits id ID #IMPLIED>
<!ATTLIST xs:fractionDigits id ID #IMPLIED>
<!ATTLIST xs:length id ID #IMPLIED>
<!ATTLIST xs:minLength id ID #IMPLIED>
<!ATTLIST xs:maxLength id ID #IMPLIED>
<!ATTLIST xs:enumeration id ID #IMPLIED>
<!ATTLIST xs:pattern id ID #IMPLIED>
<!ATTLIST xs:appinfo id ID #IMPLIED>
<!ATTLIST xs:documentation id ID #IMPLIED>
<!ATTLIST xs:list id ID #IMPLIED>
<!ATTLIST xs:union id ID #IMPLIED>
]>
<xs:schema targetNamespace="http://www.w3.org/2001/XMLSchema" blockDefault="#all" elementFormDefault="qualified" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xml:lang="EN" xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty">
<xs:annotation>
<xs:documentation>
Part 1 version: Id: structures.xsd,v 1.2 2004/01/15 11:34:25 ht Exp
Part 2 version: Id: datatypes.xsd,v 1.3 2004/01/23 18:11:13 ht Exp
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation source="http://www.w3.org/TR/2004/PER-xmlschema-1-20040318/structures.html">
The schema corresponding to this document is normative,
with respect to the syntactic constraints it expresses in the
XML Schema language. The documentation (within &lt;documentation&gt; elements)
below, is not normative, but rather highlights important aspects of
the W3C Recommendation of which this is a part</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
The simpleType element and all of its members are defined
towards the end of this schema document</xs:documentation>
</xs:annotation>
</xs:schema>

View File

@ -0,0 +1,18 @@
<?xml version="1.1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.company.org"
xmlns="http://www.company.org"
elementFormDefault="qualified">
<xsd:include schemaLocation="XSDInclude_person.xsd"/>
<xsd:include schemaLocation="XSDInclude_product.xsd"/>
<xsd:element name="Company">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Person" type="PersonType"
maxOccurs="unbounded"/>
<xsd:element name="Product" type="ProductType"
maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

View File

@ -0,0 +1,12 @@
<?xml version="1.1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.company.org"
xmlns="http://www.person.org"
elementFormDefault="qualified">
<xsd:complexType name="PersonType">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="SSN" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,11 @@
<?xml version="1.1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.company.org"
xmlns="http://www.product.org"
elementFormDefault="qualified">
<xsd:complexType name="ProductType">
<xsd:sequence>
<xsd:element name="Type" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Portions (C) International Organization for Standardization 1986
Permission to copy in any form is granted for use with
conforming SGML systems and applications as defined in
ISO 8879, provided this notice is included in all copies.
-->
<!-- Character entity set. Typical invocation:
<!ENTITY % HTMLlat1 PUBLIC
"-//W3C//ENTITIES Latin 1//EN//HTML">
%HTMLlat1;
-->
<!ENTITY nbsp "&#160;" >
<!ENTITY iexcl "&#161;" >
<!ENTITY cent "&#162;" >
<!ENTITY pound "&#163;" >
<!ENTITY curren "&#164;" >
<!ENTITY yen "&#165;" >
<!ENTITY brvbar "&#166;" >
<!ENTITY sect "&#167;" >
<!ENTITY uml "&#168;" >
<!ENTITY copy "&#169;" >
<!ENTITY ordf "&#170;" >
<!ENTITY laquo "&#171;" >
<!ENTITY not "&#172;" >
<!ENTITY shy "&#173;" >
<!ENTITY reg "&#174;" >
<!ENTITY macr "&#175;" >
<!ENTITY deg "&#176;" >
<!ENTITY plusmn "&#177;" >
<!ENTITY sup2 "&#178;" >
<!ENTITY sup3 "&#179;" >
<!ENTITY acute "&#180;" >
<!ENTITY micro "&#181;" >
<!ENTITY para "&#182;" >
<!ENTITY middot "&#183;" >
<!ENTITY cedil "&#184;" >
<!ENTITY sup1 "&#185;" >
<!ENTITY ordm "&#186;" >
<!ENTITY raquo "&#187;" >
<!ENTITY frac14 "&#188;" >
<!ENTITY frac12 "&#189;" >
<!ENTITY frac34 "&#190;" >
<!ENTITY iquest "&#191;" >
<!ENTITY Agrave "&#192;" >
<!ENTITY Aacute "&#193;" >
<!ENTITY Acirc "&#194;" >
<!ENTITY Atilde "&#195;" >
<!ENTITY Auml "&#196;" >
<!ENTITY Aring "&#197;" >
<!ENTITY AElig "&#198;" >
<!ENTITY Ccedil "&#199;" >
<!ENTITY Egrave "&#200;" >
<!ENTITY Eacute "&#201;" >
<!ENTITY Ecirc "&#202;" >
<!ENTITY Euml "&#203;" >
<!ENTITY Igrave "&#204;" >
<!ENTITY Iacute "&#205;" >
<!ENTITY Icirc "&#206;" >
<!ENTITY Iuml "&#207;" >
<!ENTITY ETH "&#208;" >
<!ENTITY Ntilde "&#209;" >
<!ENTITY Ograve "&#210;" >
<!ENTITY Oacute "&#211;" >
<!ENTITY Ocirc "&#212;" >
<!ENTITY Otilde "&#213;" >
<!ENTITY Ouml "&#214;" >
<!ENTITY times "&#215;" >
<!ENTITY Oslash "&#216;" >
<!ENTITY Ugrave "&#217;" >
<!ENTITY Uacute "&#218;" >
<!ENTITY Ucirc "&#219;" >
<!ENTITY Uuml "&#220;" >
<!ENTITY Yacute "&#221;" >
<!ENTITY THORN "&#222;" >
<!ENTITY szlig "&#223;" >
<!ENTITY agrave "&#224;" >
<!ENTITY aacute "&#225;" >
<!ENTITY acirc "&#226;" >
<!ENTITY atilde "&#227;" >
<!ENTITY auml "&#228;" >
<!ENTITY aring "&#229;" >
<!ENTITY aelig "&#230;" >
<!ENTITY ccedil "&#231;" >
<!ENTITY egrave "&#232;" >
<!ENTITY eacute "&#233;" >
<!ENTITY ecirc "&#234;" >
<!ENTITY euml "&#235;" >
<!ENTITY igrave "&#236;" >
<!ENTITY iacute "&#237;" >
<!ENTITY icirc "&#238;" >
<!ENTITY iuml "&#239;" >
<!ENTITY eth "&#240;" >
<!ENTITY ntilde "&#241;" >
<!ENTITY ograve "&#242;" >
<!ENTITY oacute "&#243;" >
<!ENTITY ocirc "&#244;" >
<!ENTITY otilde "&#245;" >
<!ENTITY ouml "&#246;" >
<!ENTITY divide "&#247;" >
<!ENTITY oslash "&#248;" >
<!ENTITY ugrave "&#249;" >
<!ENTITY uacute "&#250;" >
<!ENTITY ucirc "&#251;" >
<!ENTITY uuml "&#252;" >
<!ENTITY yacute "&#253;" >
<!ENTITY thorn "&#254;" >
<!ENTITY yuml "&#255;" >

View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<!DOCTYPE HTMLlat1 SYSTEM \"include.dtd\">
<content>
<header>This is the header</header>
Some content
<footer>footer</footer>
</content>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="content">
<html><xsl:apply-templates/></html>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="footer">
<dv id="footer"><xsl:apply-templates/></dv>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="header">
<h4><xsl:apply-templates/></h4>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,203 @@
<!--
DTD for XML Schemas: Part 2: Datatypes
$Id: datatypes.dtd,v 1.23 2001/03/16 17:36:30 ht Exp $
Note this DTD is NOT normative, or even definitive. - - the
prose copy in the datatypes REC is the definitive version
(which shouldn't differ from this one except for this comment
and entity expansions, but just in case)
-->
<!--
This DTD cannot be used on its own, it is intended
only for incorporation in XMLSchema.dtd, q.v.
-->
<!-- Define all the element names, with optional prefix -->
<!ENTITY % simpleType "%p;simpleType">
<!ENTITY % restriction "%p;restriction">
<!ENTITY % list "%p;list">
<!ENTITY % union "%p;union">
<!ENTITY % maxExclusive "%p;maxExclusive">
<!ENTITY % minExclusive "%p;minExclusive">
<!ENTITY % maxInclusive "%p;maxInclusive">
<!ENTITY % minInclusive "%p;minInclusive">
<!ENTITY % totalDigits "%p;totalDigits">
<!ENTITY % fractionDigits "%p;fractionDigits">
<!ENTITY % length "%p;length">
<!ENTITY % minLength "%p;minLength">
<!ENTITY % maxLength "%p;maxLength">
<!ENTITY % enumeration "%p;enumeration">
<!ENTITY % whiteSpace "%p;whiteSpace">
<!ENTITY % pattern "%p;pattern">
<!--
Customisation entities for the ATTLIST of each element
type. Define one of these if your schema takes advantage
of the anyAttribute='##other' in the schema for schemas
-->
<!ENTITY % simpleTypeAttrs "">
<!ENTITY % restrictionAttrs "">
<!ENTITY % listAttrs "">
<!ENTITY % unionAttrs "">
<!ENTITY % maxExclusiveAttrs "">
<!ENTITY % minExclusiveAttrs "">
<!ENTITY % maxInclusiveAttrs "">
<!ENTITY % minInclusiveAttrs "">
<!ENTITY % totalDigitsAttrs "">
<!ENTITY % fractionDigitsAttrs "">
<!ENTITY % lengthAttrs "">
<!ENTITY % minLengthAttrs "">
<!ENTITY % maxLengthAttrs "">
<!ENTITY % enumerationAttrs "">
<!ENTITY % whiteSpaceAttrs "">
<!ENTITY % patternAttrs "">
<!-- Define some entities for informative use as attribute
types -->
<!ENTITY % URIref "CDATA">
<!ENTITY % XPathExpr "CDATA">
<!ENTITY % QName "NMTOKEN">
<!ENTITY % QNames "NMTOKENS">
<!ENTITY % NCName "NMTOKEN">
<!ENTITY % nonNegativeInteger "NMTOKEN">
<!ENTITY % boolean "(true|false)">
<!ENTITY % simpleDerivationSet "CDATA">
<!--
#all or space-separated list drawn from derivationChoice
-->
<!--
Note that the use of 'facet' below is less restrictive
than is really intended: There should in fact be no
more than one of each of minInclusive, minExclusive,
maxInclusive, maxExclusive, totalDigits, fractionDigits,
length, maxLength, minLength within datatype,
and the min- and max- variants of Inclusive and Exclusive
are mutually exclusive. On the other hand, pattern and
enumeration may repeat.
-->
<!ENTITY % minBound "(%minInclusive; | %minExclusive;)">
<!ENTITY % maxBound "(%maxInclusive; | %maxExclusive;)">
<!ENTITY % bounds "%minBound; | %maxBound;">
<!ENTITY % numeric "%totalDigits; | %fractionDigits;">
<!ENTITY % ordered "%bounds; | %numeric;">
<!ENTITY % unordered
"%pattern; | %enumeration; | %whiteSpace; | %length; |
%maxLength; | %minLength;">
<!ENTITY % facet "%ordered; | %unordered;">
<!ENTITY % facetAttr
"value CDATA #REQUIRED
id ID #IMPLIED">
<!ENTITY % fixedAttr "fixed %boolean; #IMPLIED">
<!ENTITY % facetModel "(%annotation;)?">
<!ELEMENT %simpleType;
((%annotation;)?, (%restriction; | %list; | %union;))>
<!ATTLIST %simpleType;
name %NCName; #IMPLIED
final %simpleDerivationSet; #IMPLIED
id ID #IMPLIED
%simpleTypeAttrs;>
<!-- name is required at top level -->
<!ELEMENT %restriction; ((%annotation;)?,
(%restriction1; |
((%simpleType;)?,(%facet;)*)),
(%attrDecls;))>
<!ATTLIST %restriction;
base %QName; #IMPLIED
id ID #IMPLIED
%restrictionAttrs;>
<!--
base and simpleType child are mutually exclusive,
one is required.
restriction is shared between simpleType and
simpleContent and complexContent (in XMLSchema.xsd).
restriction1 is for the latter cases, when this
is restricting a complex type, as is attrDecls.
-->
<!ELEMENT %list; ((%annotation;)?,(%simpleType;)?)>
<!ATTLIST %list;
itemType %QName; #IMPLIED
id ID #IMPLIED
%listAttrs;>
<!--
itemType and simpleType child are mutually exclusive,
one is required
-->
<!ELEMENT %union; ((%annotation;)?,(%simpleType;)*)>
<!ATTLIST %union;
id ID #IMPLIED
memberTypes %QNames; #IMPLIED
%unionAttrs;>
<!--
At least one item in memberTypes or one simpleType
child is required
-->
<!ELEMENT %maxExclusive; %facetModel;>
<!ATTLIST %maxExclusive;
%facetAttr;
%fixedAttr;
%maxExclusiveAttrs;>
<!ELEMENT %minExclusive; %facetModel;>
<!ATTLIST %minExclusive;
%facetAttr;
%fixedAttr;
%minExclusiveAttrs;>
<!ELEMENT %maxInclusive; %facetModel;>
<!ATTLIST %maxInclusive;
%facetAttr;
%fixedAttr;
%maxInclusiveAttrs;>
<!ELEMENT %minInclusive; %facetModel;>
<!ATTLIST %minInclusive;
%facetAttr;
%fixedAttr;
%minInclusiveAttrs;>
<!ELEMENT %totalDigits; %facetModel;>
<!ATTLIST %totalDigits;
%facetAttr;
%fixedAttr;
%totalDigitsAttrs;>
<!ELEMENT %fractionDigits; %facetModel;>
<!ATTLIST %fractionDigits;
%facetAttr;
%fixedAttr;
%fractionDigitsAttrs;>
<!ELEMENT %length; %facetModel;>
<!ATTLIST %length;
%facetAttr;
%fixedAttr;
%lengthAttrs;>
<!ELEMENT %minLength; %facetModel;>
<!ATTLIST %minLength;
%facetAttr;
%fixedAttr;
%minLengthAttrs;>
<!ELEMENT %maxLength; %facetModel;>
<!ATTLIST %maxLength;
%facetAttr;
%fixedAttr;
%maxLengthAttrs;>
<!-- This one can be repeated -->
<!ELEMENT %enumeration; %facetModel;>
<!ATTLIST %enumeration;
%facetAttr;
%enumerationAttrs;>
<!ELEMENT %whiteSpace; %facetModel;>
<!ATTLIST %whiteSpace;
%facetAttr;
%fixedAttr;
%whiteSpaceAttrs;>
<!-- This one can be repeated -->
<!ELEMENT %pattern; %facetModel;>
<!ATTLIST %pattern;
%facetAttr;
%patternAttrs;>

View File

@ -0,0 +1,3 @@
<!ENTITY include "include">

View File

@ -0,0 +1,9 @@
<?xml version="1.1"?>
<!DOCTYPE catalogtest PUBLIC "-//OPENJDK//XML CATALOG DTD//1.0"
"http://openjdk.java.net/xml/catalog/dtd/system.dtd">
<test:root xmlns:test="test"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="test pathto/val_test.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<child xsi:type="xsd:string">has a &system; entry</child>
</test:root>

View File

@ -0,0 +1,16 @@
<?xml version="1.1"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="test">
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="child" type="xsd:anyType"/>
</xsd:sequence>
</xsd:complexType>
<xsd:key name="key1">
<xsd:selector xpath="."/>
<xsd:field xpath="child"/>
</xsd:key>
</xsd:element>
</xsd:schema>

View File

@ -0,0 +1,287 @@
<?xml version='1.0'?>
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns ="http://www.w3.org/1999/xhtml"
xml:lang="en">
<xs:annotation>
<xs:documentation>
<div>
<h1>About the XML namespace</h1>
<div class="bodytext">
<p>
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
</p>
<p>
See <a href="http://www.w3.org/XML/1998/namespace.html">
http://www.w3.org/XML/1998/namespace.html</a> and
<a href="http://www.w3.org/TR/REC-xml">
http://www.w3.org/TR/REC-xml</a> for information
about this namespace.
</p>
<p>
Note that local names in this namespace are intended to be
defined only by the World Wide Web Consortium or its subgroups.
The names currently defined in this namespace are listed below.
They should not be used with conflicting semantics by any Working
Group, specification, or document instance.
</p>
<p>
See further below in this document for more information about <a
href="#usage">how to refer to this schema document from your own
XSD schema documents</a> and about <a href="#nsversioning">the
namespace-versioning policy governing this schema document</a>.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>
<div>
<h3>lang (as an attribute name)</h3>
<p>
denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.</p>
</div>
<div>
<h4>Notes</h4>
<p>
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility.
</p>
<p>
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
and the IANA language subtag registry at
<a href="http://www.iana.org/assignments/language-subtag-registry">
http://www.iana.org/assignments/language-subtag-registry</a>
for further information.
</p>
<p>
The union allows for the 'un-declaration' of xml:lang with
the empty string.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="space">
<xs:annotation>
<xs:documentation>
<div>
<h3>space (as an attribute name)</h3>
<p>
denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
<xs:documentation>
<div>
<h3>base (as an attribute name)</h3>
<p>
denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>
<div>
<h3>id (as an attribute name)</h3>
<p>
denotes an attribute whose value
should be interpreted as if declared to be of type ID.
This name is reserved by virtue of its definition in the
xml:id specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
<xs:attribute ref="xml:id"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
<div>
<h3>Father (in any context at all)</h3>
<div class="bodytext">
<p>
denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
</p>
<blockquote>
<p>
In appreciation for his vision, leadership and
dedication the W3C XML Plenary on this 10th day of
February, 2000, reserves for Jon Bosak in perpetuity
the XML name "xml:Father".
</p>
</blockquote>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div xml:id="usage" id="usage">
<h2><a name="usage">About this schema document</a></h2>
<div class="bodytext">
<p>
This schema defines attributes and an attribute group suitable
for use by schemas wishing to allow <code>xml:base</code>,
<code>xml:lang</code>, <code>xml:space</code> or
<code>xml:id</code> attributes on elements they define.
</p>
<p>
To enable this, such a schema must import this schema for
the XML namespace, e.g. as follows:
</p>
<pre>
&lt;schema . . .>
. . .
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
</pre>
<p>
or
</p>
<pre>
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
</pre>
<p>
Subsequently, qualified reference to any of the attributes or the
group defined below will have the desired effect, e.g.
</p>
<pre>
&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>
</pre>
<p>
will define a type which will schema-validate an instance element
with any of those attributes.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div id="nsversioning" xml:id="nsversioning">
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
<div class="bodytext">
<p>
In keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a>.
</p>
<p>
At the date of issue it can also be found at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd</a>.
</p>
<p>
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML
Schema itself, or with the XML namespace itself. In other words,
if the XML Schema or XML namespaces change, the version of this
document at <a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd
</a>
will change accordingly; the version at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
will not change.
</p>
<p>
Previous dated (and unchanging) versions of this schema
document are at:
</p>
<ul>
<li><a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a></li>
<li><a href="http://www.w3.org/2007/08/xml.xsd">
http://www.w3.org/2007/08/xml.xsd</a></li>
<li><a href="http://www.w3.org/2004/10/xml.xsd">
http://www.w3.org/2004/10/xml.xsd</a></li>
<li><a href="http://www.w3.org/2001/03/xml.xsd">
http://www.w3.org/2001/03/xml.xsd</a></li>
</ul>
</div>
</div>
</xs:documentation>
</xs:annotation>
</xs:schema>

View File

@ -38,8 +38,9 @@ import org.xml.sax.InputSource;
/*
* @test
* @modules javax.xml/com.sun.org.apache.xerces.internal.jaxp
* @bug 8144593
* @key intermittent
* @modules javax.xml/com.sun.org.apache.xerces.internal.jaxp
* @summary Check that warnings about unsupported properties from SAX
* parsers are suppressed during the xml validation process.
*/

View File

@ -62,7 +62,7 @@ import org.xml.sax.helpers.AttributesImpl;
/*
* @summary Transformer Tests
* @bug 6272879 6305029 6505031 8150704
* @bug 6272879 6305029 6505031 8150704 8162598
*/
public class TransformerTest {
private Transformer createTransformer() throws TransformerException {
@ -111,6 +111,41 @@ public class TransformerTest {
}
}
/**
* Utility method for testBug8162598().
* Provides a convenient way to check/assert the expected namespaces
* of a Node and its siblings.
*
* @param test
* The node to check
* @param nstest
* Expected namespace of the node
* @param nsb
* Expected namespace of the first sibling
* @param nsc
* Expected namespace of the first sibling of the first sibling
*/
private void checkNodeNS8162598(Node test, String nstest, String nsb, String nsc) {
String testNodeName = test.getNodeName();
if (nstest == null) {
Assert.assertNull(test.getNamespaceURI(), "unexpected namespace for " + testNodeName);
} else {
Assert.assertEquals(test.getNamespaceURI(), nstest, "unexpected namespace for " + testNodeName);
}
Node b = test.getChildNodes().item(0);
if (nsb == null) {
Assert.assertNull(b.getNamespaceURI(), "unexpected namespace for " + testNodeName + "->b");
} else {
Assert.assertEquals(b.getNamespaceURI(), nsb, "unexpected namespace for " + testNodeName + "->b");
}
Node c = b.getChildNodes().item(0);
if (nsc == null) {
Assert.assertNull(c.getNamespaceURI(), "unexpected namespace for " + testNodeName + "->b->c");
} else {
Assert.assertEquals(c.getNamespaceURI(), nsc, "unexpected namespace for " + testNodeName + "->b->c");
}
}
private class XMLReaderFor6305029 implements XMLReader {
private static final String NAMESPACES = "http://xml.org/sax/features/namespaces";
private static final String NAMESPACE_PREFIXES = "http://xml.org/sax/features/namespace-prefixes";
@ -249,22 +284,19 @@ public class TransformerTest {
" </test>" + LINE_SEPARATOR +
"</XMLUtils>";
Document document;
Node node;
System.out.println("Stylesheet:");
System.out.println("==================================");
System.out.println("=============================");
System.out.println(xsl);
System.out.println();
System.out.println("Source file before transformation:");
System.out.println("==================================");
System.out.println("Source before transformation:");
System.out.println("=============================");
System.out.println(sourceXml);
System.out.println();
System.out.println("Source file after transformation:");
System.out.println("=================================");
document = transformInputStreamToDocument(createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
System.out.println("Result after transformation:");
System.out.println("============================");
Document document = transformInputStreamToDocument(createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
new ByteArrayInputStream(sourceXml.getBytes()));
OutputFormat format = new OutputFormat();
format.setIndenting(true);
@ -274,9 +306,8 @@ public class TransformerTest {
System.out.println("Node content for element valeur2:");
System.out.println("=================================");
NodeList nodes = document.getElementsByTagName("valeur2");
nodes = document.getElementsByTagName("valeur2");
for (int i = 0; i < nodes.getLength(); i++) {
node = nodes.item(i);
Node node = nodes.item(i);
System.out.println(" Node value: " + node.getFirstChild().getNodeValue());
System.out.println(" Node attribute: " + node.getAttributes().item(0).getNodeValue());
@ -341,4 +372,62 @@ public class TransformerTest {
Assert.assertEquals(resultstring, reference, "Output of transformation of Bug8150704-2.xml does not match reference");
System.out.println("Passed.");
}
/*
* @bug 8162598
* @summary Test XSLTC handling of namespaces, especially empty namespace definitions to reset the
* default namespace
*/
@Test
public final void testBug8162598() throws IOException, TransformerException {
final String LINE_SEPARATOR = System.getProperty("line.separator");
final String xsl =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + LINE_SEPARATOR +
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">" + LINE_SEPARATOR +
" <xsl:template match=\"/\">" + LINE_SEPARATOR +
" <root xmlns=\"ns1\">" + LINE_SEPARATOR +
" <xsl:call-template name=\"transform\"/>" + LINE_SEPARATOR +
" </root>" + LINE_SEPARATOR +
" </xsl:template>" + LINE_SEPARATOR +
" <xsl:template name=\"transform\">" + LINE_SEPARATOR +
" <test1 xmlns=\"ns2\"><b xmlns=\"ns2\"><c xmlns=\"\"></c></b></test1>" + LINE_SEPARATOR +
" <test2 xmlns=\"ns1\"><b xmlns=\"ns2\"><c xmlns=\"\"></c></b></test2>" + LINE_SEPARATOR +
" <test3><b><c xmlns=\"\"></c></b></test3>" + LINE_SEPARATOR +
" <test4 xmlns=\"\"><b><c xmlns=\"\"></c></b></test4>" + LINE_SEPARATOR +
" <test5 xmlns=\"ns1\"><b><c xmlns=\"\"></c></b></test5>" + LINE_SEPARATOR +
" <test6 xmlns=\"\"/>" + LINE_SEPARATOR +
" </xsl:template>" + LINE_SEPARATOR +
"</xsl:stylesheet>";
final String sourceXml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><aaa></aaa>" + LINE_SEPARATOR;
System.out.println("Stylesheet:");
System.out.println("=============================");
System.out.println(xsl);
System.out.println();
System.out.println("Source before transformation:");
System.out.println("=============================");
System.out.println(sourceXml);
System.out.println();
System.out.println("Result after transformation:");
System.out.println("============================");
Document document = transformInputStreamToDocument(
createTransformerFromInputstream(new ByteArrayInputStream(xsl.getBytes())),
new ByteArrayInputStream(sourceXml.getBytes()));
OutputFormat format = new OutputFormat();
format.setIndenting(true);
new XMLSerializer(System.out, format).serialize(document);
System.out.println();
checkNodeNS8162598(document.getElementsByTagName("test1").item(0), "ns2", "ns2", null);
checkNodeNS8162598(document.getElementsByTagName("test2").item(0), "ns1", "ns2", null);
checkNodeNS8162598(document.getElementsByTagName("test3").item(0), null, null, null);
checkNodeNS8162598(document.getElementsByTagName("test4").item(0), null, null, null);
checkNodeNS8162598(document.getElementsByTagName("test5").item(0), "ns1", "ns1", null);
Assert.assertNull(document.getElementsByTagName("test6").item(0).getNamespaceURI(), "unexpected namespace for test6");
}
}

View File

@ -374,3 +374,4 @@ c42decd28bbfa817347112ed6053b5fbd30517a2 jdk-9+123
264a44128cd6286e598d5a849ceeb613c06269d0 jdk-9+126
06d706c70634775418dc79a2671780ba1c624fd2 jdk-9+127
fe4e11bd2423635dc0f5f5cb9a64eb2f2cce7f4c jdk-9+128
46a02f57218e4a8c334dbccf656fb048f823f163 jdk-9+129

View File

@ -371,3 +371,4 @@ c40c8739bcdc88892ff58ebee3fd8a3f287be94d jdk-9+123
6fda66a5bdf2da8994032b9da2078a4137f4d954 jdk-9+126
7a97b89ba83077ca62e4aa5a05437adc8f315343 jdk-9+127
9446c534f0222b4eecfd9d9e25ab37c4fd4400a5 jdk-9+128
47699aa2e69ec2702542dc73eb01de3bfb61aea0 jdk-9+129

View File

@ -166,18 +166,7 @@ TARGETS += $(JVMCFG)
POLICY_SRC := $(JDK_TOPDIR)/src/java.base/share/conf/security/java.policy
POLICY_DST := $(CONF_DST_DIR)/security/java.policy
POLICY_SRC_LIST :=
ifeq ($(OPENJDK_TARGET_OS), windows)
POLICY_SRC_LIST += $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/conf/security/java.policy
endif
# Allow imported modules to modify the java.policy
ifneq ($(IMPORT_MODULES_CONF), )
POLICY_SRC_LIST += $(wildcard $(IMPORT_MODULES_CONF)/java.base/security/java.policy.extra)
endif
POLICY_SRC_LIST += $(POLICY_SRC)
POLICY_SRC_LIST := $(POLICY_SRC)
$(POLICY_DST): $(POLICY_SRC_LIST)
$(MKDIR) -p $(@D)
@ -189,6 +178,30 @@ TARGETS += $(POLICY_DST)
################################################################################
DEF_POLICY_SRC := $(JDK_TOPDIR)/src/java.base/share/lib/security/default.policy
DEF_POLICY_DST := $(LIB_DST_DIR)/security/default.policy
DEF_POLICY_SRC_LIST := $(DEF_POLICY_SRC)
ifeq ($(OPENJDK_TARGET_OS), windows)
DEF_POLICY_SRC_LIST += $(JDK_TOPDIR)/src/java.base/$(OPENJDK_TARGET_OS)/lib/security/default.policy
endif
# Allow imported modules to modify the java.policy
ifneq ($(IMPORT_MODULES_CONF), )
DEF_POLICY_SRC_LIST += $(wildcard $(IMPORT_MODULES_CONF)/java.base/security/java.policy.extra)
endif
$(DEF_POLICY_DST): $(DEF_POLICY_SRC_LIST)
$(MKDIR) -p $(@D)
$(RM) $@ $@.tmp
$(foreach f,$(DEF_POLICY_SRC_LIST),$(CAT) $(f) >> $@.tmp;)
$(MV) $@.tmp $@
TARGETS += $(DEF_POLICY_DST)
################################################################################
ifeq ($(CACERTS_FILE), )
CACERTS_FILE := $(JDK_TOPDIR)/src/java.base/share/conf/security/cacerts
endif

View File

@ -21,4 +21,4 @@
# or visit www.oracle.com if you need additional information or have any
# questions.
#
tzdata2016d
tzdata2016f

View File

@ -366,6 +366,12 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
# decision to abandon DST permanently. See Ahram Online 2015-04-24.
# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx
# From Steffen Thorsen (2016-04-29):
# Egypt will have DST from July 7 until the end of October....
# http://english.ahram.org.eg/NewsContentP/1/204655/Egypt/Daylight-savings-time-returning-to-Egypt-on--July.aspx
# From Mina Samuel (2016-07-04):
# Egyptian government took the decision to cancel the DST,
Rule Egypt 2008 only - Aug lastThu 24:00 0 -
Rule Egypt 2009 only - Aug 20 24:00 0 -
Rule Egypt 2010 only - Aug 10 24:00 0 -
@ -881,11 +887,11 @@ Rule Morocco 2009 only - Aug 21 0:00 0 -
Rule Morocco 2010 only - May 2 0:00 1:00 S
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
Rule Morocco 2011 only - Jul 31 0 0 -
Rule Morocco 2011 only - Jul 31 0:00 0 -
Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2012 only - Jul 20 3:00 0 -
Rule Morocco 2012 only - Aug 20 2:00 1:00 S
Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2013 only - Jul 7 3:00 0 -
Rule Morocco 2013 only - Aug 10 2:00 1:00 S
Rule Morocco 2013 max - Oct lastSun 3:00 0 -

View File

@ -36,7 +36,7 @@
#
# Except for the French entries,
# I made up all time zone abbreviations mentioned here; corrections welcome!
# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
@ -90,22 +90,22 @@
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Casey 0 - zzz 1969
Zone Antarctica/Casey 0 - -00 1969
8:00 - AWST 2009 Oct 18 2:00
# Australian Western Std Time
11:00 - CAST 2010 Mar 5 2:00 # Casey Time
8:00 - AWST 2011 Oct 28 2:00
11:00 - CAST 2012 Feb 21 17:00u
8:00 - AWST
Zone Antarctica/Davis 0 - zzz 1957 Jan 13
Zone Antarctica/Davis 0 - -00 1957 Jan 13
7:00 - DAVT 1964 Nov # Davis Time
0 - zzz 1969 Feb
0 - -00 1969 Feb
7:00 - DAVT 2009 Oct 18 2:00
5:00 - DAVT 2010 Mar 10 20:00u
7:00 - DAVT 2011 Oct 28 2:00
5:00 - DAVT 2012 Feb 21 20:00u
7:00 - DAVT
Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
Zone Antarctica/Mawson 0 - -00 1954 Feb 13
6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
5:00 - MAWT
# References:
@ -160,7 +160,7 @@ Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
# fishing stations operated variously 1819/1931
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
5:00 - TFT # ISO code TF Time
#
# year-round base in the main continent
@ -171,9 +171,9 @@ Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
# It was destroyed by fire on 1952-01-14.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/DumontDUrville 0 - zzz 1947
Zone Antarctica/DumontDUrville 0 - -00 1947
10:00 - PMT 1952 Jan 14 # Port-Martin Time
0 - zzz 1956 Nov
0 - -00 1956 Nov
10:00 - DDUT # Dumont-d'Urville Time
# France & Italy - year-round base
@ -199,7 +199,7 @@ Zone Antarctica/DumontDUrville 0 - zzz 1947
# was established on 1957-01-29. Since Syowa station is still the main
# station of Japan, it's appropriate for the principal location.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
Zone Antarctica/Syowa 0 - -00 1957 Jan 29
3:00 - SYOT # Syowa Time
# See:
# NIPR Antarctic Research Activities (1999-08-17)
@ -249,7 +249,7 @@ Rule Troll 2005 max - Mar lastSun 1:00u 2:00 CEST
# Remove the following line when uncommenting the above '#Rule' lines.
Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Troll 0 - zzz 2005 Feb 12
Zone Antarctica/Troll 0 - -00 2005 Feb 12
0:00 Troll %s
# Poland - year-round base
@ -290,7 +290,7 @@ Zone Antarctica/Troll 0 - zzz 2005 Feb 12
# happened to be during their visit. So we still don't really know what time
# it is at Vostok. But we'll guess UTC+6.
#
Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
Zone Antarctica/Vostok 0 - -00 1957 Dec 16
6:00 - VOST # Vostok time
# S Africa - year-round bases
@ -323,7 +323,7 @@ Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
Zone Antarctica/Rothera 0 - -00 1976 Dec 1
-3:00 - ROTT # Rothera time
# Uruguay - year round base

View File

@ -169,7 +169,7 @@ Zone Asia/Baku 3:19:24 - LMT 1924 May 2
3:00 - BAKT 1957 Mar # Baku Time
4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
3:00 1:00 BAKST 1991 Aug 30 # independence
3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
3:00 RussiaAsia AZ%sT 1992 Sep lastSun 2:00s
4:00 - AZT 1996 # Azerbaijan Time
4:00 EUAsia AZ%sT 1997
4:00 Azer AZ%sT

View File

@ -266,11 +266,11 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
# will produce a binary file with an [A]EST-type as the first 32-bit type;
# this is required for correct handling of times before 1916 by
# pre-2013 versions of localtime.
Zone Antarctica/Macquarie 0 - zzz 1899 Nov
Zone Antarctica/Macquarie 0 - -00 1899 Nov
10:00 - AEST 1916 Oct 1 2:00
10:00 1:00 AEDT 1917 Feb
10:00 Aus AE%sT 1919 Apr 1 0:00s
0 - zzz 1948 Mar 25
0 - -00 1948 Mar 25
10:00 Aus AE%sT 1967
10:00 AT AE%sT 2010 Apr 4 3:00
11:00 - MIST # Macquarie I Standard Time

View File

@ -778,6 +778,14 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
1:00 EU CE%sT
# Belarus
#
# From Stepan Golosunov (2016-07-02):
# http://www.lawbelarus.com/repub/sub30/texf9611.htm
# (Act of the Cabinet of Ministers of the Republic of Belarus from
# 1992-03-25 No. 157) ... says clocks were to be moved forward at 2:00
# on last Sunday of March and backward at 3:00 on last Sunday of September
# (the same as previous USSR and contemporary Russian regulations).
#
# From Yauhen Kharuzhy (2011-09-16):
# By latest Belarus government act Europe/Minsk timezone was changed to
# GMT+3 without DST (was GMT+2 with DST).
@ -801,9 +809,6 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
1:00 C-Eur CE%sT 1944 Jul 3
3:00 Russia MSK/MSD 1990
3:00 - MSK 1991 Mar 31 2:00s
2:00 1:00 EEST 1991 Sep 29 2:00s
2:00 - EET 1992 Mar 29 0:00s
2:00 1:00 EEST 1992 Sep 27 0:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
3:00 - FET 2014 Oct 26 1:00s
3:00 - MSK
@ -2746,14 +2751,22 @@ Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
# Asia/Novosibirsk covers:
# 54 RU-NVS Novosibirsk Oblast
# From Stepan Golosunov (2016-05-30):
# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
# moves Novosibirsk oblast from UTC+6 to UTC+7.
# From Stepan Golosunov (2016-07-04):
# The law was signed yesterday and published today on
# http://publication.pravo.gov.ru/Document/View/0001201607040064
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
7:00 Russia NOV%sT 1991 Mar 31 2:00s
6:00 Russia NOV%sT 1992 Jan 19 2:00s
7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
6:00 Russia NOV%sT 2011 Mar 27 2:00s
7:00 - NOVT 2014 Oct 26 2:00s
6:00 - NOVT
6:00 - +06 1930 Jun 21
7:00 Russia +07/+08 1991 Mar 31 2:00s
6:00 Russia +06/+07 1992 Jan 19 2:00s
7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
6:00 Russia +06/+07 2011 Mar 27 2:00s
7:00 - +07 2014 Oct 26 2:00s
6:00 - +06 2016 Jul 24 2:00s
7:00 - +07
# From Paul Eggert (2016-03-18):
# Asia/Tomsk covers:
@ -2794,6 +2807,9 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
# approved by the Federation Council on 2016-04-20, signed by the President and
# published as a law around 2016-04-26.
# From Matt Johnson (2016-04-26):
# http://publication.pravo.gov.ru/Document/View/0001201604260048
Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
6:00 - +06 1930 Jun 21
7:00 Russia +07/+08 1991 Mar 31 2:00s
@ -2833,14 +2849,12 @@ Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
# realigning itself with KRAT.
Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
7:00 Russia KRA%sT 1991 Mar 31 2:00s
6:00 Russia KRA%sT 1992 Jan 19 2:00s
7:00 Russia KRA%sT 2010 Mar 28 2:00s
6:00 Russia NOV%sT 2011 Mar 27 2:00s # Novosibirsk
7:00 - NOVT 2014 Oct 26 2:00s
7:00 - KRAT # Krasnoyarsk Time
6:00 - +06 1930 Jun 21
7:00 Russia +07/+08 1991 Mar 31 2:00s
6:00 Russia +06/+07 1992 Jan 19 2:00s
7:00 Russia +07/+08 2010 Mar 28 2:00s
6:00 Russia +06/+07 2011 Mar 27 2:00s
7:00 - +07
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Krasnoyarsk covers...

View File

@ -2214,39 +2214,39 @@ Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# aka Panniqtuuq
Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
Zone America/Pangnirtung 0 - -00 1921 # trading post est.
-4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
-5:00 Canada E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# formerly Frobisher Bay
Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
Zone America/Iqaluit 0 - -00 1942 Aug # Frobisher Bay est.
-5:00 NT_YK E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
Zone America/Resolute 0 - -00 1947 Aug 31 # Resolute founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT 2006 Oct 29 2:00
-5:00 - EST 2007 Mar 11 3:00
-6:00 Canada C%sT
# aka Kangiqiniq
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
Zone America/Rankin_Inlet 0 - -00 1957 # Rankin Inlet founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT
# aka Iqaluktuuttiaq
Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
Zone America/Cambridge_Bay 0 - -00 1920 # trading post est.?
-7:00 NT_YK M%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 - EST 2000 Nov 5 0:00
-6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
Zone America/Yellowknife 0 - -00 1935 # Yellowknife founded?
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
Zone America/Inuvik 0 - -00 1953 # Inuvik founded
-8:00 NT_YK P%sT 1979 Apr lastSun 2:00
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT

View File

@ -1332,7 +1332,7 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
# Palmer used to be supplied from Argentina.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Antarctica/Palmer 0 - zzz 1965
Zone Antarctica/Palmer 0 - -00 1965
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1982 May
-4:00 Chile CL%sT
@ -1782,16 +1782,16 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
# https://actualidad.rt.com/actualidad/204758-venezuela-modificar-huso-horario-sequia-elnino
#
# From Paul Eggert (2016-04-15):
# Clocks advance 30 minutes on 2016-05-01 at 02:30. See:
# Barboza AD. Huso horario en Venezuela volverá a 4 horas menos con
# respecto al "Greenwich". Panorama 2016-04-15 12:20 -0430.
# http://www.panorama.com.ve/ciudad/Huso-horario-en-Venezuela-volvera-a-4-horas-menos-con-respecto-al-Greenwich-20160415-0032.html
#
# Clocks advance 30 minutes on 2016-05-01 at 02:30....
# "'Venezuela's new time-zone: hours without light, hours without water,
# hours of presidential broadcasts, hours of lines," quipped comedian
# Jean Mary Curro ...". See: Cawthorne A, Kai D. Venezuela scraps
# hours of presidential broadcasts, hours of lines,' quipped comedian
# Jean Mary Curró ...". See: Cawthorne A, Kai D. Venezuela scraps
# half-hour time difference set by Chavez. Reuters 2016-04-15 14:50 -0400
# http://www.reuters.com/article/us-venezuela-timezone-idUSKCN0XC2BE
#
# From Matt Johnson (2016-04-20):
# ... published in the official Gazette [2016-04-18], here:
# http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890

View File

@ -917,7 +917,7 @@ ifndef BUILD_HEADLESS_ONLY
LIBSPLASHSCREEN_LDFLAGS := -delayload:user32.dll
LIBSPLASHSCREEN_LIBS += kernel32.lib user32.lib gdi32.lib delayimp.lib $(WIN_JAVA_LIB) jvm.lib
else
LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread
LIBSPLASHSCREEN_LIBS += $(X_LIBS) -lX11 -lXext $(LIBM) -lpthread -ldl
endif
$(eval $(call SetupNativeCompilation,BUILD_LIBSPLASHSCREEN, \

Some files were not shown because too many files have changed in this diff Show More