+++ /dev/null
-package org.xml.sax.demo;
-// SAX demonstration for custom entity resolution.
-// No warranty; no copyright -- use this as you will.
-// $Id: EntityDemo.java,v 1.2 1998/05/01 20:52:16 david Exp $
-
-import org.xml.sax.InputSource;
-import org.xml.sax.Parser;
-import org.xml.sax.SAXException;
-
-import org.xml.sax.helpers.ParserFactory;
-
-import java.io.StringReader;
-import java.net.URL;
-
-
-/**
- * Demonstrate custom entity resolution.
- *
- * <p>Usage: java -Dorg.xml.sax.parser=<var>classname</var> EntityDemo
- * <var>systemId</var></p>
- *
- * <p>If you create an XML document which references an
- * external text entity with the public identifier
- * "-//megginson//TEXT Sample Entity//EN", this application will
- * substitute the string "Entity resolution works!" for the
- * entity's contents:</p>
- *
- * <pre>
- * <!DOCTYPE doc [
- * <!ENTITY ent
- * PUBLIC "-//megginson//TEXT Sample Entity//EN" "ent.xml">
- * ]>
- * <doc>
- * <para>&ent;</para>
- * </doc>
- * </pre>
- *
- * <p>The SAX parser will open a connection to the URI itself.</p>
- *
- * @see DemoHandler
- */
-public class EntityDemo extends DemoHandler {
-
- // This is the Reader that will be
- // substituted for the entity contents.
- StringReader reader =
- new StringReader("Entity resolution works!");
-
- /**
- * Main entry point.
- */
- public static void main (String args[])
- throws Exception
- {
- Parser parser;
- EntityDemo handler;
-
- // Check the command-line usage.
- if (args.length != 1) {
- System.err.println("Usage: java -Dorg.xml.sax.parser=<classname> " +
- "EntityDemo <document>");
- System.exit(2);
- }
-
- // Make the parser, using the value
- // provided in the org.xml.sax.parser property.
- parser = ParserFactory.makeParser();
-
- // Create an event handler, and register
- // it with the SAX parser.
- handler = new EntityDemo();
- parser.setEntityResolver(handler);
- parser.setDTDHandler(handler);
- parser.setDocumentHandler(handler);
- parser.setErrorHandler(handler);
-
- // Parse the document.
- parser.parse(makeAbsoluteURL(args[0]));
- }
-
-
- /**
- * Override resolveEntity().
- *
- * <p>If the public identifier is "-//megginson//TEXT Sample
- * //Entity//EN", instruct the parser to read the entity's
- * contents from the StringReader rather than from the
- * system identifier.</p>
- *
- * <p>The public identifier is safer than the system identifier,
- * since the parser may have resolved the system identifier to
- * an absolute URL.</p>
- *
- * @see org.xml.sax.EntityResolver#resolveEntity
- */
- @Override
- public InputSource resolveEntity (String publicId, String systemId)
- {
- if (publicId != null &&
- publicId.equals("-//megginson//TEXT Sample Entity//EN")) {
- return new InputSource(reader);
- } else {
- return null;
- }
- }
-
-
- /**
- * If a URL is relative, make it absolute against the current directory.
- */
- private static String makeAbsoluteURL (String url)
- throws java.net.MalformedURLException
- {
- URL baseURL;
-
- String currentDirectory = System.getProperty("user.dir");
- String fileSep = System.getProperty("file.separator");
- String file = currentDirectory.replace(fileSep.charAt(0), '/') + '/';
-
- if (file.charAt(0) != '/') {
- file = "/" + file;
- }
- baseURL = new URL("file", null, file);
-
- return new URL(baseURL, url).toString();
- }
-
-}