funcdocument.java

来自「java jdk 1.4的源码」· Java 代码 · 共 507 行 · 第 1/2 页

JAVA
507
字号
  /**   * Get the document from the given URI and base   *   * @param xctxt The XPath runtime state.   * @param context The current context node   * @param uri Relative(?) URI of the document   * @param base Base to resolve relative URI from.   *   * @return The document Node pointing to the document at the given URI   * or null   *   * @throws javax.xml.transform.TransformerException   */  int getDoc(XPathContext xctxt, int context, String uri, String base)          throws javax.xml.transform.TransformerException  {    // System.out.println("base: "+base+", uri: "+uri);    SourceTreeManager treeMgr = xctxt.getSourceTreeManager();    Source source;       int newDoc;    try    {      source = treeMgr.resolveURI(base, uri, xctxt.getSAXLocator());      newDoc = treeMgr.getNode(source);    }    catch (IOException ioe)    {      throw new TransformerException(ioe.getMessage(),         (SourceLocator)xctxt.getSAXLocator(), ioe);    }    catch(TransformerException te)    {      throw new TransformerException(te);    }    if (DTM.NULL != newDoc)      return newDoc;    // If the uri length is zero, get the uri of the stylesheet.    if (uri.length() == 0)    {      // Hmmm... this seems pretty bogus to me... -sb      uri = xctxt.getNamespaceContext().getBaseIdentifier();      try      {        source = treeMgr.resolveURI(base, uri, xctxt.getSAXLocator());      }      catch (IOException ioe)      {        throw new TransformerException(ioe.getMessage(),           (SourceLocator)xctxt.getSAXLocator(), ioe);      }    }    String diagnosticsString = null;    try    {      if ((null != uri) && (uri.toString().length() > 0))      {        newDoc = treeMgr.getSourceTree(source, xctxt.getSAXLocator(), xctxt);        // System.out.println("newDoc: "+((Document)newDoc).getDocumentElement().getNodeName());      }      else        warn(xctxt, XSLTErrorResources.WG_CANNOT_MAKE_URL_FROM,             new Object[]{ ((base == null) ? "" : base) + uri });  //"Can not make URL from: "+((base == null) ? "" : base )+uri);    }    catch (Throwable throwable)    {      // throwable.printStackTrace();      newDoc = DTM.NULL;      // path.warn(XSLTErrorResources.WG_ENCODING_NOT_SUPPORTED_USING_JAVA, new Object[]{((base == null) ? "" : base )+uri}); //"Can not load requested doc: "+((base == null) ? "" : base )+uri);      while (throwable             instanceof org.apache.xml.utils.WrappedRuntimeException)      {        throwable =          ((org.apache.xml.utils.WrappedRuntimeException) throwable).getException();      }      if ((throwable instanceof NullPointerException)              || (throwable instanceof ClassCastException))      {        throw new org.apache.xml.utils.WrappedRuntimeException(          (Exception) throwable);      }      StringWriter sw = new StringWriter();      PrintWriter diagnosticsWriter = new PrintWriter(sw);      if (throwable instanceof TransformerException)      {        TransformerException spe = (TransformerException) throwable;        {          Throwable e = spe;          while (null != e)          {            if (null != e.getMessage())            {              diagnosticsWriter.println(" (" + e.getClass().getName() + "): "                                        + e.getMessage());            }            if (e instanceof TransformerException)            {              TransformerException spe2 = (TransformerException) e;              SourceLocator locator = spe2.getLocator();              if ((null != locator) && (null != locator.getSystemId()))                diagnosticsWriter.println("   ID: " + locator.getSystemId()                                          + " Line #" + locator.getLineNumber()                                          + " Column #"                                          + locator.getColumnNumber());              e = spe2.getException();              if (e instanceof org.apache.xml.utils.WrappedRuntimeException)                e = ((org.apache.xml.utils.WrappedRuntimeException) e).getException();            }            else              e = null;          }        }      }      else      {        diagnosticsWriter.println(" (" + throwable.getClass().getName()                                  + "): " + throwable.getMessage());      }      diagnosticsString = throwable.getMessage(); //sw.toString();    }    if (DTM.NULL == newDoc)    {      // System.out.println("what?: "+base+", uri: "+uri);      if (null != diagnosticsString)      {        warn(xctxt, XSLTErrorResources.WG_CANNOT_LOAD_REQUESTED_DOC,             new Object[]{ diagnosticsString });  //"Can not load requested doc: "+((base == null) ? "" : base )+uri);      }      else        warn(xctxt, XSLTErrorResources.WG_CANNOT_LOAD_REQUESTED_DOC,             new Object[]{               uri == null               ? ((base == null) ? "" : base) + uri : uri.toString() });  //"Can not load requested doc: "+((base == null) ? "" : base )+uri);    }    else    {      // %REVIEW%      // TBD: What to do about XLocator?      // xctxt.getSourceTreeManager().associateXLocatorToNode(newDoc, url, null);    }    return newDoc;  }  /**   * Tell the user of an error, and probably throw an   * exception.   *   * @param xctxt The XPath runtime state.   * @param msg The error message key   * @param args Arguments to be used in the error message   * @throws XSLProcessorException thrown if the active ProblemListener and XPathContext decide   * the error condition is severe enough to halt processing.   *   * @throws javax.xml.transform.TransformerException   */  public void error(XPathContext xctxt, String msg, Object args[])          throws javax.xml.transform.TransformerException  {    String formattedMsg = XSLMessages.createMessage(msg, args);    ErrorListener errHandler = xctxt.getErrorListener();    TransformerException spe = new TransformerException(formattedMsg,                              (SourceLocator)xctxt.getSAXLocator());    if (null != errHandler)      errHandler.error(spe);    else      System.out.println(formattedMsg);  }  /**   * Warn the user of a problem.   *   * @param xctxt The XPath runtime state.   * @param msg Warning message key   * @param args Arguments to be used in the warning message   * @throws XSLProcessorException thrown if the active ProblemListener and XPathContext decide   * the error condition is severe enough to halt processing.   *   * @throws javax.xml.transform.TransformerException   */  public void warn(XPathContext xctxt, String msg, Object args[])          throws javax.xml.transform.TransformerException  {    String formattedMsg = XSLMessages.createWarning(msg, args);    ErrorListener errHandler = xctxt.getErrorListener();    TransformerException spe = new TransformerException(formattedMsg,                              (SourceLocator)xctxt.getSAXLocator());    if (null != errHandler)      errHandler.warning(spe);    else      System.out.println(formattedMsg);  } /**   * Overide the superclass method to allow one or two arguments.   *   *   * @param argNum Number of arguments passed in to this function   *   * @throws WrongNumberArgsException   */  public void checkNumberArgs(int argNum) throws WrongNumberArgsException  {    if ((argNum < 1) || (argNum > 2))      reportWrongNumberArgs();  }    /**   * Constructs and throws a WrongNumberArgException with the appropriate   * message for this function object.   *   * @throws WrongNumberArgsException   */  protected void reportWrongNumberArgs() throws WrongNumberArgsException {      throw new WrongNumberArgsException(XSLMessages.createMessage(XSLTErrorResources.ER_ONE_OR_TWO, null)); //"1 or 2");  }    /**   * Tell if the expression is a nodeset expression.  In other words, tell    * if you can execute {@link asNode() asNode} without an exception.   * @return true if the expression can be represented as a nodeset.   */  public boolean isNodesetExpr()  {    return true;  }}

⌨️ 快捷键说明

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