1/* 2 * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 * 25 * THIS FILE WAS MODIFIED BY SUN MICROSYSTEMS, INC. 26 */ 27 28package com.sun.xml.internal.fastinfoset.tools; 29 30import com.sun.xml.internal.fastinfoset.sax.SAXDocumentSerializer; 31import java.io.InputStream; 32import java.io.OutputStream; 33import javax.xml.parsers.SAXParser; 34import javax.xml.parsers.SAXParserFactory; 35import java.io.Reader; 36import org.xml.sax.InputSource; 37import org.xml.sax.XMLReader; 38 39public class XML_SAX_FI extends TransformInputOutput { 40 41 public XML_SAX_FI() { 42 } 43 44 public void parse(InputStream xml, OutputStream finf, String workingDirectory) throws Exception { 45 SAXParser saxParser = getParser(); 46 SAXDocumentSerializer documentSerializer = getSerializer(finf); 47 48 XMLReader reader = saxParser.getXMLReader(); 49 reader.setProperty("http://xml.org/sax/properties/lexical-handler", documentSerializer); 50 reader.setContentHandler(documentSerializer); 51 52 if (workingDirectory != null) { 53 reader.setEntityResolver(createRelativePathResolver(workingDirectory)); 54 } 55 reader.parse(new InputSource(xml)); 56 } 57 58 public void parse(InputStream xml, OutputStream finf) throws Exception { 59 parse(xml, finf, null); 60 } 61 62 public void convert(Reader reader, OutputStream finf) throws Exception { 63 InputSource is = new InputSource(reader); 64 65 SAXParser saxParser = getParser(); 66 SAXDocumentSerializer documentSerializer = getSerializer(finf); 67 68 saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", documentSerializer); 69 saxParser.parse(is, documentSerializer); 70 } 71 72 private SAXParser getParser() { 73 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); 74 saxParserFactory.setNamespaceAware(true); 75 try { 76 return saxParserFactory.newSAXParser(); 77 } catch (Exception e) { 78 return null; 79 } 80 } 81 82 private SAXDocumentSerializer getSerializer(OutputStream finf) { 83 SAXDocumentSerializer documentSerializer = new SAXDocumentSerializer(); 84 documentSerializer.setOutputStream(finf); 85 return documentSerializer; 86 } 87 88 public static void main(String[] args) throws Exception { 89 XML_SAX_FI s = new XML_SAX_FI(); 90 s.parse(args); 91 } 92} 93