Project

General

Profile

1
/**
2
 *        Name: DBSAXWriter.java
3
 *     Purpose: A Class that reads in an XML text document and
4
 *              write its contents to a database connection using SAX
5
 *   Copyright: 2000 Regents of the University of California and the
6
 *              National Center for Ecological Analysis and Synthesis
7
 *     Authors: Matt Jones
8
 *
9
 *     Version: '$Id: DBSAXWriter.java 51 2000-04-17 23:06:07Z jones $'
10
 */
11

    
12
package edu.ucsb.nceas.metacat;
13

    
14
import org.xml.sax.*;
15

    
16
import java.io.*;
17
import java.net.URL;
18
import java.net.MalformedURLException;
19
import java.sql.*;
20
import java.util.Stack;
21

    
22
// Extensions to the SAX Interfaces for Namespace support.
23
import oracle.xml.parser.v2.XMLDocumentHandler;
24
import oracle.xml.parser.v2.DefaultXMLDocumentHandler;
25
import oracle.xml.parser.v2.NSName;
26
import oracle.xml.parser.v2.SAXAttrList;
27

    
28
import oracle.xml.parser.v2.SAXParser;
29

    
30
/**
31
 * A Class that reads in an XML text document and
32
 * write its contents to a database connection using SAX
33
 */
34
public class DBSAXWriter {
35

    
36
  static  String 	defaultDB = "jdbc:oracle:thin:@localhost:1521:test";
37
  private Connection	conn = null;
38

    
39
  /**
40
   * the main routine used to test the DBSAXWriter utility.
41
   *
42
   * Usage: java DBSAXWriter <filename> <user> <password> [dbstring]
43
   *
44
   * @param filename the filename to be loaded into the database
45
   * @param user the username to use for the database connection
46
   * @param password the password to use for the database connection
47
   * @param dbstring the connection info to use for the database connection
48
   */
49
  static public void main(String[] args) {
50
     
51
     if (args.length < 3)
52
     {
53
        System.err.println("Wrong number of arguments!!!");
54
        System.err.println("USAGE: java DBSAXWriter " +
55
                           "<filename> <user> <password> [dbstring]");
56
        return;
57
     } else {
58
        try {
59
                    
60
          String filename = args[0];
61
          String user     = args[1];
62
          String password = args[2];
63
          String dbstring = null;
64

    
65
          if (args.length <= 3) {
66
            dbstring = defaultDB;
67
          } else {
68
            dbstring = args[3];
69
          }
70

    
71
          // Open a connection to the database
72
          Connection dbconn = MetaCatUtil.openDBConnection(
73
                "oracle.jdbc.driver.OracleDriver",
74
                dbstring, user, password);
75

    
76
          new DBSAXWriter(filename, dbconn);
77
          System.out.println("Document processing finished for: " + filename);
78

    
79
        } catch (Exception e) {
80
          System.err.println("EXCEPTION HANDLING REQUIRED");
81
          System.err.println(e.getMessage());
82
          e.printStackTrace(System.err);
83
        }
84
     }
85
  }
86
  
87
  /**
88
   * construct a new instance of the class to write an XML file to the database
89
   *
90
   * @param filename the filename to be loaded into the database
91
   * @param conn the database connection to which to write the XML file
92
   */
93
  public DBSAXWriter( String filename, Connection conn)
94
                  throws IOException, 
95
                         SQLException, 
96
                         ClassNotFoundException
97
   {
98
     this.conn = conn;
99
    
100
     //
101
     // Set up the SAX document handlers for parsing
102
     //
103

    
104
     try {
105

    
106
        // Use the XMLDocumentHandler interface for namespace support
107
        // instead of org.xml.sax.DocumentHandler
108
        XMLDocumentHandler xmlDocHandler = new DBSAXHandler(conn);
109

    
110
        // For all the other interface use the default provided by
111
        // Handler base
112
        HandlerBase defHandler = new HandlerBase();
113

    
114
        // Get an instance of the parser
115
        SAXParser parser = new SAXParser();
116

    
117
        // Set Handlers in the parser
118
        // Set the DocumentHandler to XMLDocumentHandler
119
        parser.setDocumentHandler(xmlDocHandler);
120

    
121
        // Set the other Handler to the defHandler
122
        parser.setErrorHandler(defHandler);
123
        parser.setEntityResolver(defHandler);
124
        parser.setDTDHandler(defHandler);
125

    
126
        try
127
        {
128
           parser.parse(fileToURL(new File(filename)).toString());
129
        }
130
        catch (SAXParseException e)
131
        {
132
           System.err.println(filename + ": " + e.getMessage());
133
        }
134
        catch (SAXException e)
135
        {
136
           System.err.println(filename + ": " + e.getMessage());
137
        }
138
     }
139
     catch (Exception e)
140
     {
141
        System.err.println(e.toString());
142
     }
143

    
144
   }
145
  
146
   /** Utility method to convert a file handle into a URL */
147
   static public URL fileToURL(File file) 
148
   {
149
     String path = file.getAbsolutePath();
150
     String fSep = System.getProperty("file.separator");
151
     if (fSep != null && fSep.length() == 1)
152
       path = path.replace(fSep.charAt(0), '/');
153
     if (path.length() > 0 && path.charAt(0) != '/')
154
       path = '/' + path;
155
     try {
156
       return new URL("file", null, path);
157
     }
158
     catch (java.net.MalformedURLException e) {
159
       /* According to the spec this could only happen if the file
160
	  protocol were not recognized. */
161
       throw new Error("unexpected MalformedURLException");
162
     }
163
  }
164

    
165
}
(7-7/19)