transformerfactoryimpl.java

来自「java jdk 1.4的源码」· Java 代码 · 共 1,073 行 · 第 1/3 页

JAVA
1,073
字号
        try {          m_errorListener.fatalError( ex );          return null;        } catch (TransformerException ex1 ) {          ex=new TransformerConfigurationException(ex1);        }      }      throw ex;    }      }//  /** The identity transform string, for support of newTransformerHandler()//   *  and newTransformer().  *///  private static final String identityTransform =//    "<xsl:stylesheet " + "xmlns:xsl='http://www.w3.org/1999/XSL/Transform' "//    + "version='1.0'>" + "<xsl:template match='/|node()'>"//    + "<xsl:copy-of select='.'/>" + "</xsl:template>" + "</xsl:stylesheet>";////  /** The identity transform Templates, built from identityTransform, //   *  for support of newTransformerHandler() and newTransformer().  *///  private static Templates m_identityTemplate = null;  /**   * Get a TransformerHandler object that can process SAX   * ContentHandler events into a Result.   *   * @param src The source of the transformation instructions.   *   * @return TransformerHandler ready to transform SAX events.   *   * @throws TransformerConfigurationException   */  public TransformerHandler newTransformerHandler()          throws TransformerConfigurationException  {//    if (null == m_identityTemplate)//    {//      synchronized (identityTransform)//      {//        if (null == m_identityTemplate)//        {//          StringReader reader = new StringReader(identityTransform);////          m_identityTemplate = newTemplates(new StreamSource(reader));//        }//      }//    }////    return newTransformerHandler(m_identityTemplate);    return new TransformerIdentityImpl();  }  /**   * Process the source into a Transformer object.  Care must   * be given to know that this object can not be used concurrently   * in multiple threads.   *   * @param source An object that holds a URL, input stream, etc.   *   * @return A Transformer object capable of   * being used for transformation purposes in a single thread.   *   * @throws TransformerConfigurationException May throw this during the parse when it   *            is constructing the Templates object and fails.   */  public Transformer newTransformer(Source source)          throws TransformerConfigurationException  {    try {      Templates tmpl=newTemplates( source );      /* this can happen if an ErrorListener is present and it doesn't         throw any exception in fatalError.          The spec says: "a Transformer must use this interface         instead of throwing an exception" - the newTemplates() does         that, and returns null.      */      if( tmpl==null ) return null;      Transformer transformer = tmpl.newTransformer();      transformer.setURIResolver(m_uriResolver);      return transformer;    } catch( TransformerConfigurationException ex ) {      if( m_errorListener != null ) {        try {          m_errorListener.fatalError( ex );          return null;        } catch( TransformerException ex1 ) {          ex=new TransformerConfigurationException( ex1 );        }      }      throw ex;    }  }  /**   * Create a new Transformer object that performs a copy   * of the source to the result.   *   * @param source An object that holds a URL, input stream, etc.   *   * @return A Transformer object capable of   * being used for transformation purposes in a single thread.   *   * @throws TransformerConfigurationException May throw this during   *            the parse when it is constructing the   *            Templates object and it fails.   */  public Transformer newTransformer() throws TransformerConfigurationException  {//    if (null == m_identityTemplate)//    {//      synchronized (identityTransform)//      {//        if (null == m_identityTemplate)//        {//          StringReader reader = new StringReader(identityTransform);////          m_identityTemplate = newTemplates(new StreamSource(reader));//        }//      }//    }////    return m_identityTemplate.newTransformer();      return new TransformerIdentityImpl();  }  /**   * Process the source into a Templates object, which is likely   * a compiled representation of the source. This Templates object   * may then be used concurrently across multiple threads.  Creating   * a Templates object allows the TransformerFactory to do detailed   * performance optimization of transformation instructions, without   * penalizing runtime transformation.   *   * @param source An object that holds a URL, input stream, etc.   * @return A Templates object capable of being used for transformation purposes.   *   * @throws TransformerConfigurationException May throw this during the parse when it   *            is constructing the Templates object and fails.   */  public Templates newTemplates(Source source)          throws TransformerConfigurationException  {    TemplatesHandler builder = newTemplatesHandler();    String baseID = source.getSystemId();    if (null == baseID)    {      try      {        String currentDir = System.getProperty("user.dir");                if (currentDir.startsWith(java.io.File.separator))          baseID = "file://" + currentDir + java.io.File.separatorChar                   + source.getClass().getName();        else          baseID = "file:///" + currentDir + java.io.File.separatorChar                   + source.getClass().getName();      }      catch (SecurityException se)      {        // For untrusted applet case, user.dir is outside the sandbox         //  and not accessible: just leave baseID as null (-sb & -sc)      }    }    else    {      try      {        baseID = SystemIDResolver.getAbsoluteURI(baseID);      }      catch (TransformerException te)      {        throw new TransformerConfigurationException(te);      }    }    builder.setSystemId(baseID);    if (source instanceof DOMSource)    {      DOMSource dsource = (DOMSource) source;      Node node = dsource.getNode();      if (null != node)        return processFromNode(node, baseID);      else      {        String messageStr = XSLMessages.createMessage(          XSLTErrorResources.ER_ILLEGAL_DOMSOURCE_INPUT, null);        throw new IllegalArgumentException(messageStr);      }    }    try    {      InputSource isource = SAXSource.sourceToInputSource(source);      XMLReader reader = null;      if (source instanceof SAXSource)        reader = ((SAXSource) source).getXMLReader();              boolean isUserReader = (reader != null);      if (null == reader)      {        // Use JAXP1.1 ( if possible )        try        {          javax.xml.parsers.SAXParserFactory factory =            javax.xml.parsers.SAXParserFactory.newInstance();          factory.setNamespaceAware(true);          javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser();          reader = jaxpParser.getXMLReader();        }        catch (javax.xml.parsers.ParserConfigurationException ex)        {          throw new org.xml.sax.SAXException(ex);        }        catch (javax.xml.parsers.FactoryConfigurationError ex1)        {          throw new org.xml.sax.SAXException(ex1.toString());        }        catch (NoSuchMethodError ex2){}        catch (AbstractMethodError ame){}      }      if (null == reader)        reader = XMLReaderFactory.createXMLReader();      // If you set the namespaces to true, we'll end up getting double       // xmlns attributes.  Needs to be fixed.  -sb      // reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);      try      {        if(!isUserReader)          reader.setFeature("http://apache.org/xml/features/validation/dynamic",                            true);      }      catch (org.xml.sax.SAXException ex)      {        // feature not recognized      }      reader.setContentHandler(builder);      reader.parse(isource);    }    catch (org.xml.sax.SAXException se)    {      if (m_errorListener != null)      {        try        {          m_errorListener.fatalError(new TransformerException(se));        }        catch (TransformerException ex1)        {          throw new TransformerConfigurationException(ex1);        }      }      else        throw new TransformerConfigurationException(se.getMessage(), se);    }    catch (Exception e)    {      if (m_errorListener != null)      {        try        {          m_errorListener.fatalError(new TransformerException(e));          return null;        }        catch (TransformerException ex1)        {          throw new TransformerConfigurationException(ex1);        }      }      else        throw new TransformerConfigurationException(e.getMessage(), e);    }    return builder.getTemplates();  }  /**   * The object that implements the URIResolver interface,   * or null.   */  URIResolver m_uriResolver;  /**   * Set an object that will be used to resolve URIs used in   * xsl:import, etc.  This will be used as the default for the   * transformation.   * @param resolver An object that implements the URIResolver interface,   * or null.   */  public void setURIResolver(URIResolver resolver)  {    m_uriResolver = resolver;  }  /**   * Get the object that will be used to resolve URIs used in   * xsl:import, etc.  This will be used as the default for the   * transformation.   *   * @return The URIResolver that was set with setURIResolver.   */  public URIResolver getURIResolver()  {    return m_uriResolver;  }  /** The error listener.   */  private ErrorListener m_errorListener = new DefaultErrorHandler();  /**   * Get the error listener in effect for the TransformerFactory.   *   * @return A non-null reference to an error listener.   */  public ErrorListener getErrorListener()  {    return m_errorListener;  }  /**   * Set an error listener for the TransformerFactory.   *   * @param listener Must be a non-null reference to an ErrorListener.   *   * @throws IllegalArgumentException if the listener argument is null.   */  public void setErrorListener(ErrorListener listener)          throws IllegalArgumentException  {    if (null == listener)      throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_ERRORLISTENER, null));      // "ErrorListener");    m_errorListener = listener;  }}

⌨️ 快捷键说明

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