クラス org.objectweb.cjdbc.controller.xml.ControllerParser

すべてのメンバ一覧

説明

Allows to parse an XML content containing the description of the controller confirming to C-JDBC-controller.dtd.

作者:
Emmanuel Cecchet

Nicolas Modrzyk

バージョン:
1.0

ControllerParser.java64 行で定義されています。

Public メソッド

 ControllerParser (ControllerFactory configure) throws SAXException
void readXML (String xml) throws IOException, SAXException
void readXML (String xml, boolean validateBeforeParsing) throws IOException, SAXException
void readXML (FileReader fileReader, boolean validateBeforeParsing) throws IOException, SAXException
void fatalError (SAXParseException e) throws SAXException
void error (SAXParseException e) throws SAXException
InputSource resolveEntity (String publicId, String systemId) throws SAXException
void startDocument () throws SAXException
void endDocument () throws SAXException
void startElement (String uri, String localName, String name, Attributes atts) throws SAXException
void endElement (String uri, String localName, String name) throws SAXException

変数

String controllerIP

スタティック変数

Trace logger

Private 変数

XMLReader parser
ControllerFactory config
ControllerSecurityManager security
boolean parseAccept = false

Static Private 変数

final String C_JDBC_CONTROLLER_DTD_FILE = "c-jdbc-controller.dtd"


コンストラクタとデストラクタ

org.objectweb.cjdbc.controller.xml.ControllerParser.ControllerParser ControllerFactory  configure  )  throws SAXException
 

Creates a new ControllerParser instance. This method Instanciates also a new ControllerHandler.

引数:
configure a ControllerFactory object that contains the configuration to update with values from xml parsing
例外:
SAXException if an error occurs

ControllerParser.java92 行で定義されています。

00093   {
00094     this.config = configure;
00095 
00096     // Instantiate a new parser
00097     parser = XMLReaderFactory.createXMLReader();
00098 
00099     // Activate validation
00100     parser.setFeature("http://xml.org/sax/features/validation", true);
00101 
00102     // Install error handler
00103     parser.setErrorHandler(this);
00104 
00105     // Install document handler
00106     parser.setContentHandler(this);
00107 
00108     // Install local entity resolver
00109     parser.setEntityResolver(this);
00110   }


メソッド

void org.objectweb.cjdbc.controller.xml.ControllerParser.endDocument  )  throws SAXException
 

Finalizes parsing of a document.

例外:
SAXException unspecialized error

ControllerParser.java270 行で定義されています。

00271   {
00272     logger.info(Translate.get("controller.xml.done"));
00273   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.endElement String  uri,
String  localName,
String  name
throws SAXException
 

DatabasesParser for end of element.

引数:
uri name space URI
localName local name
name element raw name
例外:
SAXException if an error occurs

ControllerParser.java505 行で定義されています。

00507   {
00508     // We need information on what configuration are for jmx
00509     if (name.equalsIgnoreCase(ControllerXmlTags.ELT_JMX))
00510     {
00511       config.setUpJmx();
00512     }
00513     if (name.equalsIgnoreCase(ControllerXmlTags.ELT_SECURITY))
00514     {
00515       config.setUpSecurity(security);
00516     }
00517     if (name.equalsIgnoreCase(ControllerXmlTags.ELT_CONTROLLER))
00518     {
00519       // Be sure no settings are used for report
00520       if (!ControllerReport.isReportEnabled())
00521       {
00522         ControllerReport.setSettings(null);
00523       }
00524     }
00525     logger.debug(Translate.get("controller.xml.parsing.end", name));
00526   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.error SAXParseException  e  )  throws SAXException
 

Handles notification of a recoverable parser error.

引数:
e the warning information encoded as an exception.
例外:
SAXException any SAX exception, possibly wrapping another exception

ControllerParser.java223 行で定義されています。

00224   {
00225     logger.error(Translate.get("controller.xml.parsing.error", new String[]{
00226         e.getPublicId(), String.valueOf(e.getLineNumber()),
00227         String.valueOf(e.getColumnNumber()), e.getMessage()}));
00228     throw e;
00229   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.fatalError SAXParseException  e  )  throws SAXException
 

Handles notification of a non-recoverable parser error.

引数:
e the warning information encoded as an exception.
例外:
SAXException any SAX exception, possibly wrapping another exception.

ControllerParser.java208 行で定義されています。

参照先 org.objectweb.cjdbc.common.log.Trace.error().

00209   {
00210     logger.error(Translate.get("controller.xml.parsing.fatal", new String[]{
00211         e.getPublicId(), String.valueOf(e.getLineNumber()),
00212         String.valueOf(e.getColumnNumber()), e.getMessage()}));
00213     throw e;
00214   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.readXML FileReader  fileReader,
boolean  validateBeforeParsing
throws IOException, SAXException
 

Parses an XML formatted file according to C-JDBC-controller DTD.

引数:
fileReader a FileReader reference to the xml to parse
validateBeforeParsing if validation should be checked before parsing
例外:
SAXException if an error occurs
IOException if an error occurs

ControllerParser.java175 行で定義されています。

参照先 org.objectweb.cjdbc.controller.xml.ControllerParser.readXML().

00177   {
00178     if (fileReader != null)
00179     {
00180 
00181       // Read the file
00182       BufferedReader in = new BufferedReader(fileReader);
00183       StringBuffer xml = new StringBuffer();
00184       String line;
00185       do
00186       {
00187         line = in.readLine();
00188         if (line != null)
00189           xml.append(line.trim());
00190       }
00191       while (line != null);
00192 
00193       readXML(xml.toString(), validateBeforeParsing);
00194     }
00195     else
00196     {
00197       throw new IOException("Input was null in input source.");
00198     }
00199   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.readXML String  xml,
boolean  validateBeforeParsing
throws IOException, SAXException
 

Parses an XML formatted string according to C-JDBC-controller DTD.

引数:
xml a String reference to the xml to parse
validateBeforeParsing if validation should be checked before parsing
例外:
SAXException if an error occurs
IOException if an error occurs

ControllerParser.java138 行で定義されています。

参照先 org.objectweb.cjdbc.controller.xml.ControllerParser.C_JDBC_CONTROLLER_DTD_FILE, org.objectweb.cjdbc.common.log.Trace.debug(), org.objectweb.cjdbc.common.log.Trace.error(), org.objectweb.cjdbc.common.xml.XmlValidator.getExceptions(), org.objectweb.cjdbc.common.log.Trace.isDebugEnabled(), org.objectweb.cjdbc.common.xml.XmlValidator.isDtdValid, org.objectweb.cjdbc.common.xml.XmlValidator.isValid(), org.objectweb.cjdbc.common.xml.XmlValidator.isXmlValid, と org.objectweb.cjdbc.controller.xml.ControllerParser.readXML().

00140   {
00141     if (validateBeforeParsing)
00142     {
00143       XmlValidator validator = new XmlValidator(C_JDBC_CONTROLLER_DTD_FILE, xml
00144           .toString());
00145       if (logger.isDebugEnabled())
00146       {
00147         if (validator.isDtdValid())
00148           logger.debug(Translate.get("controller.xml.dtd.validated"));
00149         if (validator.isXmlValid())
00150           logger.debug(Translate.get("controller.xml.document.validated"));
00151       }
00152       if (!validator.isDtdValid())
00153         logger.error(Translate.get("controller.xml.dtd.not.validated"));
00154       if (!validator.isXmlValid())
00155         logger.error(Translate.get("controller.xml.document.not.validated"));
00156 
00157       ArrayList errors = validator.getExceptions();
00158       for (int i = 0; i < errors.size(); i++)
00159         logger.error(((Exception) errors.get(i)).getMessage());
00160 
00161       if (!validator.isValid())
00162         throw new SAXException(ExceptionTypes.XML_DOCUMENT_INVALID);
00163     }
00164     readXML(xml);
00165   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.readXML String  xml  )  throws IOException, SAXException
 

Parses an XML content according to C-JDBC-controller DTD.

引数:
xml a String containing the XML content to parse
例外:
SAXException if an error occurs
IOException if an error occurs

ControllerParser.java119 行で定義されています。

参照元 org.objectweb.cjdbc.controller.xml.ControllerParser.readXML(), と org.objectweb.cjdbc.controller.core.ControllerFactory.setUpByXml().

00120   {
00121     if (xml != null)
00122     {
00123       InputSource input = new InputSource(new StringReader(xml));
00124       parser.parse(input);
00125     }
00126     else
00127       throw new IOException("Input was null in input source.");
00128   }

InputSource org.objectweb.cjdbc.controller.xml.ControllerParser.resolveEntity String  publicId,
String  systemId
throws SAXException
 

Allows to parse the document with a local copy of the DTD whatever the original DOCTYPE found. Warning, this method is called only if the XML document contains a DOCTYPE.

参照:
org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)

ControllerParser.java239 行で定義されています。

00241   {
00242     logger.debug(Translate.get("controller.xml.dtd.using",
00243         C_JDBC_CONTROLLER_DTD_FILE));
00244     InputStream stream = ControllerParser.class.getResourceAsStream("/"
00245         + C_JDBC_CONTROLLER_DTD_FILE);
00246     if (stream == null)
00247     {
00248       throw new SAXException(Translate.get("controller.xml.dtd.not.found",
00249           C_JDBC_CONTROLLER_DTD_FILE));
00250     }
00251 
00252     return new InputSource(stream);
00253   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.startDocument  )  throws SAXException
 

Initializes parsing of a document.

例外:
SAXException unspecialized error

ControllerParser.java260 行で定義されています。

00261   {
00262     logger.debug(Translate.get("controller.xml.parsing.document"));
00263   }

void org.objectweb.cjdbc.controller.xml.ControllerParser.startElement String  uri,
String  localName,
String  name,
Attributes  atts
throws SAXException
 

Analyzes an element first line.

引数:
uri name space URI
localName local name
name element raw name
atts element attributes
例外:
SAXException if an error occurs

ControllerParser.java284 行で定義されています。

00286   {
00287     logger.debug(Translate.get("controller.xml.parsing.start", name));
00288     if (name.equalsIgnoreCase(ControllerXmlTags.ELT_CONTROLLER))
00289     {
00290       try
00291       {
00292 
00293         String controllerPort = atts
00294             .getValue(ControllerXmlTags.ATT_CONTROLLER_PORT);
00295         if (config.get(ControllerFactory.CONTROLLER_PORT).equals(
00296             "" + ControllerConstants.DEFAULT_PORT))
00297         {
00298           config.put(ControllerFactory.CONTROLLER_PORT, controllerPort);
00299           config.getController()
00300               .setPortNumber(Integer.parseInt(controllerPort));
00301         }
00302 
00303         controllerIP = atts.getValue(ControllerXmlTags.ATT_CONTROLLER_IP);
00304         if (config.get(ControllerFactory.CONTROLLER_IP).equals(
00305             "" + ControllerConstants.DEFAULT_IP))
00306         {
00307           config.put(ControllerFactory.CONTROLLER_IP, controllerIP);
00308           config.getController().setIPAddress(controllerIP);
00309         }
00310 
00311         String controllerBacklog = atts
00312             .getValue(ControllerXmlTags.ATT_backlogSize);
00313         if (config.get(ControllerFactory.CONTROLLER_BACKLOG).equals(
00314             "" + ControllerConstants.DEFAULT_BACKLOG_SIZE))
00315         {
00316           config.put(ControllerFactory.CONTROLLER_BACKLOG, controllerBacklog);
00317           config.getController().setBacklogSize(
00318               Integer.parseInt(controllerBacklog));
00319         }
00320       }
00321       catch (Exception e)
00322       {
00323         throw new SAXException(e.getMessage());
00324       }
00325 
00326     }
00327     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_INTERNATIONALIZATION))
00328     {
00329       Locale.setDefault(new Locale(atts
00330           .getValue(ControllerXmlTags.ATT_LANGUAGE), ""));
00331     }
00332     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_REPORT))
00333     {
00334       String enabled = "true";
00335       config.put(ControllerXmlTags.ATT_REPORT_ENABLED, enabled);
00336       config.put(ControllerXmlTags.ATT_REPORT_HIDE_SENSITIVE_DATA, atts
00337           .getValue(ControllerXmlTags.ATT_REPORT_HIDE_SENSITIVE_DATA));
00338       config.put(ControllerXmlTags.ATT_REPORT_GENERATE_ON_SHUTDOWN, atts
00339           .getValue(ControllerXmlTags.ATT_REPORT_GENERATE_ON_SHUTDOWN));
00340       config.put(ControllerXmlTags.ATT_REPORT_GENERATE_ON_FATAL, atts
00341           .getValue(ControllerXmlTags.ATT_REPORT_GENERATE_ON_FATAL));
00342 
00343       String reportLocation = atts
00344           .getValue(ControllerXmlTags.ATT_REPORT_REPORT_LOCATION);
00345       // Default to CJDBC_HOME/log
00346       if ((reportLocation == null) || reportLocation.equals(""))
00347       {
00348         String defaultDir = System.getProperty("cjdbc.home");
00349         if (defaultDir == null)
00350         {
00351           reportLocation = ".";
00352         }
00353         else
00354         {
00355           reportLocation = defaultDir + File.separator
00356               + ControllerConstants.DEFAULT_LOG_DIR_NAME;
00357         }
00358       }
00359       config.put(ControllerXmlTags.ATT_REPORT_REPORT_LOCATION, reportLocation);
00360 
00361       config.put(ControllerXmlTags.ATT_REPORT_ENABLE_FILE_LOGGING, atts
00362           .getValue(ControllerXmlTags.ATT_REPORT_ENABLE_FILE_LOGGING));
00363       ControllerReport.setSettings(config);
00364     }
00365     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_BACKUP))
00366     {
00367       config.put(ControllerXmlTags.ATT_BACKUP_CLEAN, atts
00368           .getValue(ControllerXmlTags.ATT_BACKUP_CLEAN));
00369       config.put(ControllerXmlTags.ATT_BACKUP_DIR, atts
00370           .getValue(ControllerXmlTags.ATT_BACKUP_DIR));
00371       config.put(ControllerXmlTags.ATT_BACKUP_ZIP, atts
00372           .getValue(ControllerXmlTags.ATT_BACKUP_ZIP));
00373       config.put(ControllerXmlTags.ATT_BACKUP_ON_SHUDOWN, atts
00374           .getValue(ControllerXmlTags.ATT_BACKUP_ON_SHUDOWN));
00375       config.put(ControllerXmlTags.ATT_BACKUP_NB_OF_BACKUPS, atts
00376           .getValue(ControllerXmlTags.ATT_BACKUP_NB_OF_BACKUPS));
00377 
00378       Octopus.setOctopusDirectory(atts
00379           .getValue(ControllerXmlTags.ATT_BACKUP_DIR));
00380       Octopus.setCleanOctopus((Boolean.valueOf(atts
00381           .getValue(ControllerXmlTags.ATT_BACKUP_CLEAN))).booleanValue());
00382       Octopus.setZipOctopus((Boolean.valueOf(atts
00383           .getValue(ControllerXmlTags.ATT_BACKUP_ZIP))).booleanValue());
00384     }
00385     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_JMX))
00386     {
00387       config.put(ControllerFactory.JMX_ENABLE, "true");
00388     }
00389     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_HTTP_JMX_ADAPTOR))
00390     {
00391       String adaptorPort = atts
00392           .getValue(ControllerXmlTags.ATT_JMX_ADAPTOR_PORT);
00393       if (config.get(JmxConstants.ADAPTOR_TYPE_HTTP) == null)
00394         config.put(JmxConstants.ADAPTOR_TYPE_HTTP, String.valueOf(adaptorPort));
00395     }
00396     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_RMI_JMX_ADAPTOR))
00397     {
00398       String adaptorPort = atts
00399           .getValue(ControllerXmlTags.ATT_JMX_ADAPTOR_PORT);
00400       if (config.get(JmxConstants.ADAPTOR_TYPE_RMI) == null)
00401         config.put(JmxConstants.ADAPTOR_TYPE_RMI, String.valueOf(adaptorPort));
00402     }
00403     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_DATABASE))
00404     {
00405       String checkPoint = atts
00406           .getValue(ControllerXmlTags.ATT_DATABASE_CHECKPOINT);
00407       String virtualName = atts.getValue(ControllerXmlTags.ATT_DATABASE_NAME);
00408       String file = atts.getValue(ControllerXmlTags.ATT_DATABASE_FILE);
00409 
00410       // Try to find the file on the path (usually config directory) if no file
00411       // separator is found
00412       if (file.indexOf(File.separator) == -1)
00413       {
00414         try
00415         {
00416           URL url = this.getClass().getResource("/" + file);
00417           file = url.getFile();
00418           logger.info(Translate.get("controller.configure.using", file));
00419         }
00420         catch (Exception e)
00421         {
00422           throw new SAXException(Translate.get(
00423               "controller.configure.file.not.found", file));
00424         }
00425       }
00426 
00427       file = URLDecoder.decode(file);
00428 
00429       File checkExist = new File(file);
00430       if (checkExist.exists() == false)
00431         throw new SAXException(Translate.get(
00432             "controller.configure.file.not.found", file));
00433 
00434       boolean autoLoad = new Boolean(atts
00435           .getValue(ControllerXmlTags.ATT_DATABASE_ENABLE)).booleanValue();
00436 
00437       logger.info(Translate.get("controller.configure.setup", new String[]{
00438           virtualName, String.valueOf(autoLoad), checkPoint}));
00439       config.setUpVirtualDatabase(file, virtualName, autoLoad, checkPoint);
00440     }
00441     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_SECURITY))
00442     {
00443       security = new ControllerSecurityManager();
00444       boolean connect = new Boolean(atts
00445           .getValue(ControllerXmlTags.ATT_DEFAULT_CONNECT)).booleanValue();
00446       security.setDefaultConnect(connect);
00447     }
00448     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_JAR))
00449     {
00450       boolean allow = new Boolean(atts
00451           .getValue(ControllerXmlTags.ATT_JAR_ALLOW_DRIVER)).booleanValue();
00452       security.setAllowAdditionalDriver(allow);
00453     }
00454     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_CLIENT))
00455     {
00456       boolean localhost = new Boolean(atts
00457           .getValue(ControllerXmlTags.ATT_ONLY_LOCALHOST)).booleanValue();
00458       boolean allow = new Boolean(atts.getValue(ControllerXmlTags.ATT_ALLOW))
00459           .booleanValue();
00460       security.setAllowClientShutdown(allow);
00461       security.setAllowLocalClientOnly(localhost);
00462     }
00463     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_CONSOLE))
00464     {
00465       boolean localhost = new Boolean(atts
00466           .getValue(ControllerXmlTags.ATT_ONLY_LOCALHOST)).booleanValue();
00467       boolean allow = new Boolean(atts.getValue(ControllerXmlTags.ATT_ALLOW))
00468           .booleanValue();
00469       security.setAllowConsoleShutdown(allow);
00470       security.setAllowLocalConsoleOnly(localhost);
00471     }
00472     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_ACCEPT))
00473       parseAccept = true;
00474     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_BLOCK))
00475       parseAccept = false;
00476     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_HOSTNAME))
00477       security.addHostToSecureList(atts.getValue(ControllerXmlTags.ATT_VALUE),
00478           parseAccept);
00479     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_IPADDRESS))
00480       security.addHostToSecureList(atts.getValue(ControllerXmlTags.ATT_VALUE),
00481           parseAccept);
00482     else if (name.equalsIgnoreCase(ControllerXmlTags.ELT_IPRANGE))
00483     {
00484       String iprange = atts.getValue(ControllerXmlTags.ATT_VALUE);
00485       try
00486       {
00487         security.addToSecureList(iprange, parseAccept);
00488       }
00489       catch (Exception e)
00490       {
00491         logger.warn(Translate.get("controller.configure.invalid.iprange",
00492             iprange));
00493       }
00494     }
00495   }


変数

final String org.objectweb.cjdbc.controller.xml.ControllerParser.C_JDBC_CONTROLLER_DTD_FILE = "c-jdbc-controller.dtd" [static, private]
 

C-JDBC-Controller DTD file name (must be found in classpath).

ControllerParser.java75 行で定義されています。

参照元 org.objectweb.cjdbc.controller.xml.ControllerParser.readXML().

ControllerFactory org.objectweb.cjdbc.controller.xml.ControllerParser.config [private]
 

C-JDBC controller to setup.

ControllerParser.java78 行で定義されています。

String org.objectweb.cjdbc.controller.xml.ControllerParser.controllerIP [package]
 

ControllerParser.java82 行で定義されています。

Trace org.objectweb.cjdbc.controller.xml.ControllerParser.logger [static, package]
 

初期値:

 Trace
                                                                   .getLogger(ControllerParser.class
                                                                       .getName())
Logger instance.

ControllerParser.java67 行で定義されています。

boolean org.objectweb.cjdbc.controller.xml.ControllerParser.parseAccept = false [private]
 

ControllerParser.java80 行で定義されています。

XMLReader org.objectweb.cjdbc.controller.xml.ControllerParser.parser [private]
 

XML parser.

ControllerParser.java72 行で定義されています。

ControllerSecurityManager org.objectweb.cjdbc.controller.xml.ControllerParser.security [private]
 

ControllerParser.java79 行で定義されています。


このクラスの説明は次のファイルから生成されました:
CJDBCversion1.0rc6に対してWed May 5 18:03:13 2004に生成されました。 doxygen 1.3.6