xsltcdtmmanager.java

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

JAVA
419
字号
     * @param whiteSpaceFilter Enables filtering of whitespace nodes, and may     *                         be null.     * @param incremental true if the DTM should be built incrementally, if     *                    possible.     * @param doIndexing true if the caller considers it worth it to use     *                   indexing schemes.     * @param hasUserReader true if <code>source</code> is a     *                      <code>SAXSource</code> object that has an     *                      <code>XMLReader</code>, that was specified by the     *                      user.     * @param size  Specifies initial size of tables that represent the DTM     * @param buildIdIndex true if the id index table should be built.     *     * @return a non-null DTM reference.     */    public DTM getDTM(Source source, boolean unique,                      DTMWSFilter whiteSpaceFilter, boolean incremental,                      boolean doIndexing, boolean hasUserReader, int size,                      boolean buildIdIndex)    {      return getDTM(source, unique, whiteSpaceFilter, incremental,                    doIndexing, hasUserReader, size,                    buildIdIndex, false);  }    /**     * Get an instance of a DTM, loaded with the content from the     * specified source.  If the unique flag is true, a new instance will     * always be returned.  Otherwise it is up to the DTMManager to return a     * new instance or an instance that it already created and may be being used     * by someone else.     * (I think more parameters will need to be added for error handling, and     * entity resolution).     *     * @param source the specification of the source object.     * @param unique true if the returned DTM must be unique, probably because it     * is going to be mutated.     * @param whiteSpaceFilter Enables filtering of whitespace nodes, and may     *                         be null.     * @param incremental true if the DTM should be built incrementally, if     *                    possible.     * @param doIndexing true if the caller considers it worth it to use     *                   indexing schemes.     * @param hasUserReader true if <code>source</code> is a     *                      <code>SAXSource</code> object that has an     *                      <code>XMLReader</code>, that was specified by the     *                      user.     * @param size  Specifies initial size of tables that represent the DTM     * @param buildIdIndex true if the id index table should be built.     * @param newNameTable true if we want to use a separate ExpandedNameTable     *                     for this DTM.     *     * @return a non-null DTM reference.     */  public DTM getDTM(Source source, boolean unique,		    DTMWSFilter whiteSpaceFilter, boolean incremental,		    boolean doIndexing, boolean hasUserReader, int size,		    boolean buildIdIndex, boolean newNameTable)  {        if(DEBUG && null != source) {            System.out.println("Starting "+			 (unique ? "UNIQUE" : "shared")+			 " source: "+source.getSystemId());        }        int dtmPos = getFirstFreeDTMID();        int documentID = dtmPos << IDENT_DTM_NODE_BITS;        if ((null != source) && source instanceof DOMSource)        {            final DOMSource domsrc = (DOMSource) source;            final org.w3c.dom.Node node = domsrc.getNode();            final DOM2SAX dom2sax = new DOM2SAX(node);                  SAXImpl dtm;            if (size <= 0) {                dtm = new SAXImpl(this, source, documentID,                                  whiteSpaceFilter, null, doIndexing,                                   DTMDefaultBase.DEFAULT_BLOCKSIZE,                                  buildIdIndex, newNameTable);            } else {                dtm = new SAXImpl(this, source, documentID,                                  whiteSpaceFilter, null, doIndexing,                                   size, buildIdIndex, newNameTable);            }                  dtm.setDocumentURI(source.getSystemId());            addDTM(dtm, dtmPos, 0);                  dom2sax.setContentHandler(dtm);                  try {                dom2sax.parse();            }            catch (RuntimeException re) {                throw re;            }            catch (Exception e) {                throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e);            }                  return dtm;        }        else        {            boolean isSAXSource = (null != source)                                  ? (source instanceof SAXSource) : true;            boolean isStreamSource = (null != source)                                  ? (source instanceof StreamSource) : false;            if (isSAXSource || isStreamSource) {                XMLReader reader;                InputSource xmlSource;                if (null == source) {                    xmlSource = null;                    reader = null;                    hasUserReader = false;  // Make sure the user didn't lie                }                else {                    reader = getXMLReader(source);                    xmlSource = SAXSource.sourceToInputSource(source);                    String urlOfSource = xmlSource.getSystemId();                    if (null != urlOfSource) {                        try {                            urlOfSource = SystemIDResolver.getAbsoluteURI(urlOfSource);                        }                        catch (Exception e) {                            // %REVIEW% Is there a better way to send a warning?                            System.err.println("Can not absolutize URL: " + urlOfSource);                        }                        xmlSource.setSystemId(urlOfSource);                    }                }                // Create the basic SAX2DTM.                SAXImpl dtm;                if (size <= 0) {                    dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,			              null, doIndexing, 			              DTMDefaultBase.DEFAULT_BLOCKSIZE,			              buildIdIndex, newNameTable);                } else {                    dtm = new SAXImpl(this, source, documentID, whiteSpaceFilter,			    null, doIndexing, size, buildIdIndex, newNameTable);                }                // Go ahead and add the DTM to the lookup table.  This needs to be                // done before any parsing occurs. Note offset 0, since we've just                // created a new DTM.                addDTM(dtm, dtmPos, 0);                if (null == reader) {                    // Then the user will construct it themselves.                    return dtm;                }                reader.setContentHandler(dtm.getBuilder());                                if (!hasUserReader || null == reader.getDTDHandler()) {                    reader.setDTDHandler(dtm);                }                                if(!hasUserReader || null == reader.getErrorHandler()) {                    reader.setErrorHandler(dtm);                }                try {                    reader.setProperty("http://xml.org/sax/properties/lexical-handler", dtm);                    reader.setFeature(NAMESPACE_PREFIXES_FEATURE, true);                }                catch (SAXNotRecognizedException e){}                catch (SAXNotSupportedException e){}                try {                    reader.parse(xmlSource);                }                catch (RuntimeException re) {                    throw re;                }                catch (Exception e) {                    throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(e);                } finally {                    if (!hasUserReader) {                        releaseXMLReader(reader);                    }                }                if (DUMPTREE) {                    System.out.println("Dumping SAX2DOM");                    dtm.dumpDTM(System.err);                }                return dtm;            }            else {                // It should have been handled by a derived class or the caller                // made a mistake.                throw new DTMException(XMLMessages.createXMLMessage(XMLErrorResources.ER_NOT_SUPPORTED, new Object[]{source}));            }        }    }}

⌨️ 快捷键说明

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