domconfigurationimpl.java

来自「JAVA 所有包」· Java 代码 · 共 1,073 行 · 第 1/3 页

JAVA
1,073
字号
            }            else if (name.equalsIgnoreCase(SYMBOL_TABLE)){                // Xerces Symbol Table                if (value instanceof SymbolTable){                    setProperty(SYMBOL_TABLE, value);                }                else {                    // REVISIT: type mismatch                    String msg =                        DOMMessageFormatter.formatMessage(                            DOMMessageFormatter.DOM_DOMAIN,                            "TYPE_MISMATCH_ERR",                            new Object[] { name });                    throw new DOMException(DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else if (name.equalsIgnoreCase (GRAMMAR_POOL)){                if (value instanceof XMLGrammarPool){                    setProperty(GRAMMAR_POOL, value);                }                else {                    // REVISIT: type mismatch                    String msg =                        DOMMessageFormatter.formatMessage(                            DOMMessageFormatter.DOM_DOMAIN,                            "TYPE_MISMATCH_ERR",                            new Object[] { name });                    throw new DOMException(DOMException.TYPE_MISMATCH_ERR, msg);                }            }            else {                // REVISIT: check if this is a boolean parameter -- type mismatch should be thrown.                //parameter is not recognized                String msg =                    DOMMessageFormatter.formatMessage(                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_FOUND",                        new Object[] { name });                throw new DOMException(DOMException.NOT_FOUND_ERR, msg);            }        }    }    /**     * DOM Level 3 WD - Experimental.     * getParameter     */	public Object getParameter(String name) throws DOMException {		// REVISIT: Recognizes DOM L3 default features only.		//          Does not yet recognize Xerces features.		if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)) {			return ((features & COMMENTS) != 0) ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACES)) {			return (features & NAMESPACES) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)) {			// REVISIT: datatype-normalization only takes effect if validation is on			return (features & DTNORMALIZATION) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {			return (features & CDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_ENTITIES)) {			return (features & ENTITIES) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)) {			return (features & SPLITCDATA) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_VALIDATE)) {			return (features & VALIDATE) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_WELLFORMED)) {			return (features & WELLFORMED) != 0 ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)) {		    return (features & NSDECL) != 0 ? Boolean.TRUE : Boolean.FALSE;		} 		else if (name.equalsIgnoreCase(Constants.DOM_INFOSET)) {			return (features & INFOSET_MASK) == INFOSET_TRUE_PARAMS ? Boolean.TRUE : Boolean.FALSE;		}		else if (name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)				|| name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)				|| name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)				|| name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)                ) {			return Boolean.FALSE;		}        else if (name.equalsIgnoreCase(SEND_PSVI)) {            return Boolean.TRUE;        }        else if (name.equalsIgnoreCase(Constants.DOM_PSVI)) {            return (features & PSVI) != 0 ? Boolean.TRUE : Boolean.FALSE;        }		        else if (name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {			return Boolean.TRUE;		}		else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {            return fErrorHandlerWrapper.getErrorHandler();		}		else if (name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)) {			XMLEntityResolver entityResolver = getEntityResolver();			if (entityResolver != null && entityResolver instanceof DOMEntityResolverWrapper) {				return ((DOMEntityResolverWrapper) entityResolver).getEntityResolver();			}			return null;		}		else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {			return getProperty(Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE);		}		else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)) {			return getProperty(Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE);		}        else if (name.equalsIgnoreCase(SYMBOL_TABLE)){            return getProperty(SYMBOL_TABLE);        }        else if (name.equalsIgnoreCase(GRAMMAR_POOL)){            return getProperty(GRAMMAR_POOL);        }		else {			String msg =				DOMMessageFormatter.formatMessage(					DOMMessageFormatter.DOM_DOMAIN,					"FEATURE_NOT_FOUND",					new Object[] { name });			throw new DOMException(DOMException.NOT_FOUND_ERR, msg);		}	}    /**     * 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.     */	public boolean canSetParameter(String name, Object value) {        if (value == null){            //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 ;        }        if( value instanceof Boolean ){            //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..            if (name.equalsIgnoreCase(Constants.DOM_COMMENTS)                || name.equalsIgnoreCase(Constants.DOM_DATATYPE_NORMALIZATION)                || name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)                || name.equalsIgnoreCase(Constants.DOM_ENTITIES)                || name.equalsIgnoreCase(Constants.DOM_SPLIT_CDATA)                || name.equalsIgnoreCase(Constants.DOM_NAMESPACES)                || name.equalsIgnoreCase(Constants.DOM_VALIDATE)                || name.equalsIgnoreCase(Constants.DOM_WELLFORMED)                || name.equalsIgnoreCase(Constants.DOM_INFOSET)                || name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)                ) {                return true;            }//features whose parameter value can not be set to 'true'            else if (                name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)                    || name.equalsIgnoreCase(Constants.DOM_CANONICAL_FORM)                    || name.equalsIgnoreCase(Constants.DOM_VALIDATE_IF_SCHEMA)                    || name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION)                    ) {                    return (value.equals(Boolean.TRUE)) ? false : true;            }//features whose parameter value can not be set to 'false'            else if( name.equalsIgnoreCase(Constants.DOM_ELEMENT_CONTENT_WHITESPACE)                    || name.equalsIgnoreCase(SEND_PSVI)                    ) {                    return (value.equals(Boolean.TRUE)) ? true : false;            }// if name is not among the above listed above -- its not recognized. return false            else {                return false ;            }        }		else if (name.equalsIgnoreCase(Constants.DOM_ERROR_HANDLER)) {            return (value instanceof DOMErrorHandler) ? true : false ;        }        else if (name.equalsIgnoreCase(Constants.DOM_RESOURCE_RESOLVER)) {            return (value instanceof LSResourceResolver) ? true : false ;        }        else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_LOCATION)) {            return (value instanceof String) ? true : false ;        }        else if (name.equalsIgnoreCase(Constants.DOM_SCHEMA_TYPE)) {            // REVISIT: should null value be supported?            //as of now we are only supporting W3C XML Schema            return ( (value instanceof String) && value.equals(Constants.NS_XMLSCHEMA) ) ? true : false ;        }        else if (name.equalsIgnoreCase(SYMBOL_TABLE)){            // Xerces Symbol Table            return (value instanceof SymbolTable) ? true : false ;        }        else if (name.equalsIgnoreCase (GRAMMAR_POOL)){            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.     */    public DOMStringList getParameterNames() {    	if (fRecognizedParameters == null){			Vector parameters = new Vector();			//Add DOM recognized parameters			//REVISIT: Would have been nice to have a list of			//recognized paramters.			parameters.add(Constants.DOM_COMMENTS);			parameters.add(Constants.DOM_DATATYPE_NORMALIZATION);			parameters.add(Constants.DOM_CDATA_SECTIONS);			parameters.add(Constants.DOM_ENTITIES);			parameters.add(Constants.DOM_SPLIT_CDATA);			parameters.add(Constants.DOM_NAMESPACES);			parameters.add(Constants.DOM_VALIDATE);			parameters.add(Constants.DOM_INFOSET);			parameters.add(Constants.DOM_NORMALIZE_CHARACTERS);			parameters.add(Constants.DOM_CANONICAL_FORM);			parameters.add(Constants.DOM_VALIDATE_IF_SCHEMA);			parameters.add(Constants.DOM_CHECK_CHAR_NORMALIZATION);			parameters.add(Constants.DOM_WELLFORMED);			parameters.add(Constants.DOM_NAMESPACE_DECLARATIONS);			parameters.add(Constants.DOM_ELEMENT_CONTENT_WHITESPACE);			parameters.add(Constants.DOM_ERROR_HANDLER);			parameters.add(Constants.DOM_SCHEMA_TYPE);			parameters.add(Constants.DOM_SCHEMA_LOCATION);			parameters.add(Constants.DOM_RESOURCE_RESOLVER);			//Add recognized xerces features and properties			parameters.add(GRAMMAR_POOL);			parameters.add(SYMBOL_TABLE);			parameters.add(SEND_PSVI);			fRecognizedParameters = new DOMStringListImpl(parameters);    	}    	return fRecognizedParameters;    }//getParameterNames    //    // Protected methods    //    /**     * reset all components before parsing     */    protected void reset() throws XNIException {        if (fValidationManager != null)            fValidationManager.reset();        int count = fComponents.size();        for (int i = 0; i < count; i++) {            XMLComponent c = (XMLComponent) fComponents.get(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.     */    protected void checkProperty(String propertyId)        throws XMLConfigurationException {        // special cases        if (propertyId.startsWith(Constants.SAX_PROPERTY_PREFIX)) {            final int suffixLength = propertyId.length() - Constants.SAX_PROPERTY_PREFIX.length();            //            // http://xml.org/sax/properties/xml-string            // 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).            //            if (suffixLength == Constants.XML_STRING_PROPERTY.length() &&                propertyId.endsWith(Constants.XML_STRING_PROPERTY)) {                // REVISIT - we should probably ask xml-dev for a precise                // definition of what this is actually supposed to return, and                // in exactly which circumstances.                short type = XMLConfigurationException.NOT_SUPPORTED;                throw new XMLConfigurationException(type, propertyId);            }        }        // check property        super.checkProperty(propertyId);    } // checkProperty(String)    protected void addComponent(XMLComponent component) {        // don't add a component more than once        if (fComponents.contains(component)) {            return;        }        fComponents.add(component);        // register component's recognized features        String[] recognizedFeatures = component.getRecognizedFeatures();        addRecognizedFeatures(recognizedFeatures);        // register component's recognized properties        String[] recognizedProperties = component.getRecognizedProperties();        addRecognizedProperties(recognizedProperties);    } // addComponent(XMLComponent)    protected ValidationManager createValidationManager(){        return new ValidationManager();    }} // class XMLParser

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?