1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 */ 4 /* 5 * Licensed to the Apache Software Foundation (ASF) under one or more 6 * contributor license agreements. See the NOTICE file distributed with 7 * this work for additional information regarding copyright ownership. 8 * The ASF licenses this file to You under the Apache License, Version 2.0 9 * (the "License"); you may not use this file except in compliance with 10 * the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, software 15 * distributed under the License is distributed on an "AS IS" BASIS, 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17 * See the License for the specific language governing permissions and 18 * limitations under the License. 19 */ 20 21 22 package com.sun.org.apache.xalan.internal.xsltc.trax; 23 24 import java.io.IOException; 25 26 import javax.xml.transform.ErrorListener; 27 import javax.xml.transform.Templates; 28 import javax.xml.transform.Transformer; 29 import javax.xml.transform.TransformerConfigurationException; 30 import javax.xml.transform.sax.SAXResult; 31 32 import com.sun.org.apache.xml.internal.utils.XMLReaderManager; 33 import jdk.xml.internal.JdkXmlUtils; 34 35 import org.xml.sax.ContentHandler; 36 import org.xml.sax.InputSource; 37 import org.xml.sax.SAXException; 38 import org.xml.sax.XMLReader; 39 import org.xml.sax.helpers.XMLFilterImpl; 40 41 /** 42 * skeleton extension of XMLFilterImpl for now. 43 * @author Santiago Pericas-Geertsen 44 * @author G. Todd Miller 45 */ 46 public class TrAXFilter extends XMLFilterImpl { 47 private Templates _templates; 48 private TransformerImpl _transformer; 49 private TransformerHandlerImpl _transformerHandler; 50 private boolean _overrideDefaultParser; 51 52 public TrAXFilter(Templates templates) throws 53 TransformerConfigurationException 54 { 55 _templates = templates; 56 _transformer = (TransformerImpl) templates.newTransformer(); 57 _transformerHandler = new TransformerHandlerImpl(_transformer); 58 _overrideDefaultParser = _transformer.overrideDefaultParser(); 59 } 60 61 public Transformer getTransformer() { 62 return _transformer; 63 } 64 65 private void createParent() throws SAXException { 66 XMLReader parent = JdkXmlUtils.getXMLReader(_overrideDefaultParser, 67 _transformer.isSecureProcessing()); 68 69 // make this XMLReader the parent of this filter 70 setParent(parent); 71 } 72 73 @Override 74 public void parse (InputSource input) throws SAXException, IOException 75 { 76 XMLReader managedReader = null; 77 78 try { 79 if (getParent() == null) { 80 try { 81 managedReader = XMLReaderManager.getInstance(_overrideDefaultParser) 82 .getXMLReader(); 83 setParent(managedReader); 84 } catch (SAXException e) { 85 throw new SAXException(e.toString()); 86 } 87 } 88 89 // call parse on the parent 90 getParent().parse(input); 91 } finally { 92 if (managedReader != null) { 93 XMLReaderManager.getInstance(_overrideDefaultParser).releaseXMLReader(managedReader); 94 } 95 } 96 } 97 98 public void parse (String systemId) throws SAXException, IOException 99 { 100 parse(new InputSource(systemId)); 101 } 102 103 public void setContentHandler (ContentHandler handler) 104 { 105 _transformerHandler.setResult(new SAXResult(handler)); 106 if (getParent() == null) { 107 try { 108 createParent(); 109 } 110 catch (SAXException e) { 111 return; 112 } 113 } 114 getParent().setContentHandler(_transformerHandler); 115 } 116 117 public void setErrorListener (ErrorListener handler) { } 118 }