Package org.apache.xml.resolver.apps

Source Code of org.apache.xml.resolver.apps.resolver

// resolver.java - A simple command-line test tool for the resolver

/*
* Copyright 2001-2004 The Apache Software Foundation or its licensors,
* as applicable.
*
* Licensed 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
*
*      http://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 org.apache.xml.resolver.apps;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.Vector;

import org.apache.xml.resolver.Catalog;
import org.apache.xml.resolver.CatalogManager;
import org.apache.xml.resolver.helpers.Debug;
import org.apache.xml.resolver.helpers.FileURL;
import org.apache.xml.resolver.tools.CatalogResolver;

/**
* A simple command-line resolver.
*
* <p>This class implements a simple command-line resolver. It takes
* some parameters and passes them through the resolver, printing the
* result.
* </p>
*
* <p>Usage: resolver [options] keyword</p>
*
* <p>Where options are:</p>
*
* <dl>
* <dt><code>-c</code> <em>catalogfile</em></dt>
* <dd>Load a particular catalog file.</dd>
* <dt><code>-n</code> <em>name</em></dt>
* <dd>Sets the name.</dd>
* <dt><code>-p</code> <em>publicId</em></dt>
* <dd>Sets the public identifier.</dd>
* <dt><code>-s</code> <em>systemId</em></dt>
* <dd>Sets the system identifier.</dd>
* <dt><code>-a</code></dt>
* <dd>Absolute system URI.</dd>
* <dt><code>-u</code> <em>uri</em></dt>
* <dd>Sets the URI.</dd>
* <dt><code>-d</code> <em>integer</em></dt>
* <dd>Set the debug level.</dd>
* </dl>
*
* <p>And keyword is one of: doctype, document, entity, notation, public,
* system, or uri.</p>
*
* <p>The process ends with error-level 1, if there errors.</p>
*
* @see org.apache.xml.resolver.tools.ResolvingParser
*
* @author Norman Walsh
* <a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a>
*
* @version 1.0 */
public class resolver {
  private static Debug debug = CatalogManager.getStaticManager().debug;

  /** The main entry point */
  public static void main (String[] args)
    throws FileNotFoundException, IOException {

    int     debuglevel   = 0;
    Vector  catalogFiles = new Vector();
    int     resType      = 0;
    String  resTypeStr   = null;
    String  name         = null;
    String  publicId     = null;
    String  systemId     = null;
    String  uri          = null;
    boolean absoluteSystem = false;

    for (int i=0; i<args.length; i++) {
      if (args[i].equals("-c")) {
  ++i;
  catalogFiles.add(args[i]);
  continue;
      }

      if (args[i].equals("-p")) {
  ++i;
  publicId = args[i];
  continue;
      }

      if (args[i].equals("-s")) {
  ++i;
  systemId = args[i];
  continue;
      }

      if (args[i].equals("-n")) {
  ++i;
  name = args[i];
  continue;
      }

      if (args[i].equals("-u")) {
  ++i;
  uri = args[i];
  continue;
      }

      if (args[i].equals("-a")) {
  absoluteSystem = true;
  continue;
      }

      if (args[i].equals("-d")) {
  ++i;
  String debugstr = args[i];
  try {
    debuglevel = Integer.parseInt(debugstr);
    if (debuglevel > 0) {
      debug.setDebug(debuglevel);
    }
  } catch (Exception e) {
    // nop
  }
  continue;
      }

      resTypeStr = args[i];
    }

    if (resTypeStr == null) {
      usage();
    }

    if (resTypeStr.equalsIgnoreCase("doctype")) {
      resType = Catalog.DOCTYPE;
      if (publicId == null && systemId == null) {
  System.out.println("DOCTYPE requires public or system identifier.");
  usage();
      }
    } else if (resTypeStr.equalsIgnoreCase("document")) {
      resType = Catalog.DOCUMENT;
    } else if (resTypeStr.equalsIgnoreCase("entity")) {
      resType = Catalog.ENTITY;
      if (publicId == null && systemId == null && name == null) {
  System.out.println("ENTITY requires name or public or system identifier.");
  usage();
      }
    } else if (resTypeStr.equalsIgnoreCase("notation")) {
      resType = Catalog.NOTATION;
      if (publicId == null && systemId == null && name == null) {
  System.out.println("NOTATION requires name or public or system identifier.");
  usage();
      }
    } else if (resTypeStr.equalsIgnoreCase("public")) {
      resType = Catalog.PUBLIC;
      if (publicId == null) {
  System.out.println("PUBLIC requires public identifier.");
  usage();
      }
    } else if (resTypeStr.equalsIgnoreCase("system")) {
      resType = Catalog.SYSTEM;
      if (systemId == null) {
  System.out.println("SYSTEM requires system identifier.");
  usage();
      }
    } else if (resTypeStr.equalsIgnoreCase("uri")) {
      resType = Catalog.URI;
      if (uri == null) {
  System.out.println("URI requires a uri.");
  usage();
      }
    } else {
      System.out.println(resTypeStr + " is not a recognized keyword.");
      usage();
    }

    if (absoluteSystem) {
      URL base = null;
      URL sysid = null;

      // Calculate the appropriate BASE URI
      try {
  // tack on a basename because URLs point to files not dirs
  base = FileURL.makeURL("basename");
      } catch (MalformedURLException e) {
  String userdir = System.getProperty("user.dir");
  userdir.replace('\\', '/');
  debug.message(1, "Malformed URL on cwd", userdir);
  base = null;
      }

      try {
  sysid = new URL(base, systemId);
  systemId = sysid.toString();
      } catch (MalformedURLException e) {
  try {
    sysid = new URL("file:///" + systemId);
  } catch (MalformedURLException e2) {
    debug.message(1, "Malformed URL on system id", systemId);
  }
      }
    }

    CatalogResolver catalogResolver = new CatalogResolver();
    Catalog resolver = catalogResolver.getCatalog();

    for (int count = 0; count < catalogFiles.size(); count++) {
      String file = (String) catalogFiles.elementAt(count);
      resolver.parseCatalog(file);
    }
    String result = null;

    if (resType == Catalog.DOCTYPE) {
      System.out.println("Resolve DOCTYPE (name, publicid, systemid):");
      if (name != null) { System.out.println("       name: " + name); }
      if (publicId != null) { System.out.println("  public id: " + publicId); }
      if (systemId != null) { System.out.println("  system id: " + systemId); }
      if (uri != null) { System.out.println("        uri: " + uri); }
      result = resolver.resolveDoctype(name, publicId, systemId);
    } else if (resType == Catalog.DOCUMENT) {
      System.out.println("Resolve DOCUMENT ():");
      result = resolver.resolveDocument();
    } else if (resType == Catalog.ENTITY) {
      System.out.println("Resolve ENTITY (name, publicid, systemid):");
      if (name != null) { System.out.println("       name: " + name); }
      if (publicId != null) { System.out.println("  public id: " + publicId); }
      if (systemId != null) { System.out.println("  system id: " + systemId); }
      result = resolver.resolveEntity(name, publicId, systemId);
    } else if (resType == Catalog.NOTATION) {
      System.out.println("Resolve NOTATION (name, publicid, systemid):");
      if (name != null) { System.out.println("       name: " + name); }
      if (publicId != null) { System.out.println("  public id: " + publicId); }
      if (systemId != null) { System.out.println("  system id: " + systemId); }
      result = resolver.resolveNotation(name, publicId, systemId);
    } else if (resType == Catalog.PUBLIC) {
      System.out.println("Resolve PUBLIC (publicid, systemid):");
      if (publicId != null) { System.out.println("  public id: " + publicId); }
      if (systemId != null) { System.out.println("  system id: " + systemId); }
      result = resolver.resolvePublic(publicId, systemId);
    } else if (resType == Catalog.SYSTEM) {
      System.out.println("Resolve SYSTEM (systemid):");
      if (systemId != null) { System.out.println("  system id: " + systemId); }
      result = resolver.resolveSystem(systemId);
    } else if (resType == Catalog.URI) {
      System.out.println("Resolve URI (uri):");
      if (uri != null) { System.out.println("        uri: " + uri); }
      result = resolver.resolveURI(uri);
    } else {
      System.out.println("resType is wrong!? This can't happen!");
      usage();
    }

    System.out.println("Result: " + result);
  }

  public static void usage() {
    System.out.println("Usage: resolver [options] keyword");
    System.out.println("");
    System.out.println("Where:");
    System.out.println("");
    System.out.println("-c catalogfile  Loads a particular catalog file.");
    System.out.println("-n name         Sets the name.");
    System.out.println("-p publicId     Sets the public identifier.");
    System.out.println("-s systemId     Sets the system identifier.");
    System.out.println("-a              Makes the system URI absolute before resolution");
    System.out.println("-u uri          Sets the URI.");
    System.out.println("-d integer      Set the debug level.");
    System.out.println("keyword         Identifies the type of resolution to perform:");
    System.out.println("                doctype, document, entity, notation, public, system,");
    System.out.println("                or uri.");

    System.exit(1);
  }
}

TOP

Related Classes of org.apache.xml.resolver.apps.resolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.