📄 saxnulltransformerfactory.java
字号:
{ systemId = id; } public void setResult (Result result) { if (result.getSystemId () != null) systemId = result.getSystemId (); try { // output to partial SAX event stream? if (result instanceof SAXResult) { SAXResult r = (SAXResult) result; setContentHandler (r.getHandler ()); setProperty (LEXICAL_HANDLER, r.getLexicalHandler ()); // DTD info is filtered out by javax.transform // output to DOM tree? } else if (result instanceof DOMResult) { DomTerminus out = new DomTerminus ((DOMResult) result); setContentHandler (out.getContentHandler ()); setProperty (LEXICAL_HANDLER, out.getProperty (LEXICAL_HANDLER)); // save DTD-derived info, if any. setDTDHandler (out.getDTDHandler ()); setProperty (DECL_HANDLER, out.getProperty (DECL_HANDLER)); // node is saved into result on endDocument() // output to (XML) text? } else if (result instanceof StreamResult) { StreamResult r = (StreamResult) result; XMLWriter out; // FIXME: when do output properties take effect? // encoding, standalone decl, xml/xhtml/... ... // FIXME: maybe put nsfix filter up front try { if (r.getWriter () != null) out = new XMLWriter (r.getWriter ()); else if (r.getOutputStream () != null) out = new XMLWriter (r.getOutputStream ()); else if (r.getSystemId () != null) out = new XMLWriter ( getOutputStream (r.getSystemId ())); else throw new IllegalArgumentException ( "bad StreamResult"); } catch (IOException e) { e.printStackTrace (); // on jdk 1.4, pass the root cause ... throw new IllegalArgumentException (e.getMessage ()); } // out.setExpandingEntities (true); // out.setPrettyPrinting (true); // out.setXhtml (true); setContentHandler (out); setProperty (LEXICAL_HANDLER, out); // save DTD info, if any; why not? setDTDHandler (out); setProperty (DECL_HANDLER, out); } } catch (SAXException e) { // SAXNotSupportedException or SAXNotRecognizedException: // "can't happen" ... but SAXException for DOM build probs // could happen, so ... // on jdk 1.4, pass the root cause ... throw new IllegalArgumentException (e.getMessage ()); } } } // an interface that adds no value static class LocatorAdapter extends LocatorImpl implements SourceLocator { LocatorAdapter (SAXParseException e) { setSystemId (e.getSystemId ()); setPublicId (e.getPublicId ()); setLineNumber (e.getLineNumber ()); setColumnNumber (e.getColumnNumber ()); } } // another interface that adds no value static class ListenerAdapter implements ErrorHandler { NullTransformer transformer; ListenerAdapter (NullTransformer t) { transformer = t; } private TransformerException map (SAXParseException e) { return new TransformerException ( e.getMessage (), new LocatorAdapter (e), e); } public void error (SAXParseException e) throws SAXParseException { try { if (transformer.errListener != null) transformer.errListener.error (map (e)); } catch (TransformerException ex) { transformer.ex = ex; throw e; } } public void fatalError (SAXParseException e) throws SAXParseException { try { if (transformer.errListener != null) transformer.errListener.fatalError (map (e)); else throw map (e); } catch (TransformerException ex) { transformer.ex = ex; throw e; } } public void warning (SAXParseException e) throws SAXParseException { try { if (transformer.errListener != null) transformer.errListener.warning (map (e)); } catch (TransformerException ex) { transformer.ex = ex; throw e; } } } static class NullTransformer extends Transformer { private URIResolver uriResolver; private Properties props = new Properties (); private Hashtable params = new Hashtable (7); ErrorListener errListener = null; TransformerException ex = null; NullHandler handler; NullTransformer () { super (); handler = new NullHandler (this); } public ErrorListener getErrorListener () { return errListener; } public void setErrorListener (ErrorListener e) { errListener = e; } public URIResolver getURIResolver () { return uriResolver; } public void setURIResolver (URIResolver u) { uriResolver = u; } public void setOutputProperties (Properties p) { props = (Properties) p.clone (); } public Properties getOutputProperties () { return (Properties) props.clone (); } public void setOutputProperty (String name, String value) { props.setProperty (name, value); } public String getOutputProperty (String name) { return props.getProperty (name); } public void clearParameters () { params.clear (); } public void setParameter (String name, Object value) { props.put (name, value); } public Object getParameter (String name) { return props.get (name); } public void transform (Source in, Result out) throws TransformerException { try { XMLReader producer; InputSource input; // Input from DOM? if (in instanceof DOMSource) { DOMSource source = (DOMSource) in; if (source.getNode () == null) throw new IllegalArgumentException ("no DOM node"); producer = new DomParser (source.getNode ()); input = null; // Input from SAX? } else if (in instanceof SAXSource) { SAXSource source = (SAXSource) in; producer = source.getXMLReader (); if (producer == null) producer = XMLReaderFactory.createXMLReader (); input = source.getInputSource (); if (input == null) { if (source.getSystemId () != null) input = new InputSource (source.getSystemId ()); else throw new IllegalArgumentException ( "missing SAX input"); } // Input from a stream or something? } else { producer = XMLReaderFactory.createXMLReader (); input = SAXSource.sourceToInputSource (in); if (input == null) throw new IllegalArgumentException ("missing input"); } // preserve original namespace prefixes try { producer.setFeature(EventFilter.FEATURE_URI + "namespace-prefixes", true); } catch (Exception e) { /* ignore */ // FIXME if we couldn't, "NsFix" stage before the output .. } // arrange the output handler.setResult (out); EventFilter.bind (producer, handler); // then parse ... single element pipeline producer.parse (input); } catch (IOException e) { throw new TransformerException ("transform failed", e); } catch (SAXException e) { if (ex == null && ex.getCause () == e) throw ex; else throw new TransformerException ("transform failed", e); } finally { ex = null; } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -