JDigester.java

00001 
00027 package org.objectweb.jonas_lib.deployment.digester;
00028 
00029 import java.io.IOException;
00030 import java.io.Reader;
00031 
00032 import org.apache.commons.digester.Digester;
00033 
00034 import org.objectweb.jonas_lib.deployment.api.DTDs;
00035 import org.objectweb.jonas_lib.deployment.api.DeploymentDescException;
00036 import org.objectweb.jonas_lib.deployment.api.Schemas;
00037 import org.objectweb.jonas_lib.deployment.rules.JRuleSetBase;
00038 import org.objectweb.jonas_lib.deployment.xml.TopLevelElement;
00039 
00040 
00048 public class JDigester extends Digester {
00049 
00065     public JDigester(JRuleSetBase ruleSet,
00066                      boolean parsingWithValidation,
00067                      boolean namespaceAware,
00068                      DTDs dtds,
00069                      Schemas schemas)
00070         throws DeploymentDescException {
00071         super();
00072 
00073 
00074         String packageName = ruleSet.getClass().getPackage().getName();
00075         String rootPackageName = packageName.substring(0, packageName.lastIndexOf('.'));
00076 
00077 
00078         // Set the validation process
00079         setNamespaceAware(namespaceAware);
00080         setValidating(parsingWithValidation);
00081 
00082         // Define an error handler
00083         setErrorHandler(new JErrorHandler());
00084 
00085         // Register all Sun dtds/Schemas
00086         JEntityResolver jEntityResolver = new JEntityResolver(this);
00087         jEntityResolver.addDtds(dtds);
00088         jEntityResolver.addSchemas(schemas);
00089         setEntityResolver(jEntityResolver);
00090 
00091 
00092         // Set the schema that Digester must use
00093         if (parsingWithValidation) {
00094             try {
00095                 setFeature("http://apache.org/xml/features/validation/schema",
00096                                              true);
00097             } catch (Exception ee) {
00098                 throw new DeploymentDescException("Error setting feature", ee);
00099             }
00100         }
00101 
00102         org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(rootPackageName + ".digester");
00103         setLogger(log);
00104 
00105         // Set the encoding feature
00106         try {
00107             setFeature("http://apache.org/xml/features/allow-java-encodings",
00108                                          true);
00109         } catch (Exception ee) {
00110             throw new DeploymentDescException("Error setting feature", ee);
00111         }
00112 
00113         // Use Thread classloader by default
00114         setUseContextClassLoader(true);
00115 
00116         // Add rules
00117         addRuleSet(ruleSet);
00118     }
00119 
00120 
00130     public void parse(Reader reader,
00131                       String fileName,
00132                       TopLevelElement element)
00133         throws DeploymentDescException {
00134         try {
00135             clear();
00136             push(element);
00137             parse(reader);
00138         } catch (Exception ioe) {
00139             throw new DeploymentDescException("Error when parsing XML document " + fileName, ioe);
00140         } finally {
00141             if (reader != null) {
00142                 try {
00143                     reader.close();
00144                 } catch (IOException ignored) {
00145                     getLogger().warn("Can't close '" + fileName + "'");
00146                 }
00147             }
00148             push(null);
00149         }
00150     }
00151 
00152 }

Generated on Tue Feb 15 15:05:50 2005 for JOnAS by  doxygen 1.3.9.1