aboutsummaryrefslogtreecommitdiff
path: root/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java')
-rw-r--r--src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java1394
1 files changed, 0 insertions, 1394 deletions
diff --git a/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java b/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
deleted file mode 100644
index 3e3ec63..0000000
--- a/src/com/sun/org/apache/xerces/internal/impl/xs/XMLSchemaLoader.java
+++ /dev/null
@@ -1,1394 +0,0 @@
-/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.sun.org.apache.xerces.internal.impl.xs;
-
-import com.sun.org.apache.xerces.internal.dom.DOMErrorImpl;
-import com.sun.org.apache.xerces.internal.dom.DOMMessageFormatter;
-import com.sun.org.apache.xerces.internal.dom.DOMStringListImpl;
-import com.sun.org.apache.xerces.internal.impl.Constants;
-import com.sun.org.apache.xerces.internal.impl.XMLEntityManager;
-import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
-import com.sun.org.apache.xerces.internal.impl.dv.InvalidDatatypeValueException;
-import com.sun.org.apache.xerces.internal.impl.dv.SchemaDVFactory;
-import com.sun.org.apache.xerces.internal.impl.dv.xs.SchemaDVFactoryImpl;
-import com.sun.org.apache.xerces.internal.impl.xs.models.CMBuilder;
-import com.sun.org.apache.xerces.internal.impl.xs.models.CMNodeFactory;
-import com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler;
-import com.sun.org.apache.xerces.internal.util.DOMEntityResolverWrapper;
-import com.sun.org.apache.xerces.internal.util.DOMErrorHandlerWrapper;
-import com.sun.org.apache.xerces.internal.util.DefaultErrorHandler;
-import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings;
-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.util.XMLSymbols;
-import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
-import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
-import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager;
-import com.sun.org.apache.xerces.internal.xni.XNIException;
-import com.sun.org.apache.xerces.internal.xni.grammars.Grammar;
-import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarDescription;
-import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarLoader;
-import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;
-import com.sun.org.apache.xerces.internal.xni.grammars.XSGrammar;
-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 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.xs.LSInputList;
-import com.sun.org.apache.xerces.internal.xs.StringList;
-import com.sun.org.apache.xerces.internal.xs.XSLoader;
-import com.sun.org.apache.xerces.internal.xs.XSModel;
-import java.io.BufferedInputStream;
-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.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import javax.xml.XMLConstants;
-import org.w3c.dom.DOMConfiguration;
-import org.w3c.dom.DOMError;
-import org.w3c.dom.DOMErrorHandler;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.DOMStringList;
-import org.w3c.dom.ls.LSInput;
-import org.w3c.dom.ls.LSResourceResolver;
-import org.xml.sax.InputSource;
-
-/**
- * This class implements xni.grammars.XMLGrammarLoader.
- * It also serves as implementation of xs.XSLoader interface and DOMConfiguration interface.
- *
- * This class is designed to interact either with a proxy for a user application
- * which wants to preparse schemas, or with our own Schema validator.
- * It is hoped that none of these "external" classes will therefore need to communicate directly
- * with XSDHandler in future.
- * <p>This class only knows how to make XSDHandler do its thing.
- * The caller must ensure that all its properties (schemaLocation, JAXPSchemaSource
- * etc.) have been properly set.
- *
- * @xerces.internal
- *
- * @author Neil Graham, IBM
- * @version $Id: XMLSchemaLoader.java,v 1.10 2010-11-01 04:39:55 joehw Exp $
- */
-
-public class XMLSchemaLoader implements XMLGrammarLoader, XMLComponent,
-// XML Component API
-XSLoader, DOMConfiguration {
-
- // Feature identifiers:
-
- /** Feature identifier: schema full checking*/
- protected static final String SCHEMA_FULL_CHECKING =
- Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_FULL_CHECKING;
-
- /** Feature identifier: continue after fatal error. */
- protected static final String CONTINUE_AFTER_FATAL_ERROR =
- Constants.XERCES_FEATURE_PREFIX + Constants.CONTINUE_AFTER_FATAL_ERROR_FEATURE;
-
- /** Feature identifier: allow java encodings to be recognized when parsing schema docs. */
- protected static final String ALLOW_JAVA_ENCODINGS =
- Constants.XERCES_FEATURE_PREFIX + Constants.ALLOW_JAVA_ENCODINGS_FEATURE;
-
- /** Feature identifier: standard uri conformant feature. */
- protected static final String STANDARD_URI_CONFORMANT_FEATURE =
- Constants.XERCES_FEATURE_PREFIX + Constants.STANDARD_URI_CONFORMANT_FEATURE;
-
- /** Feature identifier: validate annotations. */
- protected static final String VALIDATE_ANNOTATIONS =
- Constants.XERCES_FEATURE_PREFIX + Constants.VALIDATE_ANNOTATIONS_FEATURE;
-
- /** Feature: disallow doctype*/
- protected static final String DISALLOW_DOCTYPE =
- Constants.XERCES_FEATURE_PREFIX + Constants.DISALLOW_DOCTYPE_DECL_FEATURE;
-
- /** Feature: generate synthetic annotations */
- protected static final String GENERATE_SYNTHETIC_ANNOTATIONS =
- Constants.XERCES_FEATURE_PREFIX + Constants.GENERATE_SYNTHETIC_ANNOTATIONS_FEATURE;
-
- /** Feature identifier: honour all schemaLocations */
- protected static final String HONOUR_ALL_SCHEMALOCATIONS =
- Constants.XERCES_FEATURE_PREFIX + Constants.HONOUR_ALL_SCHEMALOCATIONS_FEATURE;
-
- protected static final String AUGMENT_PSVI =
- Constants.XERCES_FEATURE_PREFIX + Constants.SCHEMA_AUGMENT_PSVI;
-
- protected static final String PARSER_SETTINGS =
- Constants.XERCES_FEATURE_PREFIX + Constants.PARSER_SETTINGS;
-
- /** Feature identifier: namespace growth */
- protected static final String NAMESPACE_GROWTH =
- Constants.XERCES_FEATURE_PREFIX + Constants.NAMESPACE_GROWTH_FEATURE;
-
- /** Feature identifier: tolerate duplicates */
- protected static final String TOLERATE_DUPLICATES =
- Constants.XERCES_FEATURE_PREFIX + Constants.TOLERATE_DUPLICATES_FEATURE;
-
- /** Property identifier: Schema DV Factory */
- protected static final String SCHEMA_DV_FACTORY =
- Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_DV_FACTORY_PROPERTY;
-
- protected static final String USE_SERVICE_MECHANISM = Constants.ORACLE_FEATURE_SERVICE_MECHANISM;
-
- // recognized features:
- private static final String[] RECOGNIZED_FEATURES = {
- SCHEMA_FULL_CHECKING,
- AUGMENT_PSVI,
- CONTINUE_AFTER_FATAL_ERROR,
- ALLOW_JAVA_ENCODINGS,
- STANDARD_URI_CONFORMANT_FEATURE,
- DISALLOW_DOCTYPE,
- GENERATE_SYNTHETIC_ANNOTATIONS,
- VALIDATE_ANNOTATIONS,
- HONOUR_ALL_SCHEMALOCATIONS,
- NAMESPACE_GROWTH,
- TOLERATE_DUPLICATES,
- USE_SERVICE_MECHANISM
- };
-
- // property identifiers
-
- /** Property identifier: symbol table. */
- public static final String SYMBOL_TABLE =
- Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY;
-
- /** Property identifier: error reporter. */
- public static final String ERROR_REPORTER =
- Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_REPORTER_PROPERTY;
-
- /** Property identifier: error handler. */
- protected static final String ERROR_HANDLER =
- Constants.XERCES_PROPERTY_PREFIX + Constants.ERROR_HANDLER_PROPERTY;
-
- /** Property identifier: entity resolver. */
- public static final String ENTITY_RESOLVER =
- Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_RESOLVER_PROPERTY;
-
- /** Property identifier: grammar pool. */
- public static final String XMLGRAMMAR_POOL =
- Constants.XERCES_PROPERTY_PREFIX + Constants.XMLGRAMMAR_POOL_PROPERTY;
-
- /** Property identifier: schema location. */
- protected static final String SCHEMA_LOCATION =
- Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_LOCATION;
-
- /** Property identifier: no namespace schema location. */
- protected static final String SCHEMA_NONS_LOCATION =
- Constants.XERCES_PROPERTY_PREFIX + Constants.SCHEMA_NONS_LOCATION;
-
- /** Property identifier: JAXP schema source. */
- protected static final String JAXP_SCHEMA_SOURCE =
- Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE;
-
- protected static final String SECURITY_MANAGER =
- Constants.XERCES_PROPERTY_PREFIX + Constants.SECURITY_MANAGER_PROPERTY;
-
- /** Property identifier: locale. */
- protected static final String LOCALE =
- Constants.XERCES_PROPERTY_PREFIX + Constants.LOCALE_PROPERTY;
-
- protected static final String ENTITY_MANAGER =
- Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_MANAGER_PROPERTY;
-
- /** Property identifier: Security property manager. */
- private static final String XML_SECURITY_PROPERTY_MANAGER =
- Constants.XML_SECURITY_PROPERTY_MANAGER;
-
- /** Property identifier: access to external dtd */
- public static final String ACCESS_EXTERNAL_DTD = XMLConstants.ACCESS_EXTERNAL_DTD;
-
- /** Property identifier: access to external schema */
- public static final String ACCESS_EXTERNAL_SCHEMA = XMLConstants.ACCESS_EXTERNAL_SCHEMA;
-
- // recognized properties
- private static final String [] RECOGNIZED_PROPERTIES = {
- ENTITY_MANAGER,
- SYMBOL_TABLE,
- ERROR_REPORTER,
- ERROR_HANDLER,
- ENTITY_RESOLVER,
- XMLGRAMMAR_POOL,
- SCHEMA_LOCATION,
- SCHEMA_NONS_LOCATION,
- JAXP_SCHEMA_SOURCE,
- SECURITY_MANAGER,
- LOCALE,
- SCHEMA_DV_FACTORY,
- XML_SECURITY_PROPERTY_MANAGER
- };
-
- // Data
-
- // features and properties
- private ParserConfigurationSettings fLoaderConfig = new ParserConfigurationSettings();
- private SymbolTable fSymbolTable = null;
- private XMLErrorReporter fErrorReporter = new XMLErrorReporter ();
- private XMLEntityManager fEntityManager = null;
- private XMLEntityResolver fUserEntityResolver = null;
- private XMLGrammarPool fGrammarPool = null;
- private String fExternalSchemas = null;
- private String fExternalNoNSSchema = null;
- // JAXP property: schema source
- private Object fJAXPSource = null;
- // is Schema Full Checking enabled
- private boolean fIsCheckedFully = false;
- // boolean that tells whether we've tested the JAXP property.
- private boolean fJAXPProcessed = false;
- // if features/properties has not been changed, the value of this attribute is "false"
- private boolean fSettingsChanged = true;
-
- // xml schema parsing
- private XSDHandler fSchemaHandler;
- private XSGrammarBucket fGrammarBucket;
- private XSDeclarationPool fDeclPool = null;
- private SubstitutionGroupHandler fSubGroupHandler;
- private final CMNodeFactory fNodeFactory = new CMNodeFactory(); //component mgr will be set later
- private CMBuilder fCMBuilder;
- private XSDDescription fXSDDescription = new XSDDescription();
- private String faccessExternalSchema = Constants.EXTERNAL_ACCESS_DEFAULT;
-
- private Map fJAXPCache;
- private Locale fLocale = Locale.getDefault();
-
- // XSLoader attributes
- private DOMStringList fRecognizedParameters = null;
-
- /** DOM L3 error handler */
- private DOMErrorHandlerWrapper fErrorHandler = null;
-
- /** DOM L3 resource resolver */
- private DOMEntityResolverWrapper fResourceResolver = null;
-
- // default constructor. Create objects we absolutely need:
- public XMLSchemaLoader() {
- this( new SymbolTable(), null, new XMLEntityManager(), null, null, null);
- }
-
- public XMLSchemaLoader(SymbolTable symbolTable) {
- this( symbolTable, null, new XMLEntityManager(), null, null, null);
- }
-
- /**
- * This constractor is used by the XMLSchemaValidator. Additional properties, i.e. XMLEntityManager,
- * will be passed during reset(XMLComponentManager).
- * @param errorReporter
- * @param grammarBucket
- * @param sHandler
- * @param builder
- */
- XMLSchemaLoader(XMLErrorReporter errorReporter,
- XSGrammarBucket grammarBucket,
- SubstitutionGroupHandler sHandler, CMBuilder builder) {
- this(null, errorReporter, null, grammarBucket, sHandler, builder);
- }
-
- XMLSchemaLoader(SymbolTable symbolTable,
- XMLErrorReporter errorReporter,
- XMLEntityManager entityResolver,
- XSGrammarBucket grammarBucket,
- SubstitutionGroupHandler sHandler,
- CMBuilder builder) {
-
- // store properties and features in configuration
- fLoaderConfig.addRecognizedFeatures(RECOGNIZED_FEATURES);
- fLoaderConfig.addRecognizedProperties(RECOGNIZED_PROPERTIES);
- if (symbolTable != null){
- fLoaderConfig.setProperty(SYMBOL_TABLE, symbolTable);
- }
-
- if(errorReporter == null) {
- errorReporter = new XMLErrorReporter ();
- errorReporter.setLocale(fLocale);
- errorReporter.setProperty(ERROR_HANDLER, new DefaultErrorHandler());
-
- }
- fErrorReporter = errorReporter;
- // make sure error reporter knows about schemas...
- if(fErrorReporter.getMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN) == null) {
- fErrorReporter.putMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN, new XSMessageFormatter());
- }
- fLoaderConfig.setProperty(ERROR_REPORTER, fErrorReporter);
- fEntityManager = entityResolver;
- // entity manager is null if XMLSchemaValidator creates the loader
- if (fEntityManager != null){
- fLoaderConfig.setProperty(ENTITY_MANAGER, fEntityManager);
- }
-
- // by default augment PSVI (i.e. don't use declaration pool)
- fLoaderConfig.setFeature(AUGMENT_PSVI, true);
-
- if(grammarBucket == null ) {
- grammarBucket = new XSGrammarBucket();
- }
- fGrammarBucket = grammarBucket;
- if(sHandler == null) {
- sHandler = new SubstitutionGroupHandler(fGrammarBucket);
- }
- fSubGroupHandler = sHandler;
-
- if(builder == null) {
- builder = new CMBuilder(fNodeFactory);
- }
- fCMBuilder = builder;
- fSchemaHandler = new XSDHandler(fGrammarBucket);
- if (fDeclPool != null) {
- fDeclPool.reset();
- }
- fJAXPCache = new HashMap();
-
- fSettingsChanged = true;
- }
-
- /**
- * Returns a list of feature identifiers that are recognized by
- * this XMLGrammarLoader. This method may return null if no features
- * are recognized.
- */
- public String[] getRecognizedFeatures() {
- return (String[])(RECOGNIZED_FEATURES.clone());
- } // getRecognizedFeatures(): String[]
-
- /**
- * Returns the state of a feature.
- *
- * @param featureId The feature identifier.
- *
- * @throws XMLConfigurationException Thrown on configuration error.
- */
- public boolean getFeature(String featureId)
- throws XMLConfigurationException {
- return fLoaderConfig.getFeature(featureId);
- } // getFeature (String): boolean
-
- /**
- * Sets the state of a feature.
- *
- * @param featureId The feature identifier.
- * @param state The state of the feature.
- *
- * @throws XMLConfigurationException Thrown when a feature is not
- * recognized or cannot be set.
- */
- public void setFeature(String featureId,
- boolean state) throws XMLConfigurationException {
- fSettingsChanged = true;
- if(featureId.equals(CONTINUE_AFTER_FATAL_ERROR)) {
- fErrorReporter.setFeature(CONTINUE_AFTER_FATAL_ERROR, state);
- }
- else if(featureId.equals(GENERATE_SYNTHETIC_ANNOTATIONS)) {
- fSchemaHandler.setGenerateSyntheticAnnotations(state);
- }
- fLoaderConfig.setFeature(featureId, state);
- } // setFeature(String, boolean)
-
- /**
- * Returns a list of property identifiers that are recognized by
- * this XMLGrammarLoader. This method may return null if no properties
- * are recognized.
- */
- public String[] getRecognizedProperties() {
- return (String[])(RECOGNIZED_PROPERTIES.clone());
- } // getRecognizedProperties(): String[]
-
- /**
- * Returns the state of a property.
- *
- * @param propertyId The property identifier.
- *
- * @throws XMLConfigurationException Thrown on configuration error.
- */
- public Object getProperty(String propertyId)
- throws XMLConfigurationException {
- return fLoaderConfig.getProperty(propertyId);
- } // getProperty(String): Object
-
- /**
- * Sets the state of a property.
- *
- * @param propertyId The property identifier.
- * @param state The state of the property.
- *
- * @throws XMLConfigurationException Thrown when a property is not
- * recognized or cannot be set.
- */
- public void setProperty(String propertyId,
- Object state) throws XMLConfigurationException {
- fSettingsChanged = true;
- fLoaderConfig.setProperty(propertyId, state);
- if (propertyId.equals(JAXP_SCHEMA_SOURCE)) {
- fJAXPSource = state;
- fJAXPProcessed = false;
- }
- else if (propertyId.equals(XMLGRAMMAR_POOL)) {
- fGrammarPool = (XMLGrammarPool)state;
- }
- else if (propertyId.equals(SCHEMA_LOCATION)) {
- fExternalSchemas = (String)state;
- }
- else if (propertyId.equals(SCHEMA_NONS_LOCATION)) {
- fExternalNoNSSchema = (String) state;
- }
- else if (propertyId.equals(LOCALE)) {
- setLocale((Locale) state);
- }
- else if (propertyId.equals(ENTITY_RESOLVER)) {
- fEntityManager.setProperty(ENTITY_RESOLVER, state);
- }
- else if (propertyId.equals(ERROR_REPORTER)) {
- fErrorReporter = (XMLErrorReporter)state;
- if (fErrorReporter.getMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN) == null) {
- fErrorReporter.putMessageFormatter(XSMessageFormatter.SCHEMA_DOMAIN, new XSMessageFormatter());
- }
- }
- else if (propertyId.equals(XML_SECURITY_PROPERTY_MANAGER)) {
- XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)state;
- faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
- }
- } // setProperty(String, Object)
-
- /**
- * Set the locale to use for messages.
- *
- * @param locale The locale object to use for localization of messages.
- *
- * @exception XNIException Thrown if the parser does not support the
- * specified locale.
- */
- public void setLocale(Locale locale) {
- fLocale = locale;
- fErrorReporter.setLocale(locale);
- } // setLocale(Locale)
-
- /** Return the Locale the XMLGrammarLoader is using. */
- public Locale getLocale() {
- return fLocale;
- } // getLocale(): Locale
-
- /**
- * Sets the error handler.
- *
- * @param errorHandler The error handler.
- */
- public void setErrorHandler(XMLErrorHandler errorHandler) {
- fErrorReporter.setProperty(ERROR_HANDLER, errorHandler);
- } // setErrorHandler(XMLErrorHandler)
-
- /** Returns the registered error handler. */
- public XMLErrorHandler getErrorHandler() {
- return fErrorReporter.getErrorHandler();
- } // getErrorHandler(): XMLErrorHandler
-
- /**
- * Sets the entity resolver.
- *
- * @param entityResolver The new entity resolver.
- */
- public void setEntityResolver(XMLEntityResolver entityResolver) {
- fUserEntityResolver = entityResolver;
- fLoaderConfig.setProperty(ENTITY_RESOLVER, entityResolver);
- fEntityManager.setProperty(ENTITY_RESOLVER, entityResolver);
- } // setEntityResolver(XMLEntityResolver)
-
- /** Returns the registered entity resolver. */
- public XMLEntityResolver getEntityResolver() {
- return fUserEntityResolver;
- } // getEntityResolver(): XMLEntityResolver
-
- /**
- * Returns a Grammar object by parsing the contents of the
- * entities pointed to by sources.
- *
- * @param source[] the locations of the entity which forms
- * the staring point of the grammars to be constructed
- * @throws IOException when a problem is encounted reading the entity
- * @throws XNIException when a condition arises (such as a FatalError) that requires parsing
- * of the entity be terminated
- */
- public void loadGrammar(XMLInputSource source[])
- throws IOException, XNIException {
- int numSource = source.length;
- for (int i = 0; i < numSource; ++i) {
- loadGrammar(source[i]);
- }
- }
-
- /**
- * Returns a Grammar object by parsing the contents of the
- * entity pointed to by source.
- *
- * @param source the location of the entity which forms
- * the starting point of the grammar to be constructed.
- * @throws IOException When a problem is encountered reading the entity
- * XNIException When a condition arises (such as a FatalError) that requires parsing
- * of the entity be terminated.
- */
- public Grammar loadGrammar(XMLInputSource source)
- throws IOException, XNIException {
-
- // REVISIT: this method should have a namespace parameter specified by
- // user. In this case we can easily detect if a schema asked to be loaded
- // is already in the local cache.
-
- reset(fLoaderConfig);
- fSettingsChanged = false;
- XSDDescription desc = new XSDDescription();
- desc.fContextType = XSDDescription.CONTEXT_PREPARSE;
- desc.setBaseSystemId(source.getBaseSystemId());
- desc.setLiteralSystemId( source.getSystemId());
- // none of the other fields make sense for preparsing
- Map locationPairs = new HashMap();
- // Process external schema location properties.
- // We don't call tokenizeSchemaLocationStr here, because we also want
- // to check whether the values are valid URI.
- processExternalHints(fExternalSchemas, fExternalNoNSSchema,
- locationPairs, fErrorReporter);
- SchemaGrammar grammar = loadSchema(desc, source, locationPairs);
-
- if(grammar != null && fGrammarPool != null) {
- fGrammarPool.cacheGrammars(XMLGrammarDescription.XML_SCHEMA, fGrammarBucket.getGrammars());
- // NOTE: we only need to verify full checking in case the schema was not provided via JAXP
- // since full checking already verified for all JAXP schemas
- if(fIsCheckedFully && fJAXPCache.get(grammar) != grammar) {
- XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter);
- }
- }
- return grammar;
- } // loadGrammar(XMLInputSource): Grammar
-
- /**
- * This method is called either from XMLGrammarLoader.loadGrammar or from XMLSchemaValidator.
- * Note: in either case, the EntityManager (or EntityResolvers) are not going to be invoked
- * to resolve the location of the schema in XSDDescription
- * @param desc
- * @param source
- * @param locationPairs
- * @return An XML Schema grammar
- * @throws IOException
- * @throws XNIException
- */
- SchemaGrammar loadSchema(XSDDescription desc, XMLInputSource source,
- Map<String, LocationArray> locationPairs) throws IOException, XNIException {
-
- // this should only be done once per invocation of this object;
- // unless application alters JAXPSource in the mean time.
- if(!fJAXPProcessed) {
- processJAXPSchemaSource(locationPairs);
- }
-
- if (desc.isExternal()) {
- String accessError = SecuritySupport.checkAccess(desc.getExpandedSystemId(), faccessExternalSchema, Constants.ACCESS_EXTERNAL_ALL);
- if (accessError != null) {
- throw new XNIException(fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- "schema_reference.access",
- new Object[] { SecuritySupport.sanitizePath(desc.getExpandedSystemId()), accessError }, XMLErrorReporter.SEVERITY_ERROR));
- }
- }
- SchemaGrammar grammar = fSchemaHandler.parseSchema(source, desc, locationPairs);
-
- return grammar;
- } // loadSchema(XSDDescription, XMLInputSource): SchemaGrammar
-
- /** This method tries to resolve location of the given schema.
- * The loader stores the namespace/location pairs in a map (use "" as the
- * namespace of absent namespace). When resolving an entity, loader first tries
- * to find in the map whether there is a value for that namespace,
- * if so, pass that location value to the user-defined entity resolver.
- *
- * @param desc
- * @param locationPairs
- * @param entityResolver
- * @return
- * @throws IOException
- */
- public static XMLInputSource resolveDocument(XSDDescription desc,
- Map<String, LocationArray> locationPairs,
- XMLEntityResolver entityResolver) throws IOException {
- String loc = null;
- // we consider the schema location properties for import
- if (desc.getContextType() == XSDDescription.CONTEXT_IMPORT ||
- desc.fromInstance()) {
- // use empty string as the key for absent namespace
- String namespace = desc.getTargetNamespace();
- String ns = namespace == null ? XMLSymbols.EMPTY_STRING : namespace;
- // get the location hint for that namespace
- LocationArray tempLA = locationPairs.get(ns);
- if(tempLA != null)
- loc = tempLA.getFirstLocation();
- }
-
- // if it's not import, or if the target namespace is not set
- // in the schema location properties, use location hint
- if (loc == null) {
- String[] hints = desc.getLocationHints();
- if (hints != null && hints.length > 0)
- loc = hints[0];
- }
-
- String expandedLoc = XMLEntityManager.expandSystemId(loc, desc.getBaseSystemId(), false);
- desc.setLiteralSystemId(loc);
- desc.setExpandedSystemId(expandedLoc);
- return entityResolver.resolveEntity(desc);
- }
-
- // add external schema locations to the location pairs
- public static void processExternalHints(String sl, String nsl,
- Map<String, XMLSchemaLoader.LocationArray> locations,
- XMLErrorReporter er) {
- if (sl != null) {
- try {
- // get the attribute decl for xsi:schemaLocation
- // because external schema location property has the same syntax
- // as xsi:schemaLocation
- XSAttributeDecl attrDecl = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_SCHEMALOCATION);
- // validation the string value to get the list of URI's
- attrDecl.fType.validate(sl, null, null);
- if (!tokenizeSchemaLocationStr(sl, locations)) {
- // report warning (odd number of items)
- er.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- "SchemaLocation",
- new Object[]{sl},
- XMLErrorReporter.SEVERITY_WARNING);
- }
- }
- catch (InvalidDatatypeValueException ex) {
- // report warning (not list of URI's)
- er.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- ex.getKey(), ex.getArgs(),
- XMLErrorReporter.SEVERITY_WARNING);
- }
- }
-
- if (nsl != null) {
- try {
- // similarly for no ns schema location property
- XSAttributeDecl attrDecl = SchemaGrammar.SG_XSI.getGlobalAttributeDecl(SchemaSymbols.XSI_NONAMESPACESCHEMALOCATION);
- attrDecl.fType.validate(nsl, null, null);
- LocationArray la = ((LocationArray)locations.get(XMLSymbols.EMPTY_STRING));
- if(la == null) {
- la = new LocationArray();
- locations.put(XMLSymbols.EMPTY_STRING, la);
- }
- la.addLocation(nsl);
- }
- catch (InvalidDatatypeValueException ex) {
- // report warning (not a URI)
- er.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- ex.getKey(), ex.getArgs(),
- XMLErrorReporter.SEVERITY_WARNING);
- }
- }
- }
- // this method takes a SchemaLocation string.
- // If an error is encountered, false is returned;
- // otherwise, true is returned. In either case, locations
- // is augmented to include as many tokens as possible.
- // @param schemaStr The schemaLocation string to tokenize
- // @param locations HashMap mapping namespaces to LocationArray objects holding lists of locaitons
- // @return true if no problems; false if string could not be tokenized
- public static boolean tokenizeSchemaLocationStr(String schemaStr,
- Map<String, XMLSchemaLoader.LocationArray> locations) {
- if (schemaStr!= null) {
- StringTokenizer t = new StringTokenizer(schemaStr, " \n\t\r");
- String namespace, location;
- while (t.hasMoreTokens()) {
- namespace = t.nextToken ();
- if (!t.hasMoreTokens()) {
- return false; // error!
- }
- location = t.nextToken();
- LocationArray la = locations.get(namespace);
- if(la == null) {
- la = new LocationArray();
- locations.put(namespace, la);
- }
- la.addLocation(location);
- }
- }
- return true;
- } // tokenizeSchemaLocation(String, HashMap): boolean
-
- /**
- * Translate the various JAXP SchemaSource property types to XNI
- * XMLInputSource. Valid types are: String, org.xml.sax.InputSource,
- * InputStream, File, or Object[] of any of previous types.
- * REVISIT: the JAXP 1.2 spec is less than clear as to whether this property
- * should be available to imported schemas. I have assumed
- * that it should. - NG
- * Note: all JAXP schema files will be checked for full-schema validity if the feature was set up
- *
- */
- private void processJAXPSchemaSource(
- Map<String, LocationArray> locationPairs) throws IOException {
- fJAXPProcessed = true;
- if (fJAXPSource == null) {
- return;
- }
-
- Class componentType = fJAXPSource.getClass().getComponentType();
- XMLInputSource xis = null;
- String sid = null;
- if (componentType == null) {
- // Not an array
- if(fJAXPSource instanceof InputStream ||
- fJAXPSource instanceof InputSource) {
- SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(fJAXPSource);
- if(g != null) {
- fGrammarBucket.putGrammar(g);
- return;
- }
- }
- fXSDDescription.reset();
- xis = xsdToXMLInputSource(fJAXPSource);
- sid = xis.getSystemId();
- fXSDDescription.fContextType = XSDDescription.CONTEXT_PREPARSE;
- if (sid != null) {
- fXSDDescription.setBaseSystemId(xis.getBaseSystemId());
- fXSDDescription.setLiteralSystemId(sid);
- fXSDDescription.setExpandedSystemId(sid);
- fXSDDescription.fLocationHints = new String[]{sid};
- }
- SchemaGrammar g = loadSchema(fXSDDescription, xis, locationPairs);
- // it is possible that we won't be able to resolve JAXP schema-source location
- if (g != null){
- if(fJAXPSource instanceof InputStream ||
- fJAXPSource instanceof InputSource) {
- fJAXPCache.put(fJAXPSource, g);
- if(fIsCheckedFully) {
- XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter);
- }
- }
- fGrammarBucket.putGrammar(g);
- }
- return ;
- } else if ( (componentType != Object.class) &&
- (componentType != String.class) &&
- (componentType != File.class) &&
- (componentType != InputStream.class) &&
- (componentType != InputSource.class)
- ) {
- // Not an Object[], String[], File[], InputStream[], InputSource[]
- throw new XMLConfigurationException(
- Status.NOT_SUPPORTED, "\""+JAXP_SCHEMA_SOURCE+
- "\" property cannot have an array of type {"+componentType.getName()+
- "}. Possible types of the array supported are Object, String, File, "+
- "InputStream, InputSource.");
- }
-
- // JAXP spec. allow []s of type String, File, InputStream,
- // InputSource also, apart from [] of type Object.
- Object[] objArr = (Object[]) fJAXPSource;
- //make local vector for storing targetn namespaces of schemasources specified in object arrays.
- Vector jaxpSchemaSourceNamespaces = new Vector() ;
- for (int i = 0; i < objArr.length; i++) {
- if(objArr[i] instanceof InputStream ||
- objArr[i] instanceof InputSource) {
- SchemaGrammar g = (SchemaGrammar)fJAXPCache.get(objArr[i]);
- if (g != null) {
- fGrammarBucket.putGrammar(g);
- continue;
- }
- }
- fXSDDescription.reset();
- xis = xsdToXMLInputSource(objArr[i]);
- sid = xis.getSystemId();
- fXSDDescription.fContextType = XSDDescription.CONTEXT_PREPARSE;
- if (sid != null) {
- fXSDDescription.setBaseSystemId(xis.getBaseSystemId());
- fXSDDescription.setLiteralSystemId(sid);
- fXSDDescription.setExpandedSystemId(sid);
- fXSDDescription.fLocationHints = new String[]{sid};
- }
- String targetNamespace = null ;
- // load schema
- SchemaGrammar grammar = fSchemaHandler.parseSchema(xis,fXSDDescription, locationPairs);
-
- if(fIsCheckedFully) {
- XSConstraints.fullSchemaChecking(fGrammarBucket, fSubGroupHandler, fCMBuilder, fErrorReporter);
- }
- if(grammar != null){
- targetNamespace = grammar.getTargetNamespace() ;
- if(jaxpSchemaSourceNamespaces.contains(targetNamespace)){
- //when an array of objects is passed it is illegal to have two schemas that share same namespace.
- throw new java.lang.IllegalArgumentException(
- " When using array of Objects as the value of SCHEMA_SOURCE property , " +
- "no two Schemas should share the same targetNamespace. " );
- }
- else{
- jaxpSchemaSourceNamespaces.add(targetNamespace) ;
- }
- if(objArr[i] instanceof InputStream ||
- objArr[i] instanceof InputSource) {
- fJAXPCache.put(objArr[i], grammar);
- }
- fGrammarBucket.putGrammar(grammar);
- }
- else{
- //REVISIT: What should be the acutal behavior if grammar can't be loaded as specified in schema source?
- }
- }
- }//processJAXPSchemaSource
-
- private XMLInputSource xsdToXMLInputSource(
- Object val)
- {
- if (val instanceof String) {
- // String value is treated as a URI that is passed through the
- // EntityResolver
- String loc = (String) val;
- fXSDDescription.reset();
- fXSDDescription.setValues(null, loc, null, null);
- XMLInputSource xis = null;
- try {
- xis = fEntityManager.resolveEntity(fXSDDescription);
- } catch (IOException ex) {
- fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- "schema_reference.4",
- new Object[] { loc }, XMLErrorReporter.SEVERITY_ERROR);
- }
- if (xis == null) {
- // REVISIT: can this happen?
- // Treat value as a URI and pass in as systemId
- return new XMLInputSource(null, loc, null);
- }
- return xis;
- } else if (val instanceof InputSource) {
- return saxToXMLInputSource((InputSource) val);
- } else if (val instanceof InputStream) {
- return new XMLInputSource(null, null, null,
- (InputStream) val, null);
- } else if (val instanceof File) {
- File file = (File) val;
- InputStream is = null;
- try {
- is = new BufferedInputStream(new FileInputStream(file));
- } catch (FileNotFoundException ex) {
- fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- "schema_reference.4", new Object[] { file.toString() },
- XMLErrorReporter.SEVERITY_ERROR);
- }
- return new XMLInputSource(null, null, null, is, null);
- }
- throw new XMLConfigurationException(
- Status.NOT_SUPPORTED, "\""+JAXP_SCHEMA_SOURCE+
- "\" property cannot have a value of type {"+val.getClass().getName()+
- "}. Possible types of the value supported are String, File, InputStream, "+
- "InputSource OR an array of these types.");
- }
-
-
- //Convert a SAX InputSource to an equivalent XNI XMLInputSource
-
- private static XMLInputSource saxToXMLInputSource(InputSource sis) {
- String publicId = sis.getPublicId();
- String systemId = sis.getSystemId();
-
- Reader charStream = sis.getCharacterStream();
- if (charStream != null) {
- return new XMLInputSource(publicId, systemId, null, charStream,
- null);
- }
-
- InputStream byteStream = sis.getByteStream();
- if (byteStream != null) {
- return new XMLInputSource(publicId, systemId, null, byteStream,
- sis.getEncoding());
- }
-
- return new XMLInputSource(publicId, systemId, null);
- }
-
- public static class LocationArray{
-
- int length ;
- String [] locations = new String[2];
-
- public void resize(int oldLength , int newLength){
- String [] temp = new String[newLength] ;
- System.arraycopy(locations, 0, temp, 0, Math.min(oldLength, newLength));
- locations = temp ;
- length = Math.min(oldLength, newLength);
- }
-
- public void addLocation(String location){
- if(length >= locations.length ){
- resize(length, Math.max(1, length*2));
- }
- locations[length++] = location;
- }//setLocation()
-
- public String [] getLocationArray(){
- if(length < locations.length ){
- resize(locations.length, length);
- }
- return locations;
- }//getLocationArray()
-
- public String getFirstLocation(){
- return length > 0 ? locations[0] : null;
- }
-
- public int getLength(){
- return length ;
- }
-
- } //locationArray
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xni.parser.XMLComponent#getFeatureDefault(java.lang.String)
- */
- public Boolean getFeatureDefault(String featureId) {
- if (featureId.equals(AUGMENT_PSVI)){
- return Boolean.TRUE;
- }
- return null;
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xni.parser.XMLComponent#getPropertyDefault(java.lang.String)
- */
- public Object getPropertyDefault(String propertyId) {
- // TODO Auto-generated method stub
- return null;
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xni.parser.XMLComponent#reset(com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager)
- */
- public void reset(XMLComponentManager componentManager) throws XMLConfigurationException {
-
- XMLSecurityPropertyManager spm = (XMLSecurityPropertyManager)componentManager.getProperty(XML_SECURITY_PROPERTY_MANAGER);
- if (spm == null) {
- spm = new XMLSecurityPropertyManager();
- setProperty(XML_SECURITY_PROPERTY_MANAGER, spm);
- }
-
- XMLSecurityManager sm = (XMLSecurityManager)componentManager.getProperty(SECURITY_MANAGER);
- if (sm == null)
- setProperty(SECURITY_MANAGER,new XMLSecurityManager(true));
-
- faccessExternalSchema = spm.getValue(XMLSecurityPropertyManager.Property.ACCESS_EXTERNAL_SCHEMA);
-
- fGrammarBucket.reset();
-
- fSubGroupHandler.reset();
-
- boolean parser_settings = componentManager.getFeature(PARSER_SETTINGS, true);
-
- if (!parser_settings || !fSettingsChanged){
- // need to reprocess JAXP schema sources
- fJAXPProcessed = false;
- // reinitialize grammar bucket
- initGrammarBucket();
- return;
- }
-
- //pass the component manager to the factory..
- fNodeFactory.reset(componentManager);
-
- // get registered entity manager to be able to resolve JAXP schema-source property:
- // Note: in case XMLSchemaValidator has created the loader,
- // the entity manager property is null
- fEntityManager = (XMLEntityManager)componentManager.getProperty(ENTITY_MANAGER);
-
- // get the error reporter
- fErrorReporter = (XMLErrorReporter)componentManager.getProperty(ERROR_REPORTER);
-
- // Determine schema dv factory to use
- SchemaDVFactory dvFactory = null;
- dvFactory = fSchemaHandler.getDVFactory();
- if (dvFactory == null) {
- dvFactory = SchemaDVFactory.getInstance();
- fSchemaHandler.setDVFactory(dvFactory);
- }
-
- boolean psvi = componentManager.getFeature(AUGMENT_PSVI, false);
-
- if (!psvi) {
- if (fDeclPool != null) {
- fDeclPool.reset();
- }
- else {
- fDeclPool = new XSDeclarationPool();
- }
- fCMBuilder.setDeclPool(fDeclPool);
- fSchemaHandler.setDeclPool(fDeclPool);
- if (dvFactory instanceof SchemaDVFactoryImpl) {
- fDeclPool.setDVFactory((SchemaDVFactoryImpl)dvFactory);
- ((SchemaDVFactoryImpl)dvFactory).setDeclPool(fDeclPool);
- }
- } else {
- fCMBuilder.setDeclPool(null);
- fSchemaHandler.setDeclPool(null);
- }
-
- // get schema location properties
- try {
- fExternalSchemas = (String) componentManager.getProperty(SCHEMA_LOCATION);
- fExternalNoNSSchema = (String) componentManager.getProperty(SCHEMA_NONS_LOCATION);
- } catch (XMLConfigurationException e) {
- fExternalSchemas = null;
- fExternalNoNSSchema = null;
- }
-
- // get JAXP sources if available
- fJAXPSource = componentManager.getProperty(JAXP_SCHEMA_SOURCE, null);
- fJAXPProcessed = false;
-
- // clear grammars, and put the one for schema namespace there
- fGrammarPool = (XMLGrammarPool) componentManager.getProperty(XMLGRAMMAR_POOL, null);
- initGrammarBucket();
- // get continue-after-fatal-error feature
- try {
- boolean fatalError = componentManager.getFeature(CONTINUE_AFTER_FATAL_ERROR, false);
- if (!fatalError) {
- fErrorReporter.setFeature(CONTINUE_AFTER_FATAL_ERROR, fatalError);
- }
- } catch (XMLConfigurationException e) {
- }
- // set full validation to false
- fIsCheckedFully = componentManager.getFeature(SCHEMA_FULL_CHECKING, false);
-
- // get generate-synthetic-annotations feature
- fSchemaHandler.setGenerateSyntheticAnnotations(componentManager.getFeature(GENERATE_SYNTHETIC_ANNOTATIONS, false));
- fSchemaHandler.reset(componentManager);
- }
-
- private void initGrammarBucket(){
- if(fGrammarPool != null) {
- Grammar [] initialGrammars = fGrammarPool.retrieveInitialGrammarSet(XMLGrammarDescription.XML_SCHEMA);
- for (int i = 0; i < initialGrammars.length; i++) {
- // put this grammar into the bucket, along with grammars
- // imported by it (directly or indirectly)
- if (!fGrammarBucket.putGrammar((SchemaGrammar)(initialGrammars[i]), true)) {
- // REVISIT: a conflict between new grammar(s) and grammars
- // in the bucket. What to do? A warning? An exception?
- fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,
- "GrammarConflict", null,
- XMLErrorReporter.SEVERITY_WARNING);
- }
- }
- }
- }
-
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xs.XSLoader#getConfig()
- */
- public DOMConfiguration getConfig() {
- return this;
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xs.XSLoader#load(org.w3c.dom.ls.LSInput)
- */
- public XSModel load(LSInput is) {
- try {
- Grammar g = loadGrammar(dom2xmlInputSource(is));
- return ((XSGrammar) g).toXSModel();
- } catch (Exception e) {
- reportDOMFatalError(e);
- return null;
- }
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadInputList(com.sun.org.apache.xerces.internal.xs.DOMInputList)
- */
- public XSModel loadInputList(LSInputList is) {
- int length = is.getLength();
- SchemaGrammar[] gs = new SchemaGrammar[length];
- for (int i = 0; i < length; i++) {
- try {
- gs[i] = (SchemaGrammar) loadGrammar(dom2xmlInputSource(is.item(i)));
- } catch (Exception e) {
- reportDOMFatalError(e);
- return null;
- }
- }
- return new XSModelImpl(gs);
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadURI(java.lang.String)
- */
- public XSModel loadURI(String uri) {
- try {
- Grammar g = loadGrammar(new XMLInputSource(null, uri, null));
- return ((XSGrammar)g).toXSModel();
- }
- catch (Exception e){
- reportDOMFatalError(e);
- return null;
- }
- }
-
- /* (non-Javadoc)
- * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadURIList(com.sun.org.apache.xerces.internal.xs.StringList)
- */
- public XSModel loadURIList(StringList uriList) {
- int length = uriList.getLength();
- SchemaGrammar[] gs = new SchemaGrammar[length];
- for (int i = 0; i < length; i++) {
- try {
- gs[i] =
- (SchemaGrammar) loadGrammar(new XMLInputSource(null, uriList.item(i), null));
- } catch (Exception e) {
- reportDOMFatalError(e);
- return null;
- }
- }
- return new XSModelImpl(gs);
- }
-
- void reportDOMFatalError(Exception e) {
- if (fErrorHandler != null) {
- DOMErrorImpl error = new DOMErrorImpl();
- error.fException = e;
- error.fMessage = e.getMessage();
- error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;
- fErrorHandler.getErrorHandler().handleError(error);
- }
- }
-
- /* (non-Javadoc)
- * @see DOMConfiguration#canSetParameter(String, Object)
- */
- public boolean canSetParameter(String name, Object value) {
- if(value instanceof Boolean){
- if (name.equals(Constants.DOM_VALIDATE) ||
- name.equals(SCHEMA_FULL_CHECKING) ||
- name.equals(VALIDATE_ANNOTATIONS) ||
- name.equals(CONTINUE_AFTER_FATAL_ERROR) ||
- name.equals(ALLOW_JAVA_ENCODINGS) ||
- name.equals(STANDARD_URI_CONFORMANT_FEATURE) ||
- name.equals(GENERATE_SYNTHETIC_ANNOTATIONS) ||
- name.equals(HONOUR_ALL_SCHEMALOCATIONS) ||
- name.equals(NAMESPACE_GROWTH) ||
- name.equals(TOLERATE_DUPLICATES) ||
- name.equals(USE_SERVICE_MECHANISM)) {
- return true;
-
- }
- return false;
- }
- if (name.equals(Constants.DOM_ERROR_HANDLER) ||
- name.equals(Constants.DOM_RESOURCE_RESOLVER) ||
- name.equals(SYMBOL_TABLE) ||
- name.equals(ERROR_REPORTER) ||
- name.equals(ERROR_HANDLER) ||
- name.equals(ENTITY_RESOLVER) ||
- name.equals(XMLGRAMMAR_POOL) ||
- name.equals(SCHEMA_LOCATION) ||
- name.equals(SCHEMA_NONS_LOCATION) ||
- name.equals(JAXP_SCHEMA_SOURCE) ||
- name.equals(SCHEMA_DV_FACTORY)) {
- return true;
- }
- return false;
- }
-
- /* (non-Javadoc)
- * @see DOMConfiguration#getParameter(String)
- */
- public Object getParameter(String name) throws DOMException {
-
- if (name.equals(Constants.DOM_ERROR_HANDLER)){
- return (fErrorHandler != null) ? fErrorHandler.getErrorHandler() : null;
- }
- else if (name.equals(Constants.DOM_RESOURCE_RESOLVER)) {
- return (fResourceResolver != null) ? fResourceResolver.getEntityResolver() : null;
- }
-
- try {
- boolean feature = getFeature(name);
- return (feature) ? Boolean.TRUE : Boolean.FALSE;
- } catch (Exception e) {
- Object property;
- try {
- property = getProperty(name);
- return property;
- } catch (Exception ex) {
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "FEATURE_NOT_SUPPORTED",
- new Object[] { name });
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
- }
- }
- }
-
- /* (non-Javadoc)
- * @see DOMConfiguration#getParameterNames()
- */
- public DOMStringList getParameterNames() {
- if (fRecognizedParameters == null){
- Vector v = new Vector();
- v.add(Constants.DOM_VALIDATE);
- v.add(Constants.DOM_ERROR_HANDLER);
- v.add(Constants.DOM_RESOURCE_RESOLVER);
- v.add(SYMBOL_TABLE);
- v.add(ERROR_REPORTER);
- v.add(ERROR_HANDLER);
- v.add(ENTITY_RESOLVER);
- v.add(XMLGRAMMAR_POOL);
- v.add(SCHEMA_LOCATION);
- v.add(SCHEMA_NONS_LOCATION);
- v.add(JAXP_SCHEMA_SOURCE);
- v.add(SCHEMA_FULL_CHECKING);
- v.add(CONTINUE_AFTER_FATAL_ERROR);
- v.add(ALLOW_JAVA_ENCODINGS);
- v.add(STANDARD_URI_CONFORMANT_FEATURE);
- v.add(VALIDATE_ANNOTATIONS);
- v.add(GENERATE_SYNTHETIC_ANNOTATIONS);
- v.add(HONOUR_ALL_SCHEMALOCATIONS);
- v.add(NAMESPACE_GROWTH);
- v.add(TOLERATE_DUPLICATES);
- v.add(USE_SERVICE_MECHANISM);
- fRecognizedParameters = new DOMStringListImpl(v);
- }
- return fRecognizedParameters;
- }
-
- /* (non-Javadoc)
- * @see DOMConfiguration#setParameter(String, Object)
- */
- public void setParameter(String name, Object value) throws DOMException {
- if (value instanceof Boolean) {
- boolean state = ((Boolean) value).booleanValue();
- if (name.equals("validate") && state) {
- return;
- }
- try {
- setFeature(name, state);
- } catch (Exception e) {
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "FEATURE_NOT_SUPPORTED",
- new Object[] { name });
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
- }
- return;
- }
- if (name.equals(Constants.DOM_ERROR_HANDLER)) {
- if (value instanceof DOMErrorHandler) {
- try {
- fErrorHandler = new DOMErrorHandlerWrapper((DOMErrorHandler) value);
- setErrorHandler(fErrorHandler);
- } catch (XMLConfigurationException e) {
- }
- } else {
- // REVISIT: type mismatch
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "FEATURE_NOT_SUPPORTED",
- new Object[] { name });
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
- }
- return;
-
- }
- if (name.equals(Constants.DOM_RESOURCE_RESOLVER)) {
- if (value instanceof LSResourceResolver) {
- try {
- fResourceResolver = new DOMEntityResolverWrapper((LSResourceResolver) value);
- setEntityResolver(fResourceResolver);
- }
- catch (XMLConfigurationException e) {}
- } else {
- // REVISIT: type mismatch
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "FEATURE_NOT_SUPPORTED",
- new Object[] { name });
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
- }
- return;
- }
-
- try {
- setProperty(name, value);
- } catch (Exception ex) {
-
- String msg =
- DOMMessageFormatter.formatMessage(
- DOMMessageFormatter.DOM_DOMAIN,
- "FEATURE_NOT_SUPPORTED",
- new Object[] { name });
- throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);
-
- }
-
- }
-
- XMLInputSource dom2xmlInputSource(LSInput is) {
- // need to wrap the LSInput with an XMLInputSource
- XMLInputSource xis = null;
-
- /**
- * An LSParser looks at inputs specified in LSInput in
- * the following order: characterStream, byteStream,
- * stringData, systemId, publicId. For consistency
- * have the same behaviour for XSLoader.
- */
-
- // check whether there is a Reader
- // according to DOM, we need to treat such reader as "UTF-16".
- if (is.getCharacterStream() != null) {
- xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
- is.getBaseURI(), is.getCharacterStream(),
- "UTF-16");
- }
- // check whether there is an InputStream
- else if (is.getByteStream() != null) {
- xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
- is.getBaseURI(), is.getByteStream(),
- is.getEncoding());
- }
- // if there is a string data, use a StringReader
- // according to DOM, we need to treat such data as "UTF-16".
- else if (is.getStringData() != null && is.getStringData().length() != 0) {
- xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
- is.getBaseURI(), new StringReader(is.getStringData()),
- "UTF-16");
- }
- // otherwise, just use the public/system/base Ids
- else {
- xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),
- is.getBaseURI());
- }
-
- return xis;
- }
-
-} // XMLGrammarLoader