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 + -
显示快捷键?