⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlentitymanager.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    public void setEntityHandler(com.sun.org.apache.xerces.internal.impl.XMLEntityHandler entityHandler) {        fEntityHandler = (XMLEntityHandler) entityHandler;    } // setEntityHandler(XMLEntityHandler)        //this function returns StaxXMLInputSource    public StaxXMLInputSource resolveEntityAsPerStax(XMLResourceIdentifier resourceIdentifier) throws java.io.IOException{                if(resourceIdentifier == null ) return null;                String publicId = resourceIdentifier.getPublicId();        String literalSystemId = resourceIdentifier.getLiteralSystemId();        String baseSystemId = resourceIdentifier.getBaseSystemId();        String expandedSystemId = resourceIdentifier.getExpandedSystemId();        // if no base systemId given, assume that it's relative        // to the systemId of the current scanned entity        // Sometimes the system id is not (properly) expanded.        // We need to expand the system id if:        // a. the expanded one was null; or        // b. the base system id was null, but becomes non-null from the current entity.        boolean needExpand = (expandedSystemId == null);        // REVISIT:  why would the baseSystemId ever be null?  if we        // didn't have to make this check we wouldn't have to reuse the        // fXMLResourceIdentifier object...        if (baseSystemId == null && fCurrentEntity != null && fCurrentEntity.entityLocation != null) {            baseSystemId = fCurrentEntity.entityLocation.getExpandedSystemId();            if (baseSystemId != null)                needExpand = true;        }        if (needExpand)            expandedSystemId = expandSystemId(literalSystemId, baseSystemId,false);                // give the entity resolver a chance        StaxXMLInputSource staxInputSource = null;        XMLInputSource xmlInputSource = null;        XMLResourceIdentifierImpl ri = null;                if (resourceIdentifier instanceof XMLResourceIdentifierImpl) {            ri = (XMLResourceIdentifierImpl)resourceIdentifier;        } else {            fResourceIdentifier.clear();            ri = fResourceIdentifier;        }        ri.setValues(publicId, literalSystemId, baseSystemId, expandedSystemId);        if(DEBUG_RESOLVER){            System.out.println("BEFORE Calling resolveEntity") ;        }                //either of Stax or Xerces would be null        if(fStaxEntityResolver != null){            staxInputSource = fStaxEntityResolver.resolveEntity(ri);        }                if(fEntityResolver != null){            xmlInputSource = fEntityResolver.resolveEntity(ri);        }                if(xmlInputSource != null){            //wrap this XMLInputSource to StaxInputSource            staxInputSource = new StaxXMLInputSource(xmlInputSource);        }                // do default resolution        //this works for both stax & Xerces, if staxInputSource is null, it means parser need to revert to default resolution        if (staxInputSource == null) {            // REVISIT: when systemId is null, I think we should return null.            //          is this the right solution? -SG            //if (systemId != null)            staxInputSource = new StaxXMLInputSource(new XMLInputSource(publicId, literalSystemId, baseSystemId));        }else if(staxInputSource.hasXMLStreamOrXMLEventReader()){            //Waiting for the clarification from EG. - nb        }                if (DEBUG_RESOLVER) {            System.err.println("XMLEntityManager.resolveEntity(" + publicId + ")");            System.err.println(" = " + xmlInputSource);        }                return staxInputSource;            }        /**     * Resolves the specified public and system identifiers. This     * method first attempts to resolve the entity based on the     * EntityResolver registered by the application. If no entity     * resolver is registered or if the registered entity handler     * is unable to resolve the entity, then default entity     * resolution will occur.     *     * @param publicId     The public identifier of the entity.     * @param systemId     The system identifier of the entity.     * @param baseSystemId The base system identifier of the entity.     *                     This is the system identifier of the current     *                     entity and is used to expand the system     *                     identifier when the system identifier is a     *                     relative URI.     *     * @return Returns an input source that wraps the resolved entity.     *         This method will never return null.     *     * @throws IOException  Thrown on i/o error.     * @throws XNIException Thrown by entity resolver to signal an error.     */    public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier) throws IOException, XNIException {        if(resourceIdentifier == null ) return null;        String publicId = resourceIdentifier.getPublicId();        String literalSystemId = resourceIdentifier.getLiteralSystemId();        String baseSystemId = resourceIdentifier.getBaseSystemId();        String expandedSystemId = resourceIdentifier.getExpandedSystemId();        String namespace = resourceIdentifier.getNamespace();                // if no base systemId given, assume that it's relative        // to the systemId of the current scanned entity        // Sometimes the system id is not (properly) expanded.        // We need to expand the system id if:        // a. the expanded one was null; or        // b. the base system id was null, but becomes non-null from the current entity.        boolean needExpand = (expandedSystemId == null);        // REVISIT:  why would the baseSystemId ever be null?  if we        // didn't have to make this check we wouldn't have to reuse the        // fXMLResourceIdentifier object...        if (baseSystemId == null && fCurrentEntity != null && fCurrentEntity.entityLocation != null) {            baseSystemId = fCurrentEntity.entityLocation.getExpandedSystemId();            if (baseSystemId != null)                needExpand = true;        }        if (needExpand)            expandedSystemId = expandSystemId(literalSystemId, baseSystemId,false);                // give the entity resolver a chance        XMLInputSource xmlInputSource = null;                if (fEntityResolver != null) {            resourceIdentifier.setBaseSystemId(baseSystemId);            resourceIdentifier.setExpandedSystemId(expandedSystemId);            xmlInputSource = fEntityResolver.resolveEntity(resourceIdentifier);        }                // do default resolution        // REVISIT: what's the correct behavior if the user provided an entity        // resolver (fEntityResolver != null), but resolveEntity doesn't return        // an input source (xmlInputSource == null)?        // do we do default resolution, or do we just return null? -SG        if (xmlInputSource == null) {            // REVISIT: when systemId is null, I think we should return null.            //          is this the right solution? -SG            //if (systemId != null)            xmlInputSource = new XMLInputSource(publicId, literalSystemId, baseSystemId);        }                if (DEBUG_RESOLVER) {            System.err.println("XMLEntityManager.resolveEntity(" + publicId + ")");            System.err.println(" = " + xmlInputSource);        }                return xmlInputSource;            } // resolveEntity(XMLResourceIdentifier):XMLInputSource        /**     * Starts a named entity.     *     * @param entityName The name of the entity to start.     * @param literal    True if this entity is started within a literal     *                   value.     *     * @throws IOException  Thrown on i/o error.     * @throws XNIException Thrown by entity handler to signal an error.     */    public void startEntity(String entityName, boolean literal)    throws IOException, XNIException {                // was entity declared?        Entity entity = (Entity)fEntityStorage.getDeclaredEntities().get(entityName);        if (entity == null) {            if (fEntityHandler != null) {                String encoding = null;                fResourceIdentifier.clear();                fEntityAugs.removeAllItems();                fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                fEntityHandler.startEntity(entityName, fResourceIdentifier, encoding, fEntityAugs);                fEntityAugs.removeAllItems();                fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                fEntityHandler.endEntity(entityName, fEntityAugs);            }            return;        }                // should we skip external entities?        boolean external = entity.isExternal();        if (external) {            boolean unparsed = entity.isUnparsed();            boolean parameter = entityName.startsWith("%");            boolean general = !parameter;            if (unparsed || (general && !fExternalGeneralEntities) ||                    (parameter && !fExternalParameterEntities)) {                                if (fEntityHandler != null) {                    fResourceIdentifier.clear();                    final String encoding = null;                    Entity.ExternalEntity externalEntity = (Entity.ExternalEntity)entity;                    //REVISIT:  since we're storing expandedSystemId in the                    // externalEntity, how could this have got here if it wasn't already                    // expanded??? - neilg                    String extLitSysId = (externalEntity.entityLocation != null ? externalEntity.entityLocation.getLiteralSystemId() : null);                    String extBaseSysId = (externalEntity.entityLocation != null ? externalEntity.entityLocation.getBaseSystemId() : null);                    String expandedSystemId = expandSystemId(extLitSysId, extBaseSysId);                    fResourceIdentifier.setValues(                            (externalEntity.entityLocation != null ? externalEntity.entityLocation.getPublicId() : null),                            extLitSysId, extBaseSysId, expandedSystemId);                    fEntityAugs.removeAllItems();                    fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                    fEntityHandler.startEntity(entityName, fResourceIdentifier, encoding, fEntityAugs);                    fEntityAugs.removeAllItems();                    fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                    fEntityHandler.endEntity(entityName, fEntityAugs);                }                return;            }        }                // is entity recursive?        int size = fEntityStack.size();        for (int i = size; i >= 0; i--) {            Entity activeEntity = i == size                    ? fCurrentEntity                    : (Entity)fEntityStack.elementAt(i);            if (activeEntity.name == entityName) {                String path = entityName;                for (int j = i + 1; j < size; j++) {                    activeEntity = (Entity)fEntityStack.elementAt(j);                    path = path + " -> " + activeEntity.name;                }                path = path + " -> " + fCurrentEntity.name;                path = path + " -> " + entityName;                fErrorReporter.reportError(this.getEntityScanner(),XMLMessageFormatter.XML_DOMAIN,                        "RecursiveReference",                        new Object[] { entityName, path },                        XMLErrorReporter.SEVERITY_FATAL_ERROR);                                                if (fEntityHandler != null) {                            fResourceIdentifier.clear();                            final String encoding = null;                            if (external) {                                Entity.ExternalEntity externalEntity = (Entity.ExternalEntity)entity;                                // REVISIT:  for the same reason above...                                String extLitSysId = (externalEntity.entityLocation != null ? externalEntity.entityLocation.getLiteralSystemId() : null);                                String extBaseSysId = (externalEntity.entityLocation != null ? externalEntity.entityLocation.getBaseSystemId() : null);                                String expandedSystemId = expandSystemId(extLitSysId, extBaseSysId);                                fResourceIdentifier.setValues(                                        (externalEntity.entityLocation != null ? externalEntity.entityLocation.getPublicId() : null),                                        extLitSysId, extBaseSysId, expandedSystemId);                            }                            fEntityAugs.removeAllItems();                            fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                            fEntityHandler.startEntity(entityName, fResourceIdentifier, encoding, fEntityAugs);                            fEntityAugs.removeAllItems();                            fEntityAugs.putItem(Constants.ENTITY_SKIPPED, Boolean.TRUE);                            fEntityHandler.endEntity(entityName, fEntityAugs);                        }                                                return;            }        }                // resolve external entity        StaxXMLInputSource staxInputSource = null;        XMLInputSource xmlInputSource = null ;                if (external) {            Entity.ExternalEntity externalEntity = (Entity.ExternalEntity)entity;            staxInputSource = resolveEntityAsPerStax(externalEntity.entityLocation);            /** xxx:  Waiting from the EG             * //simply return if there was entity resolver registered and application             * //returns either XMLStreamReader or XMLEventReader.             * if(staxInputSource.hasXMLStreamOrXMLEventReader()) return ;             */            xmlInputSource = staxInputSource.getXMLInputSource() ;        }        // wrap internal entity        else {            Entity.InternalEntity internalEntity = (Entity.InternalEntity)entity;            Reader reader = new StringReader(internalEntity.text);            xmlInputSource = new XMLInputSource(null, null, null, reader, null);        }                // start the entity        startEntity(entityName, xmlInputSource, literal, external);            } // startEntity(String,boolean)        /**     * Starts the document entity. The document entity has the "[xml]"     * pseudo-name.     *     * @param xmlInputSource The input source of the document entity.     *     * @throws IOException  Thrown on i/o error.     * @throws XNIException Thrown by entity handler to signal an error.     */    public void startDocumentEntity(XMLInputSource xmlInputSource)    throws IOException, XNIException {        startEntity(XMLEntity, xmlInputSource, false, true);    } // startDocumentEntity(XMLInputSource)        //xxx these methods are not required.    /**     * Starts the DTD entity. The DTD entity has the "[dtd]"     * pseudo-name.     *     * @param xmlInputSource The input source of the DTD entity.     *     * @throws IOException  Thrown on i/o error.     * @throws XNIException Thrown by entity handler to signal an error.     */    public void startDTDEntity(XMLInputSource xmlInputSource)    throws IOException, XNIException {        startEntity(DTDEntity, xmlInputSource, false, true);    } // startDTDEntity(XMLInputSource)    

⌨️ 快捷键说明

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