1 16 19 20 21 package com.sun.org.apache.xalan.internal.xsltc.trax; 22 23 import java.io.IOException ; 24 import javax.xml.XMLConstants ; 25 26 import javax.xml.parsers.FactoryConfigurationError ; 27 import javax.xml.parsers.ParserConfigurationException ; 28 import javax.xml.parsers.SAXParser ; 29 import javax.xml.parsers.SAXParserFactory ; 30 import javax.xml.transform.ErrorListener ; 31 import javax.xml.transform.Templates ; 32 import javax.xml.transform.Transformer ; 33 import javax.xml.transform.TransformerConfigurationException ; 34 import javax.xml.transform.sax.SAXResult ; 35 36 import com.sun.org.apache.xml.internal.utils.XMLReaderManager; 37 38 import org.xml.sax.ContentHandler ; 39 import org.xml.sax.InputSource ; 40 import org.xml.sax.SAXException ; 41 import org.xml.sax.XMLReader ; 42 import org.xml.sax.helpers.XMLFilterImpl ; 43 import org.xml.sax.helpers.XMLReaderFactory ; 44 45 50 public class TrAXFilter extends XMLFilterImpl { 51 private Templates _templates; 52 private TransformerImpl _transformer; 53 private TransformerHandlerImpl _transformerHandler; 54 55 public TrAXFilter(Templates templates) throws 56 TransformerConfigurationException 57 { 58 _templates = templates; 59 _transformer = (TransformerImpl) templates.newTransformer(); 60 _transformerHandler = new TransformerHandlerImpl(_transformer); 61 } 62 63 public Transformer getTransformer() { 64 return _transformer; 65 } 66 67 private void createParent() throws SAXException { 68 XMLReader parent = null; 69 try { 70 SAXParserFactory pfactory = SAXParserFactory.newInstance(); 71 pfactory.setNamespaceAware(true); 72 73 if (_transformer.isSecureProcessing()) { 74 try { 75 pfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 76 } 77 catch (SAXException e) {} 78 } 79 80 SAXParser saxparser = pfactory.newSAXParser(); 81 parent = saxparser.getXMLReader(); 82 } 83 catch (ParserConfigurationException e) { 84 throw new SAXException (e); 85 } 86 catch (FactoryConfigurationError e) { 87 throw new SAXException (e.toString()); 88 } 89 90 if (parent == null) { 91 parent = XMLReaderFactory.createXMLReader(); 92 } 93 94 setParent(parent); 96 } 97 98 public void parse (InputSource input) throws SAXException , IOException 99 { 100 XMLReader managedReader = null; 101 102 try { 103 if (getParent() == null) { 104 try { 105 managedReader = XMLReaderManager.getInstance() 106 .getXMLReader(); 107 setParent(managedReader); 108 } catch (SAXException e) { 109 throw new SAXException (e.toString()); 110 } 111 } 112 113 getParent().parse(input); 115 } finally { 116 if (managedReader != null) { 117 XMLReaderManager.getInstance().releaseXMLReader(managedReader); 118 } 119 } 120 } 121 122 public void parse (String systemId) throws SAXException , IOException 123 { 124 parse(new InputSource (systemId)); 125 } 126 127 public void setContentHandler (ContentHandler handler) 128 { 129 _transformerHandler.setResult(new SAXResult (handler)); 130 if (getParent() == null) { 131 try { 132 createParent(); 133 } 134 catch (SAXException e) { 135 return; 136 } 137 } 138 getParent().setContentHandler(_transformerHandler); 139 } 140 141 public void setErrorListener (ErrorListener handler) { } 142 } 143 | Popular Tags |