saxnulltransformerfactory.java

来自「kaffe Java 解释器语言,源码,Java的子集系统,开放源代码」· Java 代码 · 共 540 行 · 第 1/2 页

JAVA
540
字号
	public Transformer getTransformer ()	    { return transformer; }	public String getSystemId ()	    { return systemId; }	public void setSystemId (String id)	    { 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 (			handler.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);		handler.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 + =
减小字号Ctrl + -
显示快捷键?