/*
* reserved comment block
* DO NOT REMOVE OR ALTER!
*/
/*
* 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
*
*
* 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.
*/
/**
* Xerces implementation of DOMConfiguration that maintains a table of recognized parameters.
*
* @xerces.internal
*
* @author Elena Litani, IBM
* @author Neeraj Bajaj, Sun Microsystems.
* @version $Id: DOMConfigurationImpl.java,v 1.9 2010-11-01 04:39:37 joehw Exp $
*/
implements XMLParserConfiguration, DOMConfiguration {
//
// Constants
//
// feature identifiers
/** Feature identifier: validation. */
/** Feature identifier: namespaces. */
/** sending psvi in the pipeline */
/** Feature identifier: namespace growth */
// property identifiers
/** Property identifier: entity manager. */
/** Property identifier: error reporter. */
/** Property identifier: xml string. */
/** Property identifier: symbol table. */
/** Property id: Grammar pool*/
/** Property identifier: error handler. */
/** Property identifier: entity resolver. */
/** Property identifier: JAXP schema language / DOM schema-type. */
/** Property identifier: JAXP schema source/ DOM schema-location. */
/** Property identifier: Schema DV Factory */
/** Property identifier: access to external dtd */
/** Property identifier: access to external schema */
//
// Data
//
/** Normalization features*/
// components
/** Symbol table. */
/** Components. */
/** Locale. */
/** Error reporter */
new DOMErrorHandlerWrapper();
// private data
//
// Constructors
//
/** Default Constructor. */
protected DOMConfigurationImpl() {
} // <init>()
/**
* Constructs a parser configuration using the specified symbol table.
*
* @param symbolTable The symbol table to use.
*/
this(symbolTable, null);
} // <init>(SymbolTable)
/**
* Constructs a parser configuration using the specified symbol table
* and parent settings.
*
* @param symbolTable The symbol table to use.
* @param parentSettings The parent settings.
*/
super(parentSettings);
// create table for features and properties
fProperties = new HashMap();
// add default recognized features
final String[] recognizedFeatures = {
};
// set state for default features
setFeature(XERCES_VALIDATION, false);
setFeature(SCHEMA, false);
setFeature(SCHEMA_FULL_CHECKING, false);
setFeature(DYNAMIC_VALIDATION, false);
setFeature(NORMALIZE_DATA, false);
setFeature(XERCES_NAMESPACES, true);
setFeature(SEND_PSVI, true);
setFeature(NAMESPACE_GROWTH, false);
// add default recognized properties
final String[] recognizedProperties = {
};
// set default values for normalization features
features |= NAMESPACES;
features |= SPLITCDATA;
features |= WELLFORMED;
if (symbolTable == null) {
symbolTable = new SymbolTable();
}
fComponents = new ArrayList();
fErrorReporter = new XMLErrorReporter();
//For DOM, the secure feature is set to true by default
// add message formatters
}
// REVISIT: try to include XML Schema formatter.
// This is a hack to allow DTD configuration to be build.
//
try {
xmft = (MessageFormatter)(
}
}
}
// set locale
try {
}
catch (XNIException e) {
// do nothing
// REVISIT: What is the right thing to do? -Ac
}
} // <init>(SymbolTable)
//
// XMLParserConfiguration methods
//
/**
* Parse an XML document.
* <p>
* The parser can use this method to instruct this configuration
* to begin parsing an XML document from any valid input source
* (a character stream, a byte stream, or a URI).
* <p>
* Parsers may not invoke this method while a parse is in progress.
* Once a parse is complete, the parser may then parse another XML
* document.
* <p>
* This method is synchronous: it will not return until parsing
* has ended. If a client application wants to terminate
* parsing early, it should throw an exception.
*
* @param source The input source for the top-level of the
* XML document.
*
* @exception XNIException Any XNI exception, possibly wrapping
* another exception.
* @exception IOException An IO exception from the parser, possibly
* from a byte stream or character stream
* supplied by the parser.
*/
throws XNIException, IOException{
// no-op
}
/**
* Sets the document handler on the last component in the pipeline
* to receive information about the document.
*
* @param documentHandler The document handler.
*/
} // setDocumentHandler(XMLDocumentHandler)
/** Returns the registered document handler. */
return fDocumentHandler;
} // getDocumentHandler():XMLDocumentHandler
/**
* Sets the DTD handler.
*
* @param dtdHandler The DTD handler.
*/
//no-op
} // setDTDHandler(XMLDTDHandler)
/** Returns the registered DTD handler. */
return null;
} // getDTDHandler():XMLDTDHandler
/**
* Sets the DTD content model handler.
*
* @param handler The DTD content model handler.
*/
//no-op
} // setDTDContentModelHandler(XMLDTDContentModelHandler)
/** Returns the registered DTD content model handler. */
return null;
} // getDTDContentModelHandler():XMLDTDContentModelHandler
/**
* Sets the resolver used to resolve external entities. The EntityResolver
* interface supports resolution of public and system identifiers.
*
* @param resolver The new entity resolver. Passing a null value will
* uninstall the currently installed resolver.
*/
}
} // setEntityResolver(XMLEntityResolver)
/**
* Return the current entity resolver.
*
* @return The current entity resolver, or null if none
* has been registered.
* @see #setEntityResolver
*/
} // getEntityResolver():XMLEntityResolver
/**
* Allow an application to register an error event handler.
*
* <p>If the application does not register an error handler, all
* error events reported by the SAX parser will be silently
* ignored; however, normal processing may not continue. It is
* highly recommended that all SAX applications implement an
* error handler to avoid unexpected bugs.</p>
*
* <p>Applications may register a new or different handler in the
* middle of a parse, and the SAX parser must begin using the new
* handler immediately.</p>
*
* @param errorHandler The error handler.
* @exception java.lang.NullPointerException If the handler
* argument is null.
* @see #getErrorHandler
*/
if (errorHandler != null) {
}
} // setErrorHandler(XMLErrorHandler)
/**
* Return the current error handler.
*
* @return The current error handler, or null if none
* has been registered.
* @see #setErrorHandler
*/
} // getErrorHandler():XMLErrorHandler
/**
* Set the state of a feature.
*
* Set the state of any feature in a SAX2 parser. The parser
* might not recognize the feature, and if it does recognize
* it, it might not be able to fulfill the request.
*
* @param featureId The unique identifier (URI) of the feature.
* @param state The requested state of the feature (true or false).
*
* @exception com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException If the
* requested feature is not known.
*/
throws XMLConfigurationException {
// save state if noone "objects"
} // setFeature(String,boolean)
/**
* setProperty
*
* @param propertyId
* @param value
*/
throws XMLConfigurationException {
// store value if noone "objects"
} // 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.
*/
} // setLocale(Locale)
/** Returns the locale. */
return fLocale;
} // getLocale():Locale
/**
* DOM Level 3 WD - Experimental.
* setParameter
*/
boolean found = true;
// REVISIT: Recognizes DOM L3 default features only.
// Does not yet recognize Xerces features.
}
features =
if (state) {
}
}
}
}
}
}
}
}
}
// Setting to false has no effect.
if (state) {
setFeature(NORMALIZE_DATA, false);
}
}
) {
if (state) { // true is not supported
"FEATURE_NOT_SUPPORTED",
}
}
if (!state) { // false is not supported
"FEATURE_NOT_SUPPORTED",
}
}
// REVISIT: turning augmentation of PSVI is not support,
// because in this case we won't be able to retrieve element
// default value.
if (!state) { // false is not supported
"FEATURE_NOT_SUPPORTED",
}
}
}
else {
found = false;
/*
String msg =
DOMMessageFormatter.formatMessage(
DOMMessageFormatter.DOM_DOMAIN,
"FEATURE_NOT_FOUND",
new Object[] { name });
throw new DOMException(DOMException.NOT_FOUND_ERR, msg);
*/
}
}
found = true;
}
else {
// REVISIT: type mismatch
"TYPE_MISMATCH_ERR",
}
}
try {
}
catch (XMLConfigurationException e) {}
}
else {
// REVISIT: type mismatch
"TYPE_MISMATCH_ERR",
}
}
try {
// map DOM schema-location to JAXP schemaSource property
value);
}
catch (XMLConfigurationException e) {}
}
else {
// REVISIT: type mismatch
"TYPE_MISMATCH_ERR",
}
}
try {
null);
}
// REVISIT: when add support to DTD validation
}
// Added support for revalidation against DTDs
}
}
catch (XMLConfigurationException e) {}
}
else {
"TYPE_MISMATCH_ERR",
}
}
// Xerces Symbol Table
if (value instanceof SymbolTable){
}
else {
// REVISIT: type mismatch
"TYPE_MISMATCH_ERR",
}
}
if (value instanceof XMLGrammarPool){
}
else {
// REVISIT: type mismatch
"TYPE_MISMATCH_ERR",
}
}
else {
// REVISIT: check if this is a boolean parameter -- type mismatch should be thrown.
//parameter is not recognized
"FEATURE_NOT_FOUND",
}
}
}
/**
* DOM Level 3 WD - Experimental.
* getParameter
*/
// REVISIT: Recognizes DOM L3 default features only.
// Does not yet recognize Xerces features.
}
}
// REVISIT: datatype-normalization only takes effect if validation is on
}
}
}
}
}
}
}
}
) {
}
}
}
}
return fErrorHandlerWrapper.getErrorHandler();
}
}
return null;
}
}
}
return getProperty(SYMBOL_TABLE);
}
return getProperty(GRAMMAR_POOL);
}
else {
"FEATURE_NOT_FOUND",
}
}
/**
* DOM Level 3 WD - Experimental.
* Check if setting a parameter to a specific value is supported.
*
* @param name The name of the parameter to check.
*
* @param value An object. if null, the returned value is true.
*
* @return true if the parameter could be successfully set to the
* specified value, or false if the parameter is not recognized or
* the requested value is not supported. This does not change the
* current value of the parameter itself.
*/
//if null, the returned value is true.
//REVISIT: I dont like this --- even for unrecognized parameter it would
//return 'true'. I think it should return false in that case.
// Application will be surprised to find that setParameter throws not
//recognized exception when canSetParameter returns 'true' Then what is the use
//of having canSetParameter ??? - nb.
return true ;
}
//features whose parameter value can be set either 'true' or 'false'
// or they accept any boolean value -- so we just need to check that
// its a boolean value..
) {
return true;
}//features whose parameter value can not be set to 'true'
else if (
) {
}//features whose parameter value can not be set to 'false'
) {
}// if name is not among the above listed above -- its not recognized. return false
else {
return false ;
}
}
return (value instanceof DOMErrorHandler) ? true : false ;
}
return (value instanceof LSResourceResolver) ? true : false ;
}
}
// REVISIT: should null value be supported?
//as of now we are only supporting W3C XML Schema
}
// Xerces Symbol Table
return (value instanceof SymbolTable) ? true : false ;
}
return (value instanceof XMLGrammarPool) ? true : false ;
}
else {
//false if the parameter is not recognized or the requested value is not supported.
return false ;
}
} //canSetParameter
/**
* DOM Level 3 CR - Experimental.
*
* The list of the parameters supported by this
* <code>DOMConfiguration</code> object and for which at least one value
* can be set by the application. Note that this list can also contain
* parameter names defined outside this specification.
*/
if (fRecognizedParameters == null){
//Add DOM recognized parameters
//REVISIT: Would have been nice to have a list of
//recognized paramters.
//Add recognized xerces features and properties
}
return fRecognizedParameters;
}//getParameterNames
//
// Protected methods
//
/**
* reset all components before parsing
*/
if (fValidationManager != null)
for (int i = 0; i < count; i++) {
c.reset(this);
}
} // reset()
/**
* Check a property. If the property is known and supported, this method
* simply returns. Otherwise, the appropriate exception is thrown.
*
* @param propertyId The unique identifier (URI) of the property
* being set.
* @exception com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException If the
* requested feature is not known or supported.
*/
throws XMLConfigurationException {
// special cases
//
// Value type: String
// Access: read-only
// Get the literal string of characters associated with the
// current event. If the parser recognises and supports this
// property but is not currently parsing text, it should return
// null (this is a good way to check for availability before the
// parse begins).
//
// REVISIT - we should probably ask xml-dev for a precise
// definition of what this is actually supposed to return, and
// in exactly which circumstances.
return PropertyState.NOT_SUPPORTED;
}
}
// check property
return super.checkProperty(propertyId);
} // checkProperty(String)
// don't add a component more than once
return;
}
// register component's recognized features
// register component's recognized properties
} // addComponent(XMLComponent)
return new ValidationManager();
}
} // class XMLParser