Merge
This commit is contained in:
commit
8103ede959
1
.hgtags
1
.hgtags
@ -371,3 +371,4 @@ d53037a90c441cb528dc41c30827985de0e67c62 jdk-9+123
|
||||
03e7b2c5ae345be3caf981d76ceb3efe5ff447f8 jdk-9+126
|
||||
8e45018bde9de4ad15b972ae62874bba52dba2d5 jdk-9+127
|
||||
5bf88dce615f6804f9e101a96ffa7c9dfb4fbbbe jdk-9+128
|
||||
e8373543a3f0f60589b7d72b1f9b172721124caf jdk-9+129
|
||||
|
@ -371,3 +371,4 @@ f80c841ae2545eaf9acd2724bccc305d98cefbe2 jdk-9+124
|
||||
3a58466296d36944454756ef01e7513ac5e14a16 jdk-9+126
|
||||
8fa686245bd2a072ece3392743460030f0854520 jdk-9+127
|
||||
b30ae794d974d7dd3eb4e84203f70021823fa6c6 jdk-9+128
|
||||
f5902d3841b82cac6e7716a20c24e8e916fb14a8 jdk-9+129
|
||||
|
@ -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@
|
||||
|
@ -371,3 +371,4 @@ e33a34cc551907617d8129c4faaf1a5a7e61d21c jdk-9+123
|
||||
c7f5ba08fcd4b8416e62c21229f9a07c95498919 jdk-9+126
|
||||
8fab452b6f4710762ba1d8e55fd62db00b1355fe jdk-9+127
|
||||
1f093d3f8cd99cd37c3b0af4cf5c3bffaa9c8b98 jdk-9+128
|
||||
c3e83ccab3bb1733ae903d681879a33f85ed465c jdk-9+129
|
||||
|
@ -531,3 +531,4 @@ bb640b49741af3f57f9994129934c46fc173219f jdk-9+125
|
||||
adc8c84b7cf8c540d920182f78a2bc982366432a jdk-9+126
|
||||
352357128f602dcf0426b1cbe011a4685a4d9f97 jdk-9+127
|
||||
22bf6db9767b1b3a1994cbf32eb3331f31ae2093 jdk-9+128
|
||||
e96b34b76d863ed1fa04e0eeb3f297ac17b490fd jdk-9+129
|
||||
|
@ -371,3 +371,4 @@ e04a15153cc293f05fcd60bc98236f50e16af46a jdk-9+124
|
||||
15722f71281f034bc696d8b96136da2ef34da44f jdk-9+126
|
||||
bdc3c0b737efbf899709eb3121ce760dcfb51151 jdk-9+127
|
||||
8a7681a9d70640ac7fbf05c28f53c1d51d8d00a1 jdk-9+128
|
||||
74241304e87b0d463391a8ecab40979b5af86dc2 jdk-9+129
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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()));
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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)) ;
|
||||
}
|
||||
|
@ -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 = {'<','/'};
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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)
|
||||
|
||||
//
|
||||
|
@ -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)
|
||||
|
||||
//
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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 {
|
||||
|
@ -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) &&
|
||||
|
@ -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.
|
||||
*
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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";
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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
|
||||
|
321
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport.java
Normal file
321
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport.java
Normal 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"}
|
||||
};
|
||||
}
|
||||
}
|
42
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport.xml
Normal file
42
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport.xml
Normal 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>
|
259
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport1.java
Normal file
259
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport1.java
Normal 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"},
|
||||
};
|
||||
}
|
||||
|
||||
}
|
262
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport2.java
Normal file
262
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport2.java
Normal 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"},
|
||||
};
|
||||
}
|
||||
}
|
273
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport3.java
Normal file
273
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport3.java
Normal 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"},
|
||||
};
|
||||
}
|
||||
}
|
260
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport4.java
Normal file
260
jaxp/test/javax/xml/jaxp/unittest/catalog/CatalogSupport4.java
Normal 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"},
|
||||
};
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||
|
||||
</catalog>
|
4
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc.xml
Normal file
4
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0"?>
|
||||
<root>
|
||||
<test></test>
|
||||
</root>
|
12
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc.xsl
Normal file
12
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc.xsl
Normal 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>
|
5
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc2.xml
Normal file
5
jaxp/test/javax/xml/jaxp/unittest/catalog/DocFunc2.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<reference>
|
||||
<test>Resolved by a resolver</test>
|
||||
</reference>
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<reference>
|
||||
<test>Resolved by a catalog</test>
|
||||
</reference>
|
4
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_red.dtd
Normal file
4
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_red.dtd
Normal file
@ -0,0 +1,4 @@
|
||||
<!--
|
||||
Comment in DTD
|
||||
|
||||
-->
|
18
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_simple.xml
Normal file
18
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_simple.xml
Normal 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>
|
@ -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>
|
10
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_test2.xml
Normal file
10
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_test2.xml
Normal 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 -->
|
||||
|
1
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_utf8.xml
Normal file
1
jaxp/test/javax/xml/jaxp/unittest/catalog/XI_utf8.xml
Normal file
@ -0,0 +1 @@
|
||||
trjsagdkasgdhasdgashgdhsadgashdg
|
@ -0,0 +1 @@
|
||||
usingCatalog
|
402
jaxp/test/javax/xml/jaxp/unittest/catalog/XMLSchema.dtd
Normal file
402
jaxp/test/javax/xml/jaxp/unittest/catalog/XMLSchema.dtd
Normal 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' >
|
92
jaxp/test/javax/xml/jaxp/unittest/catalog/XMLSchema.xsd
Normal file
92
jaxp/test/javax/xml/jaxp/unittest/catalog/XMLSchema.xsd
Normal 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 <documentation> 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
108
jaxp/test/javax/xml/jaxp/unittest/catalog/XSLDTD.dtd
Normal file
108
jaxp/test/javax/xml/jaxp/unittest/catalog/XSLDTD.dtd
Normal 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 " " >
|
||||
<!ENTITY iexcl "¡" >
|
||||
<!ENTITY cent "¢" >
|
||||
<!ENTITY pound "£" >
|
||||
<!ENTITY curren "¤" >
|
||||
<!ENTITY yen "¥" >
|
||||
<!ENTITY brvbar "¦" >
|
||||
<!ENTITY sect "§" >
|
||||
<!ENTITY uml "¨" >
|
||||
<!ENTITY copy "©" >
|
||||
<!ENTITY ordf "ª" >
|
||||
<!ENTITY laquo "«" >
|
||||
<!ENTITY not "¬" >
|
||||
<!ENTITY shy "­" >
|
||||
<!ENTITY reg "®" >
|
||||
<!ENTITY macr "¯" >
|
||||
<!ENTITY deg "°" >
|
||||
<!ENTITY plusmn "±" >
|
||||
<!ENTITY sup2 "²" >
|
||||
<!ENTITY sup3 "³" >
|
||||
<!ENTITY acute "´" >
|
||||
<!ENTITY micro "µ" >
|
||||
<!ENTITY para "¶" >
|
||||
<!ENTITY middot "·" >
|
||||
<!ENTITY cedil "¸" >
|
||||
<!ENTITY sup1 "¹" >
|
||||
<!ENTITY ordm "º" >
|
||||
<!ENTITY raquo "»" >
|
||||
<!ENTITY frac14 "¼" >
|
||||
<!ENTITY frac12 "½" >
|
||||
<!ENTITY frac34 "¾" >
|
||||
<!ENTITY iquest "¿" >
|
||||
<!ENTITY Agrave "À" >
|
||||
<!ENTITY Aacute "Á" >
|
||||
<!ENTITY Acirc "Â" >
|
||||
<!ENTITY Atilde "Ã" >
|
||||
<!ENTITY Auml "Ä" >
|
||||
<!ENTITY Aring "Å" >
|
||||
<!ENTITY AElig "Æ" >
|
||||
<!ENTITY Ccedil "Ç" >
|
||||
<!ENTITY Egrave "È" >
|
||||
<!ENTITY Eacute "É" >
|
||||
<!ENTITY Ecirc "Ê" >
|
||||
<!ENTITY Euml "Ë" >
|
||||
<!ENTITY Igrave "Ì" >
|
||||
<!ENTITY Iacute "Í" >
|
||||
<!ENTITY Icirc "Î" >
|
||||
<!ENTITY Iuml "Ï" >
|
||||
<!ENTITY ETH "Ð" >
|
||||
<!ENTITY Ntilde "Ñ" >
|
||||
<!ENTITY Ograve "Ò" >
|
||||
<!ENTITY Oacute "Ó" >
|
||||
<!ENTITY Ocirc "Ô" >
|
||||
<!ENTITY Otilde "Õ" >
|
||||
<!ENTITY Ouml "Ö" >
|
||||
<!ENTITY times "×" >
|
||||
<!ENTITY Oslash "Ø" >
|
||||
<!ENTITY Ugrave "Ù" >
|
||||
<!ENTITY Uacute "Ú" >
|
||||
<!ENTITY Ucirc "Û" >
|
||||
<!ENTITY Uuml "Ü" >
|
||||
<!ENTITY Yacute "Ý" >
|
||||
<!ENTITY THORN "Þ" >
|
||||
<!ENTITY szlig "ß" >
|
||||
<!ENTITY agrave "à" >
|
||||
<!ENTITY aacute "á" >
|
||||
<!ENTITY acirc "â" >
|
||||
<!ENTITY atilde "ã" >
|
||||
<!ENTITY auml "ä" >
|
||||
<!ENTITY aring "å" >
|
||||
<!ENTITY aelig "æ" >
|
||||
<!ENTITY ccedil "ç" >
|
||||
<!ENTITY egrave "è" >
|
||||
<!ENTITY eacute "é" >
|
||||
<!ENTITY ecirc "ê" >
|
||||
<!ENTITY euml "ë" >
|
||||
<!ENTITY igrave "ì" >
|
||||
<!ENTITY iacute "í" >
|
||||
<!ENTITY icirc "î" >
|
||||
<!ENTITY iuml "ï" >
|
||||
<!ENTITY eth "ð" >
|
||||
<!ENTITY ntilde "ñ" >
|
||||
<!ENTITY ograve "ò" >
|
||||
<!ENTITY oacute "ó" >
|
||||
<!ENTITY ocirc "ô" >
|
||||
<!ENTITY otilde "õ" >
|
||||
<!ENTITY ouml "ö" >
|
||||
<!ENTITY divide "÷" >
|
||||
<!ENTITY oslash "ø" >
|
||||
<!ENTITY ugrave "ù" >
|
||||
<!ENTITY uacute "ú" >
|
||||
<!ENTITY ucirc "û" >
|
||||
<!ENTITY uuml "ü" >
|
||||
<!ENTITY yacute "ý" >
|
||||
<!ENTITY thorn "þ" >
|
||||
<!ENTITY yuml "ÿ" >
|
7
jaxp/test/javax/xml/jaxp/unittest/catalog/XSLDTD.xml
Normal file
7
jaxp/test/javax/xml/jaxp/unittest/catalog/XSLDTD.xml
Normal 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
203
jaxp/test/javax/xml/jaxp/unittest/catalog/datatypes.dtd
Normal file
203
jaxp/test/javax/xml/jaxp/unittest/catalog/datatypes.dtd
Normal 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;>
|
3
jaxp/test/javax/xml/jaxp/unittest/catalog/include.dtd
Normal file
3
jaxp/test/javax/xml/jaxp/unittest/catalog/include.dtd
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
<!ENTITY include "include">
|
||||
|
9
jaxp/test/javax/xml/jaxp/unittest/catalog/val_test.xml
Normal file
9
jaxp/test/javax/xml/jaxp/unittest/catalog/val_test.xml
Normal 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>
|
16
jaxp/test/javax/xml/jaxp/unittest/catalog/val_test.xsd
Normal file
16
jaxp/test/javax/xml/jaxp/unittest/catalog/val_test.xsd
Normal 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>
|
287
jaxp/test/javax/xml/jaxp/unittest/catalog/xml.xsd
Normal file
287
jaxp/test/javax/xml/jaxp/unittest/catalog/xml.xsd
Normal 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>
|
||||
<schema . . .>
|
||||
. . .
|
||||
<import namespace="http://www.w3.org/XML/1998/namespace"
|
||||
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
|
||||
</pre>
|
||||
<p>
|
||||
or
|
||||
</p>
|
||||
<pre>
|
||||
<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>
|
||||
<type . . .>
|
||||
. . .
|
||||
<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>
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -374,3 +374,4 @@ c42decd28bbfa817347112ed6053b5fbd30517a2 jdk-9+123
|
||||
264a44128cd6286e598d5a849ceeb613c06269d0 jdk-9+126
|
||||
06d706c70634775418dc79a2671780ba1c624fd2 jdk-9+127
|
||||
fe4e11bd2423635dc0f5f5cb9a64eb2f2cce7f4c jdk-9+128
|
||||
46a02f57218e4a8c334dbccf656fb048f823f163 jdk-9+129
|
||||
|
@ -371,3 +371,4 @@ c40c8739bcdc88892ff58ebee3fd8a3f287be94d jdk-9+123
|
||||
6fda66a5bdf2da8994032b9da2078a4137f4d954 jdk-9+126
|
||||
7a97b89ba83077ca62e4aa5a05437adc8f315343 jdk-9+127
|
||||
9446c534f0222b4eecfd9d9e25ab37c4fd4400a5 jdk-9+128
|
||||
47699aa2e69ec2702542dc73eb01de3bfb61aea0 jdk-9+129
|
||||
|
@ -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
|
||||
|
@ -21,4 +21,4 @@
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
tzdata2016d
|
||||
tzdata2016f
|
||||
|
@ -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 -
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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...
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user