Hello there,
I am using the Apache Commons Digester as a way to load up and marshal
XML config files. Am using Tomcat 5.5.9 and JDK 1.5.
I have an init servlet which loads an xml file config file (holding
information to two more XML config files). I get the following
exception at runtime:
INFO: Deploying web application archive coffeebreak.war
2007-01-26 17:54:24,530
DEBUG [org.coffeebreak.config.XmlConfigInitServlet] -
commons digester rules location:
file:/C:/DevTools/tomcat/jakarta-tomcat-5.5.9/work/
Catalina/localhost/WEB-INF/classes/org/coffeebreak/config/affiliate-rules.xml
2007-01-26 17:54:24,935
DEBUG [org.coffeebreak.config.ConfigHelper] - commons digester
rules location: file:/C:/DevTools/tomcat/jakarta-tomcat-5.5.9/work/
Catalina/localhost/WEB-INF/classes/org/coffeebreak/config/attribute-rules.xml
2007-01-26 17:54:24,935
DEBUG [org.coffeebreak.config.ConfigHelper] - loading config for: Contractor
java.lang.NullPointerException
at java.io.FileInputStream.<init>(FileInputStream.java:103)
at org.coffeebreak.config.ConfigHelper.parse(ConfigHelper.java:43)
at
org.coffeebreak.config.XmlConfigInitServlet.init(XmlConfigInitServlet.java:35)
at javax.servlet.GenericServlet.init(GenericServlet.java:211)
at
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
at
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
My XMLConfigServlet:
public class XmlConfigInitServlet extends HttpServlet {
List<AffiliateBean> affiliateList;
public void init() throws ServletException {
String affiliateFile = getInitParameter("xml-config-file");
File xmlConfigFile = new File(affiliateFile);
if (!xmlConfigFile.exists()) {
Logger.getLogger(this.getClass()).debug(affiliateFile + " not
found " + xmlConfigFile.getAbsolutePath());
}
try {
affiliateList = parse(xmlConfigFile);
for (AffiliateBean bean : affiliateList) {
ConfigHelper.parse(bean.getName(),
bean.getFileName());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
public List<AffiliateBean> parse(File xmlConfigFile) throws
IOException, SAXException {
URL rules = this.getClass().getResource("affiliate-rules.xml");
Logger.getLogger(this.getClass()).debug("commons digester rules
location: "+rules);
Digester digester = null;
try {
digester = DigesterLoader.createDigester(rules);
} catch (Throwable e) {
e.printStackTrace();
e.getCause().printStackTrace();
}
// Push empty list onto Digester's Stack
List<AffiliateBean> affiliateList = new
ArrayList<AffiliateBean>();
digester.push(affiliateList);
// Parse the XML document
InputStream input = new FileInputStream(xmlConfigFile);
digester.parse(input);
return affiliateList;
}
}
ConfigHelper (This is where the exception actually occurs, look for my
comment, in order, to pinpoint the actual line of code):
public class ConfigHelper {
private static List<AttributeConfig> attributeConfigs = new
ArrayList<AttributeConfig>();
private static Map<String, AttributeConfig>
attributeConfigMap = new HashMap<String, AttributeConfig>();
public static void parse(String name, File xmlConfigFile) throws
IOException, SAXException {
URL rules =
ConfigHelper.class.getResource("attribute-rules.xml");
Logger.getLogger(ConfigHelper.class).debug("commons digester
rules location: "+rules);
Digester digester = null;
Logger.getLogger(ConfigHelper.class).debug("loading config for:
"+name);
try {
digester = DigesterLoader.createDigester(rules);
} catch (Throwable e) {
e.printStackTrace();
e.getCause().printStackTrace();
}
// Push empty list onto Digester's Stack
List<AttributeBean> attributeConfigList = new
ArrayList<AttributeBean>();
digester.push(attributeConfigList);
// Parse the XML document
InputStream input = new FileInputStream(xmlConfigFile); // <--
This is where the FileNotFound Exception is occurring.
digester.parse(input);
AttributeConfig config = new AttributeConfig(name,
attributeConfigs.size(), attributeConfigList);
attributeConfigs.add(config);
attributeConfigMap.put(name, config);
Logger.getLogger(ConfigHelper.class).debug("attributes: " +
attributeConfigList);
}
public static AttributeConfig getConfig(int i) {
return attributeConfigs.get(i);
}
public static AttributeConfig getConfigByName(String name) {
return attributeConfigMap.get(name);
}
public static AttributeConfig getDefaultConfig() {
return attributeConfigs.get(0);
}
public static List<AttributeConfig> getConfigs() {
return attributeConfigs;
}
}
Here's the affiliates-rules file:
<digester-rules>
<pattern value="affiliates/affiliate">
<object-create-rule
classname="org.coffeebreak.config.AffiliateBean"/>
<set-next-rule methodname="add" paramtype="java.lang.Object"/>
<set-properties-rule/>
<bean-property-setter-rule pattern="name"/>
<bean-property-setter-rule pattern="fileName"/>
</pattern>
</digester-rules>
AffiliateBean:
public class AffiliateBean {
private String name;
private File fileName;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public File getFileName() {
return fileName;
}
public void setFileName(File file) {
this.fileName = file;
}
}
The actual affiliates-config file itself:
<affiliates>
<affiliate>
<name>Contractor</name>
<file>/temp/contractor-config.xml</file>
</affiliate>
<affiliate>
<name>Employee</name>
<file>/temp/employee-config.xml</file>
</affiliate>
</affiliates>
Here's my web.xml file:
<web-app>
<servlet>
<servlet-name>xml-config-init</servlet-name>
<servlet-class>
org.coffeebreak.config.XmlConfigInitServlet
</servlet-class>
<init-param>
<param-name>xml-config-file</param-name>
<param-value>/temp/affiliate-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
</web-app>
Why is it failing inside ConfigHelper? For some odd reason, it can't
seem to find the contractor-config.xml file's location from the
affiliates-config.xml file.
Sincerely,
James
---------------------------------------------------------------------
To start a new topic, e-mail: [email protected]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]