Hello there,

I am using the Apache Commons Digester to load an XML config file via a servlet with init params...

I keep getting this error when I start Tomcat 5.5.9 and have deployed the war file via my build script:

INFO: Deploying web application archive coffeebreak.war
2007-01-14 03:10:33,050 WARN [org.coffeebreak.logging.Log4jInitServlet] - Loaded: log4j.properties file attributes-config.xml not found, /Developer/JavaTools/tomcat/jakarta- tomcat-5.5.9/bin/WEB-INF/classes/org/coffeebreak/config/attributes- config.xml 2007-01-14 03:10:33,074 WARN [org.coffeebreak.helper.AttributeBeanXmlConfigHelper] - rules: null
org.apache.commons.digester.xmlrules.XmlLoadException
at org.apache.commons.digester.xmlrules.FromXmlRuleSet $URLXMLRulesLoader.loadRules(FromXmlRuleSet.java:199) at org.apache.commons.digester.xmlrules.FromXmlRuleSet.addRuleInstances (FromXmlRuleSet.java:176) at org.apache.commons.digester.xmlrules.FromXmlRuleSet.addRuleInstances (FromXmlRuleSet.java:141)
        at org.apache.commons.digester.Digester.addRuleSet(Digester.java:1998)
at org.apache.commons.digester.xmlrules.DigesterLoader.createDigester (DigesterLoader.java:80) at org.coffeebreak.helper.AttributeBeanXmlConfigHelper.parse (AttributeBeanXmlConfigHelper.java:29) at org.coffeebreak.config.XmlConfigInitServlet.init (XmlConfigInitServlet.java:22)
        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) at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:739) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java: 524) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java: 788) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java: 677) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java: 473)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
at org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1012) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java: 442) at org.apache.catalina.core.StandardService.start (StandardService.java:450) at org.apache.catalina.core.StandardServer.start(StandardServer.java: 683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
Caused by: java.lang.NullPointerException
at org.apache.commons.digester.xmlrules.FromXmlRuleSet $URLXMLRulesLoader.loadRules(FromXmlRuleSet.java:197)
        ... 33 more
java.lang.NullPointerException
at org.apache.commons.digester.xmlrules.FromXmlRuleSet $URLXMLRulesLoader.loadRules(FromXmlRuleSet.java:197) at org.apache.commons.digester.xmlrules.FromXmlRuleSet.addRuleInstances (FromXmlRuleSet.java:176) at org.apache.commons.digester.xmlrules.FromXmlRuleSet.addRuleInstances (FromXmlRuleSet.java:141)
        at org.apache.commons.digester.Digester.addRuleSet(Digester.java:1998)
at org.apache.commons.digester.xmlrules.DigesterLoader.createDigester (DigesterLoader.java:80) at org.coffeebreak.helper.AttributeBeanXmlConfigHelper.parse (AttributeBeanXmlConfigHelper.java:29) at org.coffeebreak.config.XmlConfigInitServlet.init (XmlConfigInitServlet.java:22)
        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) at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:739) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java: 524) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java: 788) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java: 677) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java: 473)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
at org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1012) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java: 442) at org.apache.catalina.core.StandardService.start (StandardService.java:450) at org.apache.catalina.core.StandardServer.start(StandardServer.java: 683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
java.lang.NullPointerException
at org.coffeebreak.helper.AttributeBeanXmlConfigHelper.parse (AttributeBeanXmlConfigHelper.java:38) at org.coffeebreak.config.XmlConfigInitServlet.init (XmlConfigInitServlet.java:22)
        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) at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.addChild (ContainerBase.java:739) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java: 524) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java: 788) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java: 677) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java: 473)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
at org.apache.catalina.startup.HostConfig.lifecycleEvent (HostConfig.java:311) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent (LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java: 1012) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java: 442) at org.apache.catalina.core.StandardService.start (StandardService.java:450) at org.apache.catalina.core.StandardServer.start(StandardServer.java: 683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
2007-01-14 03:10:33,687 WARN [org.coffeebreak.config.ErrorInitServlet] - Loaded: error.properties
INFO: Server startup in 15130 ms

As one can see there's an obvious pathing issue:

/Developer/JavaTools/tomcat/jakarta-tomcat-5.5.9/bin/WEB-INF/classes/ org/coffeebreak/config/attributes-config.xml

As one can see there's an obvious pathing issu

Where does the tomcat_home/bin/... come from? The "bin" directory is not supposed to be there!

Here's the specific target from my build script which places attributes-config.xml into tomcat_home/WEB-INF/classes/org/ coffeebreak/config:

<target name="static" depends="prepare">
            <!-- Copy web files -->
            <copy todir="${webapp.build.dir}/">
                <fileset dir="web" />
            </copy>
            <!-- Copy webapp configuration files -->
            <copy todir="${webapp.build.dir}/WEB-INF/">
                <fileset dir="etc" />
            </copy>
            <!-- Copy library files -->
            <copy todir="${webapp.build.dir}/WEB-INF/lib/">
               <fileset dir="lib" />
            </copy>
        <!-- Copy properties files -->
        <copy todir="${webapp.build.dir}/WEB-INF/classes/">
                <fileset dir="props" />
        </copy>
        <!-- Copy config files -->
<copy todir="${webapp.build.dir}/WEB-INF/classes/org/ coffeebreak/config/">
                <fileset dir="config" />
        </copy>
        <!-- Copy rules files -->
<copy todir="${webapp.build.dir}/WEB-INF/classes/org/ coffeebreak/helper/">
                <fileset dir="rules" />
        </copy>
</target>

Here's my deployment descriptor (web.xml) file:

<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd";>

<web-app>

    <display-name>Coffee Break</display-name>
    <description>
        CoffeeBreak Application
    </description>

    <servlet>
      <servlet-name>CoffeeBreakServlet</servlet-name>
      <servlet-class>org.coffeebreak.CoffeeBreakServlet</servlet-class>
    </servlet>

    <servlet-mapping>
      <servlet-name>CoffeeBreakServlet</servlet-name>
      <url-pattern>/app</url-pattern>
    </servlet-mapping>

    <servlet>
       <servlet-name>log4j-init</servlet-name>
<servlet-class>org.coffeebreak.logging.Log4jInitServlet</ servlet-class>
       <init-param>
           <param-name>log4j-init-file</param-name>
           <param-value>WEB-INF/classes/log4j.properties</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet>
       <servlet-name>xml-config</servlet-name>
<servlet-class>org.coffeebreak.config.XmlConfigInitServlet</ servlet-class>
       <init-param>
           <param-name>xml-config-file</param-name>
<param-value>WEB-INF/classes/org/coffeebreak/config/ attributes-config.xml</param-value>
       </init-param>
       <load-on-startup>2</load-on-startup>
   </servlet>

    <servlet>
       <servlet-name>error-init</servlet-name>
<servlet-class>org.coffeebreak.config.ErrorInitServlet</ servlet-class>
       <init-param>
           <param-name>error-init-file</param-name>
           <param-value>WEB-INF/classes/error.properties</param-value>
       </init-param>
       <load-on-startup>3</load-on-startup>
   </servlet>

</web-app>

Here's my init servlet for the XML file:

package org.coffeebreak.config;

import org.apache.log4j.Logger;
import org.coffeebreak.helper.AttributeBeanXmlConfigHelper;

import java.io.File;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class XmlConfigInitServlet extends HttpServlet {
    public void init() throws ServletException {
        String file = getInitParameter("xml-config-file");
        File xmlConfigFile = new File(file);
        if (!xmlConfigFile.exists()) {
            System.out.println("attributes-config.xml not found, "
                    + xmlConfigFile.getAbsolutePath());
        }

        try {
            // Configure Digester from XML ruleset
            AttributeBeanXmlConfigHelper.parse(xmlConfigFile);

            Logger.getLogger(this.getClass()).warn(
                    "Finished parsing the config file.");
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

My helper file (which is showing that the rules file is not loading):

package org.coffeebreak.helper;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.apache.log4j.Logger;
import org.coffeebreak.model.AttributeBean;
import org.xml.sax.SAXException;

public class AttributeBeanXmlConfigHelper {

    private static List<AttributeBean> attributeConfigList = null;

    public static void parse(File xmlConfigFile) throws IOException,
            SAXException {
        URL rules = AttributeBeanXmlConfigHelper.class
                .getResource("attributes-rules.xml");
        Logger.getLogger(AttributeBeanXmlConfigHelper.class).warn(
                "rules: " + rules);
        Digester digester = null;
        try {
            digester = DigesterLoader.createDigester(rules);
        }
        catch (Throwable e) {
            e.printStackTrace();
            e.getCause().printStackTrace();
        }

        // Push empty List onto Digester's Stack
        attributeConfigList = new ArrayList<AttributeBean>();
        digester.push(attributeConfigList);

        // Parse the XML document
        InputStream input = new FileInputStream(xmlConfigFile);
        digester.parse(input);
    }

    public static List<AttributeBean> getConfig() {
        return attributeConfigList;
    }
}

What could I possibly be doing wrong?

Why is it stating this when I start Tomcat:

attributes-config.xml not found, /Developer/JavaTools/tomcat/jakarta- tomcat-5.5.9/bin/WEB-INF/classes/org/coffeebreak/config/attributes- config.xml

it should be without the bin directory:

/Developer/JavaTools/tomcat/jakarta-tomcat-5.5.9/WEB-INF/classes/org/ coffeebreak/config/attributes-config.xml

Why is the rules file coming out as null?

2007-01-14 03:10:33,074 WARN [org.coffeebreak.helper.AttributeBeanXmlConfigHelper] - rules: null

WIth thanks!

James Dekker






Reply via email to