/* * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.xml.transform.ptests; import org.xml.sax.ContentHandler; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.Locator; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; /** * A customized ContentHandler. It writes whole XML file with extra tag on every * XML elements. */ public class MyContentHandler implements ContentHandler { /** * FileWrite to write content to. */ private final BufferedWriter bWriter; /** * Create FileWiter for the processing. * @param fileName Output file name. * @throws org.xml.sax.SAXException */ public MyContentHandler(String fileName) throws SAXException { try { bWriter = new BufferedWriter(new FileWriter(fileName)); } catch (IOException ex) { throw new SAXException("Open file error", ex); } } /** * Do nothing when set document locator. */ @Override public void setDocumentLocator (Locator locator) { } /** * Open the output file when start to process the document. Write a * startDocument tag to output File if opening file successfully. * @throws SAXException if file writing failed. */ @Override public void startDocument () throws SAXException { //Bug # 4448884 filed. setDocumentLocator method should be called //first. The bug won't be fixed. So startDocument is the next method println("startDocument"); } /** * Write a startDocument tag to output File after processing whole document. * Follow with closing the output file. * @throws SAXException if file writing failed. */ @Override public void endDocument() throws SAXException { println("endDocument"); try { bWriter.flush(); bWriter.close(); } catch (IOException ex) { throw new SAXException("Close file error", ex); } } /** * Write a startPrefixMapping appending with prefix and URI to output File * before entering the scope of a prefix-URI mapping. * @param prefix the Namespace prefix being declared. * @param uri the Namespace URI the prefix is mapped to. * @throws SAXException if file writing failed. */ @Override public void startPrefixMapping (String prefix, String uri) throws SAXException { println("startPrefixMapping: " + prefix + ", " + uri); } /** * Write a endPrefixMapping appending with prefix to output File after a * prefix-URI mapping. * @param prefix the Namespace prefix being declared. * @throws SAXException if file writing failed. */ @Override public void endPrefixMapping (String prefix) throws SAXException { println("endPrefixMapping: " + prefix); } /** * Write a startElement appending with namespaceURI,localName,qName and * iteration on attributes to output File when start processing element. * @param namespaceURI the Namespace URI. * @param localName the local name (without prefix). * @param qName the qualified name (with prefix). * @param atts the attributes attached to the element. * @throws SAXException if file writing failed. */ @Override public void startElement (String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { String str = "startElement: " + namespaceURI + ", " + namespaceURI + ", " + qName; int n = atts.getLength(); for(int i = 0; i < n; i++) { str = str + ", " + atts.getQName(i); } println(str); } /** * Write a startElement appending with namespaceURI,qName and to output File * after processing element finished. * @param namespaceURI the Namespace URI. * @param localName the local name (without prefix). * @param qName the qualified name (with prefix). * @throws SAXException if file writing failed. */ @Override public void endElement (String namespaceURI, String localName, String qName) throws SAXException { println("endElement: " + namespaceURI + ", " + namespaceURI + ", " + qName); } /** * Write characters tag to file when receive character data. * @param ch the characters from the XML document * @param start the start position in the array * @param length the number of characters to read from the array * @throws SAXException if file writing failed. */ @Override public void characters (char ch[], int start, int length) throws SAXException { println("characters"); } /** * Write ignorableWhitespace tag to file when receive notification of * ignorable whitespace in element content. * @param ch an array holds all ignorable whitespace. * @param start start position of ignorable whitespace. * @param length length of ignorable whitespace. * @throws SAXException if file writing failed. */ @Override public void ignorableWhitespace (char ch[], int start, int length) throws SAXException { println("ignorableWhitespace"); } /** * Write processingInstruction tag when receive notification of a processing * instruction. * @param target the processing instruction target * @param data the processing instruction data, or null if none was * supplied. The data does not include any whitespace * separating it from the target. * @throws SAXException if file writing failed. */ @Override public void processingInstruction (String target, String data) throws SAXException { println("processingInstruction: " + target + ", " + target); } /** * Write the entity name to file when receive notification of a skipped entity. * @param name entity name that skipped * @throws SAXException if file writing failed. */ @Override public void skippedEntity (String name) throws SAXException { println("skippedEntity: " + name); } /** * Print a string output to file along with a new line. * @param output string needed to be written to file. * @throws SAXException if file writing failed. */ private void println(String output) throws SAXException { try { bWriter.write(output, 0, output.length()); bWriter.newLine(); } catch (IOException ex) { throw new SAXException("bWriter error", ex); } } }