All Downloads are FREE. Search and download functionalities are using the official Maven repository.

samples.sax.SAXParsingSample Maven / Gradle / Ivy

The newest version!
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2004, 2023 Oracle and/or its affiliates. All rights reserved.
 *
 * Oracle licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package samples.sax;

import org.xml.sax.helpers.DefaultHandler;
import com.sun.xml.fastinfoset.sax.SAXDocumentParser;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

/** 

Parses a FI document using SAXDocumentParser.

* The sample parses data/inv1a.finf as specified in the build.xml and handles SAX events * to display corresponding content in XML format. The sample class entends DefaultHandler * interface making itself a ContentHandler. Since the FastInfoset SAX package does not * implement factory, a document parser is instantiated directly. The sample class implements * some major event-handling methods as defined in the ContentHandler, such as startDocument, * endDocument, startElement, * endElement, and characters. In this sample, these methods simply write out the content * to System.out. */ public class SAXParsingSample extends DefaultHandler { static private Writer out; StringBuffer textBuffer; /** Starts the sample. The sample takes a FI document and parses it using SAXDocumentParser in * the fastinfoset package * * @param argv FI document filename */ @SuppressWarnings("CallToThreadDumpStack") public static void main(String argv[]) { if (argv.length != 1) { System.err.println("Usage: FastInfosetParser filename"); System.exit(1); } // instantiate event handler DefaultHandler handler = new SAXParsingSample(); try { // Set up output stream out = new OutputStreamWriter(System.out, "UTF8"); // Create an inputstream InputStream in = new BufferedInputStream(new FileInputStream(argv[0])); // Instantiate a FI parser SAXDocumentParser parser = new SAXDocumentParser(); parser.setContentHandler(handler); // Start parsing parser.parse(in); } catch (Throwable t) { t.printStackTrace(); } System.exit(0); } /** Creates a new instance of FIParser */ public SAXParsingSample() { } //=========================================================== // SAX DocumentHandler methods //=========================================================== /** Handles startDocument event and prints out file header. * */ @Override public void startDocument() throws SAXException { display(""); displayNewLine(); } /** Handles endDocument event * */ @Override public void endDocument() throws SAXException { try { displayNewLine(); out.flush(); } catch (IOException e) { throw new SAXException("I/O error", e); } } /** Handles startElement event. Prints out any text accumulated * from the characters event before the element, the element name, and * attributes if any. * * @param namespaceURI namespace URI * @param localName The local name (without prefix), or the empty string if Namespace processing is not being performed. * @param qName The qualified name (with prefix), or the empty string if qualified names are not available. * @param attributes The specified or defaulted attributes. */ @Override public void startElement(String namespaceURI, String localName, String qName, Attributes attributes) throws SAXException { // Print out text accumulated from the characters event flushText(); String name; if (localName.isEmpty()) { name = qName; } else { name = localName; } // Print out element name and attributes if any display("<" + name); if (attributes != null) { for (int i = 0; i < attributes.getLength(); i++) { String aName = attributes.getLocalName(i); if ("".equals(aName)) { aName = attributes.getQName(i); } display(" " + aName + "=\"" + attributes.getValue(i) + "\""); } } display(">"); } /** Handles endElement event. Prints out any text accumulated * from the characters event within the element, and then the end element name. * * @param namespaceURI namespace URI * @param localName The local name (without prefix), or the empty string if Namespace processing is not being performed. * @param qName The qualified name (with prefix), or the empty string if qualified names are not available. */ @Override public void endElement(String namespaceURI, String localName, String qName ) throws SAXException { // Print out text accumulated from the characters event flushText(); String name = localName; if ("".equals(name)) { name = qName; } // Print out end element display(""); } /** Handles characters event. Save the text in a buffer for print-out in start/end element. * * @param ch The characters * @param start The start position in the character array. * @param length The number of characters to use from the character array. */ @Override public void characters(char[] ch, int start, int length) throws SAXException { String s = new String(ch, start, length); if (textBuffer == null) { textBuffer = new StringBuffer(s); } else { textBuffer.append(s); } } //=========================================================== // Utility Methods ... //=========================================================== // Display text accumulated in the character buffer private void flushText() throws SAXException { if (textBuffer == null) { return; } display(textBuffer.toString()); textBuffer = null; } // Wrap I/O exceptions in SAX exceptions, to // suit handler signature requirements private void display(String s) throws SAXException { try { out.write(s); out.flush(); } catch (IOException e) { throw new SAXException("I/O error", e); } } // Displays a new line private void displayNewLine() throws SAXException { try { out.write(System.getProperty("line.separator")); } catch (IOException e) { throw new SAXException("I/O error", e); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy