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 + -
显示快捷键?