xmlschemaloader.java

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

JAVA
1,299
字号
		try {			fJAXPSource = componentManager.getProperty(JAXP_SCHEMA_SOURCE);			fJAXPProcessed = false;		} catch (XMLConfigurationException e) {			fJAXPSource = null;			fJAXPProcessed = false;		}				// clear grammars, and put the one for schema namespace there		try {			fGrammarPool = (XMLGrammarPool) componentManager.getProperty(XMLGRAMMAR_POOL);		} catch (XMLConfigurationException e) {			fGrammarPool = null;		}		        initGrammarBucket();		// get continue-after-fatal-error feature		try {			boolean fatalError = componentManager.getFeature(CONTINUE_AFTER_FATAL_ERROR);			fErrorReporter.setFeature(CONTINUE_AFTER_FATAL_ERROR, fatalError);		} catch (XMLConfigurationException e) {		}        // set full validation to false                try {            fIsCheckedFully = componentManager.getFeature(SCHEMA_FULL_CHECKING);        }        catch (XMLConfigurationException e){            fIsCheckedFully = false;        }        				fSchemaHandler.reset(componentManager);		 	}		private void initGrammarBucket(){		if(fGrammarPool != null) {			Grammar [] initialGrammars = fGrammarPool.retrieveInitialGrammarSet(XMLGrammarDescription.XML_SCHEMA);			for (int i = 0; i < initialGrammars.length; i++) {				// put this grammar into the bucket, along with grammars				// imported by it (directly or indirectly)				if (!fGrammarBucket.putGrammar((SchemaGrammar)(initialGrammars[i]), true)) {					// REVISIT: a conflict between new grammar(s) and grammars					// in the bucket. What to do? A warning? An exception?					fErrorReporter.reportError(XSMessageFormatter.SCHEMA_DOMAIN,																 "GrammarConflict", null,																 XMLErrorReporter.SEVERITY_WARNING);				}			}		}	}		    /* (non-Javadoc)     * @see com.sun.org.apache.xerces.internal.xs.XSLoader#getConfig()     */    public DOMConfiguration getConfig() {        return this;    }    /* (non-Javadoc)     * @see com.sun.org.apache.xerces.internal.xs.XSLoader#load(org.w3c.dom.ls.LSInput)     */    public XSModel load(LSInput is) {        try {            Grammar g = loadGrammar(dom2xmlInputSource(is));            return ((XSGrammar) g).toXSModel();        } catch (Exception e) {            if (fErrorHandler != null) {                DOMErrorImpl error = new DOMErrorImpl();                error.fException = e;                error.fMessage = e.getMessage();                error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;                fErrorHandler.getErrorHandler().handleError(error);            }            return null;        }    }    /* (non-Javadoc)     * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadInputList(com.sun.org.apache.xerces.internal.xs.DOMInputList)     */    public XSModel loadInputList(LSInputList is) {        int length = is.getLength();        if (length == 0) {            return null;        }        SchemaGrammar[] gs = new SchemaGrammar[length];        for (int i = 0; i < length; i++) {            try {                gs[i] = (SchemaGrammar) loadGrammar(dom2xmlInputSource(is.item(i)));            } catch (Exception e) {                if (fErrorHandler != null) {                    DOMErrorImpl error = new DOMErrorImpl();                    error.fException = e;                    error.fMessage = e.getMessage();                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;                    fErrorHandler.getErrorHandler().handleError(error);                }                return null;            }        }        return new XSModelImpl(gs);    }    /* (non-Javadoc)     * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadURI(java.lang.String)     */    public XSModel loadURI(String uri) {    	try {			Grammar g = loadGrammar(new XMLInputSource(null, uri, null));			return ((XSGrammar)g).toXSModel();    	}    	catch (Exception e){			if (fErrorHandler != null) {				DOMErrorImpl error = new DOMErrorImpl();				error.fException = e;				error.fMessage = e.getMessage();				error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;				fErrorHandler.getErrorHandler().handleError(error);			}    		return null;    	}    }    /* (non-Javadoc)     * @see com.sun.org.apache.xerces.internal.xs.XSLoader#loadURIList(com.sun.org.apache.xerces.internal.xs.StringList)     */    public XSModel loadURIList(StringList uriList) {        int length = uriList.getLength();        if (length == 0) {            return null;        }        SchemaGrammar[] gs = new SchemaGrammar[length];        for (int i = 0; i < length; i++) {            try {                gs[i] =                    (SchemaGrammar) loadGrammar(new XMLInputSource(null, uriList.item(i), null));            } catch (Exception e) {                if (fErrorHandler != null) {                    DOMErrorImpl error = new DOMErrorImpl();                    error.fException = e;                    error.fMessage = e.getMessage();                    error.fSeverity = DOMError.SEVERITY_FATAL_ERROR;                    fErrorHandler.getErrorHandler().handleError(error);                }                return null;            }        }        return new XSModelImpl(gs);    }    /* (non-Javadoc)     * @see org.w3c.dom.DOMConfiguration#canSetParameter(java.lang.String, java.lang.Object)     */    public boolean canSetParameter(String name, Object value) {		if(value instanceof Boolean){//			boolean state = ((Boolean)value).booleanValue();			if (name.equals(Constants.DOM_VALIDATE) ||			    name.equals(SCHEMA_FULL_CHECKING) ||			    name.equals(CONTINUE_AFTER_FATAL_ERROR) ||			    name.equals(ALLOW_JAVA_ENCODINGS) ||			    name.equals(STANDARD_URI_CONFORMANT_FEATURE)){			    	return true;			}			return false;					}		if (name.equals(Constants.DOM_ERROR_HANDLER)||		    name.equals(SYMBOL_TABLE) ||			name.equals(ERROR_REPORTER) ||			name.equals(ERROR_HANDLER) ||			name.equals(ENTITY_RESOLVER) ||			name.equals(XMLGRAMMAR_POOL) ||			name.equals(SCHEMA_LOCATION) ||			name.equals(SCHEMA_NONS_LOCATION) ||			name.equals(JAXP_SCHEMA_SOURCE)){				return true;		}        return false;    }    /* (non-Javadoc)     * @see org.w3c.dom.DOMConfiguration#getParameter(java.lang.String)     */    public Object getParameter(String name) throws DOMException {		if (name.equals(Constants.DOM_ERROR_HANDLER)){			if (fErrorHandler != null){				return fErrorHandler.getErrorHandler();			}		}        try {            boolean feature = getFeature(name);            return (feature) ? Boolean.TRUE : Boolean.FALSE;        } catch (Exception e) {            Object property;            try {                property = getProperty(name);                return property;            } catch (Exception ex) {                String msg =                    DOMMessageFormatter.formatMessage(                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);            }        }    }    /* (non-Javadoc)     * @see org.w3c.dom.DOMConfiguration#getParameterNames()     */    public DOMStringList getParameterNames() {        if (fRecognizedParameters == null){        	Vector v = new Vector();			v.add("validate");			v.add(SYMBOL_TABLE);			v.add(ERROR_REPORTER);			v.add(ERROR_HANDLER);			v.add(ENTITY_RESOLVER);			v.add(XMLGRAMMAR_POOL);			v.add(SCHEMA_LOCATION);			v.add(SCHEMA_NONS_LOCATION);			v.add(JAXP_SCHEMA_SOURCE);			v.add(SCHEMA_FULL_CHECKING);			v.add(CONTINUE_AFTER_FATAL_ERROR);			v.add(ALLOW_JAVA_ENCODINGS);			v.add(STANDARD_URI_CONFORMANT_FEATURE);        	fRecognizedParameters = new DOMStringListImpl(v);      	        }        return fRecognizedParameters;    }    /* (non-Javadoc)     * @see org.w3c.dom.DOMConfiguration#setParameter(java.lang.String, java.lang.Object)     */    public void setParameter(String name, Object value) throws DOMException {        if (value instanceof Boolean) {            boolean state = ((Boolean) value).booleanValue();            if (name.equals("validate") && state) {                return;            }            try {                setFeature(name, state);            } catch (Exception e) {                String msg =                    DOMMessageFormatter.formatMessage(                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);            }            return;        }        if (name.equals(Constants.DOM_ERROR_HANDLER)) {            if (value instanceof DOMErrorHandler) {                try {                    fErrorHandler = new DOMErrorHandlerWrapper((DOMErrorHandler) value);                    setErrorHandler(fErrorHandler);                } catch (XMLConfigurationException e) {                }            } else {                // REVISIT: type mismatch                String msg =                    DOMMessageFormatter.formatMessage(                        DOMMessageFormatter.DOM_DOMAIN,                        "FEATURE_NOT_SUPPORTED",                        new Object[] { name });                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);            }            return;        }        try {            setProperty(name, value);        } catch (Exception ex) {            String msg =                DOMMessageFormatter.formatMessage(                    DOMMessageFormatter.DOM_DOMAIN,                    "FEATURE_NOT_SUPPORTED",                    new Object[] { name });            throw new DOMException(DOMException.NOT_SUPPORTED_ERR, msg);        }    }    	private XMLInputSource dom2xmlInputSource(LSInput is) {		// need to wrap the LSInput with an XMLInputSource		XMLInputSource xis = null;		// if there is a string data, use a StringReader		// according to DOM, we need to treat such data as "UTF-16".		if (is.getStringData() != null) {			xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),									 is.getBaseURI(), new StringReader(is.getStringData()),									 "UTF-16");		}		// check whether there is a Reader		// according to DOM, we need to treat such reader as "UTF-16".		else if (is.getCharacterStream() != null) {			xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),									 is.getBaseURI(), is.getCharacterStream(),									 "UTF-16");		}		// check whether there is an InputStream		else if (is.getByteStream() != null) {			xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),									 is.getBaseURI(), is.getByteStream(),									 is.getEncoding());		}		// otherwise, just use the public/system/base Ids		else {			xis = new XMLInputSource(is.getPublicId(), is.getSystemId(),									 is.getBaseURI());		}		return xis;	}} // XMLGrammarLoader

⌨️ 快捷键说明

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