--- /dev/null 2014-08-20 22:07:45.000000000 -0700 +++ new/test/javax/xml/jaxp/libs/javax/xml/transform/ptests/MyContentHandler.java 2014-08-20 22:07:44.000000000 -0700 @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2014, 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); + } + } +}