domparserimpl.java

来自「JAVA的一些源码 JAVA2 STANDARD EDITION DEVELO」· Java 代码 · 共 1,089 行 · 第 1/3 页

JAVA
1,089
字号
                || name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)                || name.equalsIgnoreCase (Constants.DOM_CHECK_CHAR_NORMALIZATION)                || name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM)) {                    if (state) { // true is not supported                        String msg =                        DOMMessageFormatter.formatMessage (                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                        throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                    }                    // setting those features to false is no-op                }                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACES)) {                    fConfiguration.setFeature (NAMESPACES, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_INFOSET)) {                    // Setting false has no effect.                    if (state) {                        // true: namespaces, comments, element-content-whitespace                        fConfiguration.setFeature(NAMESPACES, true);                        fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, true);                        fConfiguration.setFeature(INCLUDE_IGNORABLE_WHITESPACE, true);                        // false: validate-if-schema, entities,                        // datatype-normalization, cdata-sections                        fConfiguration.setFeature(DYNAMIC_VALIDATION, false);                        fConfiguration.setFeature(CREATE_ENTITY_REF_NODES, false);                        fConfiguration.setFeature(NORMALIZE_DATA, false);                        fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, false);                    }                }                else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {                    fConfiguration.setFeature(CREATE_CDATA_NODES_FEATURE, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACE_DECLARATIONS)                || name.equalsIgnoreCase (Constants.DOM_WELLFORMED)                || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)) {                    if (!state) { // false is not supported                        String msg =                        DOMMessageFormatter.formatMessage (                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                        throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                    }                    // setting these features to true is no-op                    // REVISIT: implement "namespace-declaration" feature                }                else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE)) {                    fConfiguration.setFeature (VALIDATION_FEATURE, state);                    if (fSchemaType != Constants.NS_DTD) {                        fConfiguration.setFeature (XMLSCHEMA, state);                    }                    if (state){                        fConfiguration.setFeature (DYNAMIC_VALIDATION, false);                    }                }                else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)) {                    fConfiguration.setFeature (DYNAMIC_VALIDATION, state);                    // Note: validation and dynamic validation are mutually exclusive                    if (state){                        fConfiguration.setFeature(VALIDATION_FEATURE, false);                    }                }                else if (name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {                    fConfiguration.setFeature (INCLUDE_IGNORABLE_WHITESPACE, state);                }                else if (name.equalsIgnoreCase (Constants.DOM_PSVI)){                    //XSModel - turn on PSVI augmentation                    fConfiguration.setFeature(PSVI_AUGMENT, true);                    fConfiguration.setProperty(DOCUMENT_CLASS_NAME,                    "com.sun.org.apache.xerces.internal.dom.PSVIDocumentImpl");                }                else {                    // Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING feature,                    // Constants.DOM_SPLIT_CDATA feature,                    // or any Xerces feature                    fConfiguration.setFeature (name.toLowerCase(Locale.ENGLISH), state);                }            }            catch (XMLConfigurationException e) {                String msg =                DOMMessageFormatter.formatMessage (                DOMMessageFormatter.DOM_DOMAIN,                "FEATURE_NOT_FOUND",                new Object[] { name });                throw new DOMException (DOMException.NOT_FOUND_ERR, msg);            }        }        else { // set properties            if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) {                if (value instanceof DOMErrorHandler || value == null) {                    try {                        fErrorHandler = new DOMErrorHandlerWrapper ((DOMErrorHandler) value);                        fConfiguration.setProperty (ERROR_HANDLER, fErrorHandler);                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) {                if (value instanceof LSResourceResolver || value == null) {                    try {                        fConfiguration.setProperty (ENTITY_RESOLVER, new DOMEntityResolverWrapper ((LSResourceResolver) value));                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) {                if (value instanceof String || value == null) {                    try {                        if (value == null) {                            fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                null);                        }                        else if (fSchemaType == Constants.NS_XMLSCHEMA) {                            fSchemaLocation = (String)value;                            // map DOM schema-location to JAXP schemaSource property                            // tokenize location string                            StringTokenizer t = new StringTokenizer (fSchemaLocation, " \n\t\r");                            if (t.hasMoreTokens ()){                                fSchemaLocations.clear ();                                fSchemaLocations.add (t.nextToken ());                                while (t.hasMoreTokens ()) {                                    fSchemaLocations.add (t.nextToken ());                                }                                fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                fSchemaLocations.toArray ());                            }                            else {                                fConfiguration.setProperty (                                Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_SOURCE,                                value);                            }                        }                        else {                            // REVISIT: allow pre-parsing DTD grammars                            String msg =                            DOMMessageFormatter.formatMessage (                            DOMMessageFormatter.DOM_DOMAIN,                            "FEATURE_NOT_SUPPORTED",                            new Object[] { name });                            throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                        }                    }                    catch (XMLConfigurationException e) {}                }                else {                    // REVISIT: type mismatch                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                }            }            else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) {                if (value instanceof String || value == null) {                    try {                        if (value == null) {                            // turn off schema feature                            fConfiguration.setFeature (                            Constants.XERCES_FEATURE_PREFIX                            + Constants.SCHEMA_VALIDATION_FEATURE,                            false);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            null);                            fSchemaType = null;                        }                        else if (value.equals (Constants.NS_XMLSCHEMA)) {                            // turn on schema feature                            fConfiguration.setFeature (Constants.XERCES_FEATURE_PREFIX                            + Constants.SCHEMA_VALIDATION_FEATURE,                            true);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            Constants.NS_XMLSCHEMA);                            fSchemaType = Constants.NS_XMLSCHEMA;                        }                        else if (value.equals (Constants.NS_DTD)) {                            // turn off schema feature                            fConfiguration.setFeature (                            Constants.XERCES_FEATURE_PREFIX                            + Constants.SCHEMA_VALIDATION_FEATURE,                            false);                            // map to JAXP schemaLanguage                            fConfiguration.setProperty ( Constants.JAXP_PROPERTY_PREFIX                            + Constants.SCHEMA_LANGUAGE,                            Constants.NS_DTD);                            fSchemaType = Constants.NS_DTD;                        }                    }                    catch (XMLConfigurationException e) {}                }                else {                    String msg =                    DOMMessageFormatter.formatMessage (                    DOMMessageFormatter.DOM_DOMAIN,                    "TYPE_MISMATCH_ERR",                    new Object[] { name });                    throw new DOMException (DOMException.NOT_SUPPORTED_ERR, msg);                }            }            else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)) {                fConfiguration.setProperty (DOCUMENT_CLASS_NAME, value);            }            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);            }        }    }    /**     * Look up the value of a feature or a property.     */    public Object getParameter (String name) throws DOMException {        if (name.equalsIgnoreCase (Constants.DOM_COMMENTS)) {            return (fConfiguration.getFeature (INCLUDE_COMMENTS_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_DATATYPE_NORMALIZATION)) {            return (fConfiguration.getFeature (NORMALIZE_DATA))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_ENTITIES)) {            return (fConfiguration.getFeature (CREATE_ENTITY_REF_NODES))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_NAMESPACES)) {            return (fConfiguration.getFeature (NAMESPACES))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE)) {            return (fConfiguration.getFeature (VALIDATION_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_VALIDATE_IF_SCHEMA)) {            return (fConfiguration.getFeature (DYNAMIC_VALIDATION))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_ELEMENT_CONTENT_WHITESPACE)) {            return (fConfiguration.getFeature (INCLUDE_IGNORABLE_WHITESPACE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_DISALLOW_DOCTYPE)) {            return (fConfiguration.getFeature (DISALLOW_DOCTYPE_DECL_FEATURE))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_INFOSET)) {            // REVISIT: This is somewhat expensive to compute            // but it's possible that the user has a reference            // to the configuration and is changing the values            // of these features directly on it.            boolean infoset = fConfiguration.getFeature(NAMESPACES) &&                fConfiguration.getFeature(INCLUDE_COMMENTS_FEATURE) &&                fConfiguration.getFeature(INCLUDE_IGNORABLE_WHITESPACE) &&                !fConfiguration.getFeature(DYNAMIC_VALIDATION) &&                !fConfiguration.getFeature(CREATE_ENTITY_REF_NODES) &&                !fConfiguration.getFeature(NORMALIZE_DATA) &&                !fConfiguration.getFeature(CREATE_CDATA_NODES_FEATURE);            return (infoset) ? Boolean.TRUE : Boolean.FALSE;        }        else if (name.equalsIgnoreCase(Constants.DOM_CDATA_SECTIONS)) {            return (fConfiguration.getFeature(CREATE_CDATA_NODES_FEATURE))                ? Boolean.TRUE : Boolean.FALSE;        }        else if (name.equalsIgnoreCase(Constants.DOM_CHECK_CHAR_NORMALIZATION ) ||                 name.equalsIgnoreCase(Constants.DOM_NORMALIZE_CHARACTERS)){            return Boolean.FALSE;        }        else if (name.equalsIgnoreCase(Constants.DOM_NAMESPACE_DECLARATIONS)        || name.equalsIgnoreCase (Constants.DOM_WELLFORMED)        || name.equalsIgnoreCase (Constants.DOM_IGNORE_UNKNOWN_CHARACTER_DENORMALIZATIONS)        || name.equalsIgnoreCase (Constants.DOM_CANONICAL_FORM)        || name.equalsIgnoreCase (Constants.DOM_SUPPORTED_MEDIATYPES_ONLY)        || name.equalsIgnoreCase (Constants.DOM_SPLIT_CDATA)        || name.equalsIgnoreCase (Constants.DOM_CHARSET_OVERRIDES_XML_ENCODING)) {            return (fConfiguration.getFeature (name.toLowerCase(Locale.ENGLISH)))            ? Boolean.TRUE            : Boolean.FALSE;        }        else if (name.equalsIgnoreCase (Constants.DOM_ERROR_HANDLER)) {            if (fErrorHandler != null) {                return fErrorHandler.getErrorHandler ();            }            return null;        }        else if (name.equalsIgnoreCase (Constants.DOM_RESOURCE_RESOLVER)) {            try {                XMLEntityResolver entityResolver =                (XMLEntityResolver) fConfiguration.getProperty (ENTITY_RESOLVER);                if (entityResolver != null                && entityResolver instanceof DOMEntityResolverWrapper) {                    return ((DOMEntityResolverWrapper) entityResolver).getEntityResolver ();                }                return null;            }            catch (XMLConfigurationException e) {}        }        else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_TYPE)) {            return fConfiguration.getProperty (            Constants.JAXP_PROPERTY_PREFIX + Constants.SCHEMA_LANGUAGE);        }        else if (name.equalsIgnoreCase (Constants.DOM_SCHEMA_LOCATION)) {            return fSchemaLocation;        }        else if (name.equalsIgnoreCase (SYMBOL_TABLE)){            return fConfiguration.getProperty (SYMBOL_TABLE);        }        else if (name.equalsIgnoreCase (DOCUMENT_CLASS_NAME)) {            return fConfiguration.getProperty (DOCUMENT_CLASS_NAME);        }        else {            String msg =            DOMMessageFormatter.formatMessage (            DOMMessageFormatter.DOM_DOMAIN,            "FEATURE_NOT_FOUND",            new Object[] { name });

⌨️ 快捷键说明

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