saxparserimpl.java

来自「JAVA 所有包」· Java 代码 · 共 613 行 · 第 1/2 页

JAVA
613
字号
    public AttributePSVI getAttributePSVI(int index) {        return ((PSVIProvider)xmlReader).getAttributePSVI(index);    }    public AttributePSVI getAttributePSVIByName(String uri, String localname) {        return ((PSVIProvider)xmlReader).getAttributePSVIByName(uri, localname);    }        /**     * Extension of SAXParser. This class tracks changes to      * features and properties to allow the parser to be reset to     * its initial state.     */    public static class JAXPSAXParser extends com.sun.org.apache.xerces.internal.parsers.SAXParser {                private HashMap fInitFeatures = new HashMap();        private HashMap fInitProperties = new HashMap();        private SAXParserImpl fSAXParser;        public JAXPSAXParser() {            super();        }                JAXPSAXParser(SAXParserImpl saxParser) {            super();            fSAXParser = saxParser;        }                /**         * Override SAXParser's setFeature method to track the initial state         * of features. This keeps us from affecting the performance of the         * SAXParser when it is created with XMLReaderFactory.         */        public synchronized void setFeature(String name, boolean value)            throws SAXNotRecognizedException, SAXNotSupportedException {            if (name == null) {                // TODO: Add localized error message.                throw new NullPointerException();             }            if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {                try {                    setProperty(SECURITY_MANAGER, value ? new SecurityManager() : null);                }                catch (SAXNotRecognizedException exc) {                    // If the property is not supported                     // re-throw the exception if the value is true.                    if (value) {                        throw exc;                    }                }                catch (SAXNotSupportedException exc) {                    // If the property is not supported                     // re-throw the exception if the value is true.                    if (value) {                        throw exc;                    }                }                return;            }            if (!fInitFeatures.containsKey(name)) {                boolean current = super.getFeature(name);                fInitFeatures.put(name, current ? Boolean.TRUE : Boolean.FALSE);             }            /** Forward feature to the schema validator if there is one. **/            if (fSAXParser != null && fSAXParser.fSchemaValidator != null) {                setSchemaValidatorFeature(name, value);            }            super.setFeature(name, value);                       }                public synchronized boolean getFeature(String name)            throws SAXNotRecognizedException, SAXNotSupportedException {            if (name == null) {                // TODO: Add localized error message.                throw new NullPointerException();             }            if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {                try {                    return (super.getProperty(SECURITY_MANAGER) != null);                }                // If the property is not supported the value must be false.                catch (SAXException exc) {                    return false;                }            }            return super.getFeature(name);        }                /**         * Override SAXParser's setProperty method to track the initial state         * of properties. This keeps us from affecting the performance of the         * SAXParser when it is created with XMLReaderFactory.         */        public synchronized void setProperty(String name, Object value)            throws SAXNotRecognizedException, SAXNotSupportedException {            if (name == null) {                // TODO: Add localized error message.                throw new NullPointerException();             }            if (fSAXParser != null) {                // JAXP 1.2 support                if (JAXP_SCHEMA_LANGUAGE.equals(name)) {                    // The spec says if a schema is given via SAXParserFactory                    // the JAXP 1.2 properties shouldn't be allowed.                    if (fSAXParser.grammar != null) {                        throw new SAXNotSupportedException(                                SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), "schema-already-specified", new Object[] {name}));                    }                    if ( W3C_XML_SCHEMA.equals(value) ) {                        //None of the properties will take effect till the setValidating(true) has been called                                                                                if( fSAXParser.isValidating() ) {                            fSAXParser.schemaLanguage = W3C_XML_SCHEMA;                            setFeature(XMLSCHEMA_VALIDATION_FEATURE, true);                            // this will allow the parser not to emit DTD-related                            // errors, as the spec demands                            if (!fInitProperties.containsKey(JAXP_SCHEMA_LANGUAGE)) {                                fInitProperties.put(JAXP_SCHEMA_LANGUAGE, super.getProperty(JAXP_SCHEMA_LANGUAGE));                            }                            super.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);                        }                                            }                     else if (value == null) {                        fSAXParser.schemaLanguage = null;                        setFeature(XMLSCHEMA_VALIDATION_FEATURE, false);                    }                     else {                        // REVISIT: It would be nice if we could format this message                        // using a user specified locale as we do in the underlying                        // XMLReader -- mrglavas                        throw new SAXNotSupportedException(                            SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), "schema-not-supported", null));                    }                    return;                }                 else if (JAXP_SCHEMA_SOURCE.equals(name)) {                    // The spec says if a schema is given via SAXParserFactory                    // the JAXP 1.2 properties shouldn't be allowed.                    if (fSAXParser.grammar != null) {                        throw new SAXNotSupportedException(                                SAXMessageFormatter.formatMessage(fConfiguration.getLocale(), "schema-already-specified", new Object[] {name}));                    }                    String val = (String)getProperty(JAXP_SCHEMA_LANGUAGE);                    if ( val != null && W3C_XML_SCHEMA.equals(val) ) {                        if (!fInitProperties.containsKey(JAXP_SCHEMA_SOURCE)) {                            fInitProperties.put(JAXP_SCHEMA_SOURCE, super.getProperty(JAXP_SCHEMA_SOURCE));                        }                        super.setProperty(name, value);                    }                    else {                        throw new SAXNotSupportedException(                            SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),                             "jaxp-order-not-supported",                             new Object[] {JAXP_SCHEMA_LANGUAGE, JAXP_SCHEMA_SOURCE}));                    }                    return;                }            }            if (!fInitProperties.containsKey(name)) {                fInitProperties.put(name, super.getProperty(name));            }            /** Forward property to the schema validator if there is one. **/            if (fSAXParser != null && fSAXParser.fSchemaValidator != null) {                setSchemaValidatorProperty(name, value);            }            super.setProperty(name, value);        }                public synchronized Object getProperty(String name)            throws SAXNotRecognizedException, SAXNotSupportedException {            if (name == null) {                // TODO: Add localized error message.                throw new NullPointerException();            }            if (fSAXParser != null && JAXP_SCHEMA_LANGUAGE.equals(name)) {                // JAXP 1.2 support                return fSAXParser.schemaLanguage;            }            return super.getProperty(name);        }                synchronized void restoreInitState()            throws SAXNotRecognizedException, SAXNotSupportedException {            Iterator iter;            if (!fInitFeatures.isEmpty()) {                iter = fInitFeatures.entrySet().iterator();                while (iter.hasNext()) {                    Map.Entry entry = (Map.Entry) iter.next();                    String name = (String) entry.getKey();                    boolean value = ((Boolean) entry.getValue()).booleanValue();                    super.setFeature(name, value);                }                fInitFeatures.clear();            }            if (!fInitProperties.isEmpty()) {                iter = fInitProperties.entrySet().iterator();                while (iter.hasNext()) {                    Map.Entry entry = (Map.Entry) iter.next();                    String name = (String) entry.getKey();                    Object value = entry.getValue();                    super.setProperty(name, value);                }                fInitProperties.clear();            }        }                public void parse(InputSource inputSource)            throws SAXException, IOException {            if (fSAXParser != null && fSAXParser.fSchemaValidator != null) {                if (fSAXParser.fSchemaValidationManager != null) {                    fSAXParser.fSchemaValidationManager.reset();                }                resetSchemaValidator();            }            super.parse(inputSource);        }                public void parse(String systemId)             throws SAXException, IOException {            if (fSAXParser != null && fSAXParser.fSchemaValidator != null) {                if (fSAXParser.fSchemaValidationManager != null) {                    fSAXParser.fSchemaValidationManager.reset();                }                resetSchemaValidator();            }            super.parse(systemId);        }                XMLParserConfiguration getXMLParserConfiguration() {            return fConfiguration;        }                void setFeature0(String name, boolean value)            throws SAXNotRecognizedException, SAXNotSupportedException {            super.setFeature(name, value);        }                boolean getFeature0(String name)            throws SAXNotRecognizedException, SAXNotSupportedException {            return super.getFeature(name);        }                void setProperty0(String name, Object value)            throws SAXNotRecognizedException, SAXNotSupportedException {            super.setProperty(name, value);        }                Object getProperty0(String name)            throws SAXNotRecognizedException, SAXNotSupportedException {            return super.getProperty(name);        }                private void setSchemaValidatorFeature(String name, boolean value)            throws SAXNotRecognizedException, SAXNotSupportedException {            try {                fSAXParser.fSchemaValidator.setFeature(name, value);            }            // This should never be thrown from the schema validator.            catch (XMLConfigurationException e) {                String identifier = e.getIdentifier();                if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {                    throw new SAXNotRecognizedException(                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),                         "feature-not-recognized", new Object [] {identifier}));                }                else {                    throw new SAXNotSupportedException(                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),                         "feature-not-supported", new Object [] {identifier}));                }            }        }                private void setSchemaValidatorProperty(String name, Object value)             throws SAXNotRecognizedException, SAXNotSupportedException {            try {                fSAXParser.fSchemaValidator.setProperty(name, value);            }            // This should never be thrown from the schema validator.            catch (XMLConfigurationException e) {                String identifier = e.getIdentifier();                if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {                    throw new SAXNotRecognizedException(                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),                         "property-not-recognized", new Object [] {identifier}));                }                else {                    throw new SAXNotSupportedException(                        SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),                         "property-not-supported", new Object [] {identifier}));                }            }        }                private void resetSchemaValidator() throws SAXException {            try {                fSAXParser.fSchemaValidator.reset(fSAXParser.fSchemaValidatorComponentManager);            }            // This should never be thrown from the schema validator.            catch (XMLConfigurationException e) {                throw new SAXException(e);            }        }    }}

⌨️ 快捷键说明

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