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
00079 setNamespaceAware(namespaceAware);
00080 setValidating(parsingWithValidation);
00081
00082
00083 setErrorHandler(new JErrorHandler());
00084
00085
00086 JEntityResolver jEntityResolver = new JEntityResolver(this);
00087 jEntityResolver.addDtds(dtds);
00088 jEntityResolver.addSchemas(schemas);
00089 setEntityResolver(jEntityResolver);
00090
00091
00092
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
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
00114 setUseContextClassLoader(true);
00115
00116
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 }