title: Tomcat startup (web.xml) issue
body: <p>I'm using Tomcat 6 with eclipse web tools to publish an application. When I deploy the j2ee application I'm getting this error via tomcat logs:</p>
  
  <pre><code>Feb 18, 2010 9:50:33 PM org.apache.catalina.core.AprLifecycleListener init
  INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.6.0_17\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Program Files\Microsoft SQL Server\90\Tools\binn\;Pñ
  Feb 18, 2010 9:50:33 PM org.apache.coyote.http11.Http11Protocol init
  INFO: Initializing Coyote HTTP/1.1 on http-8080
  Feb 18, 2010 9:50:33 PM org.apache.catalina.startup.Catalina load
  INFO: Initialization processed in 443 ms
  Feb 18, 2010 9:50:33 PM org.apache.catalina.core.StandardService start
  INFO: Starting service Catalina
  Feb 18, 2010 9:50:33 PM org.apache.catalina.core.StandardEngine start
  INFO: Starting Servlet Engine: Apache Tomcat/6.0.24
  Feb 18, 2010 9:50:33 PM org.apache.catalina.startup.HostConfig deployDescriptor
  INFO: Deploying configuration descriptor aramark-optima.xml
  Feb 18, 2010 9:50:33 PM org.apache.tomcat.util.digester.Digester endElement
  SEVERE: End event threw exception
  java.lang.IllegalArgumentException: Can't convert argument: null
   at org.apache.tomcat.util.IntrospectionUtils.convert(IntrospectionUtils.java:1005)
   at org.apache.tomcat.util.digester.CallMethodRule.end(CallMethodRule.java:523)
   at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
   at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1138)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
   at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
   at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
   at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:365)
   at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1072)
   at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4377)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
   at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
   at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
   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:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
  Feb 18, 2010 9:50:33 PM org.apache.catalina.startup.ContextConfig applicationWebConfig
  SEVERE: Parse error in application web.xml file at jndi:/localhost/aramark-optima/WEB-INF/web.xml
  java.lang.IllegalArgumentException: Can't convert argument: null
   at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2806)
   at org.apache.tomcat.util.digester.Digester.createSAXException(Digester.java:2832)
   at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1141)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
   at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
   at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1642)
   at org.apache.catalina.startup.ContextConfig.applicationWebConfig(ContextConfig.java:365)
   at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1072)
   at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:261)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
   at org.apache.catalina.core.StandardContext.start(StandardContext.java:4377)
   at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
   at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
   at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:526)
   at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:637)
   at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:563)
   at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:498)
   at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1277)
   at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:321)
   at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
   at org.apache.catalina.core.StandardHost.start(StandardHost.java:722)
   at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
   at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
   at org.apache.catalina.core.StandardService.start(StandardService.java:516)
   at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
   at org.apache.catalina.startup.Catalina.start(Catalina.java:593)
   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:597)
   at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
   at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
  Caused by: java.lang.IllegalArgumentException: Can't convert argument: null
   at org.apache.tomcat.util.IntrospectionUtils.convert(IntrospectionUtils.java:1005)
   at org.apache.tomcat.util.digester.CallMethodRule.end(CallMethodRule.java:523)
   at org.apache.tomcat.util.digester.Rule.end(Rule.java:229)
   at org.apache.tomcat.util.digester.Digester.endElement(Digester.java:1138)
   ... 38 more
  Feb 18, 2010 9:50:33 PM org.apache.catalina.startup.ContextConfig applicationWebConfig
  SEVERE: Occurred at line 8 column 19
  Feb 18, 2010 9:50:33 PM org.apache.catalina.startup.ContextConfig start
  SEVERE: Marking this application unavailable due to previous error(s)
  log4j:WARN No appenders could be found for logger (org.objectweb.jotm).
  log4j:WARN Please initialize the log4j system properly.
  Feb 18, 2010 9:50:34 PM org.apache.catalina.core.StandardContext start
  SEVERE: Error getConfigured
  Feb 18, 2010 9:50:34 PM org.apache.catalina.core.StandardContext start
  SEVERE: Context [/aramark-optima] startup failed due to previous errors
  Feb 18, 2010 9:50:34 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
  SEVERE: A web application appears to have started a thread named [JotmBatch] but has failed to stop it. This is very likely to create a memory leak.
  Feb 18, 2010 9:50:34 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
  SEVERE: A web application appears to have started a thread named [JotmClock] but has failed to stop it. This is very likely to create a memory leak.
  </code></pre>
  
  <p>This leads me to the web.xml file - which apparently is having issues being parsed. However, when examining the web.xml I don't see anything wrong.</p>
  
  <p>Here is the web.xml:</p>
  
  <pre class="lang-xml prettyprint-override"><code>    &lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&gt;
    &lt;javaee:display-name&gt;BlazeDS&lt;/javaee:display-name&gt;
    &lt;javaee:description&gt;BlazeDS Application&lt;/javaee:description&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;f2as.library.file&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/WEB-INF/f2as/user_classes/dto_formulas_complib.swc&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;f2as.library.root&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;com.theriabook.controls.superGridClasses.FormulaBase&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;mxmlc.configuration.file&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/WEB-INF/f2as/mxmlc-flex-config.xml&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;f2as.configuration.file&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/WEB-INF/f2as/flex-config.xml&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;f2as.class.path&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/WEB-INF/f2as/jars&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;flex.class.path&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/WEB-INF/flex/hotfixes,/WEB-INF/flex/jars&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;listener&gt;
      &lt;javaee:listener-class&gt;flex.messaging.HttpFlexSession&lt;/javaee:listener-class&gt;
    &lt;/listener&gt;
    &lt;servlet&gt;
      &lt;javaee:display-name&gt;MessageBrokerServlet&lt;/javaee:display-name&gt;
      &lt;servlet-name&gt;MessageBrokerServlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;flex.messaging.MessageBrokerServlet&lt;/servlet-class&gt;
      &lt;init-param&gt;
        &lt;javaee:param-name&gt;services.configuration.file&lt;/javaee:param-name&gt;
        &lt;javaee:param-value&gt;/WEB-INF/flex/services-config.xml&lt;/javaee:param-value&gt;
      &lt;/init-param&gt;
      &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
    &lt;/servlet&gt;
    &lt;servlet&gt;
      &lt;servlet-name&gt;PdfStreamServlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;com.farata.pdf.StreamPdf&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet&gt;
      &lt;servlet-name&gt;PageReqServlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;com.farata.pdf.PageRequesterServlet&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet&gt;
      &lt;javaee:display-name&gt;fileupload&lt;/javaee:display-name&gt;
      &lt;servlet-name&gt;fileupload&lt;/servlet-name&gt;
      &lt;servlet-class&gt;com.aramark.upload.FileUploadServlet&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet&gt;
      &lt;javaee:display-name&gt;filedownload&lt;/javaee:display-name&gt;
      &lt;servlet-name&gt;filedownload&lt;/servlet-name&gt;
      &lt;servlet-class&gt;com.aramark.upload.FileDownloadServlet&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;PdfStreamServlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;*.ppdf&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;PageReqServlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;*.print&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;MessageBrokerServlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/messagebroker/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;fileupload&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/fileupload/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;filedownload&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/download/*&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;welcome-file-list&gt;
      &lt;welcome-file&gt;demo3.html&lt;/welcome-file&gt;
      &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
    &lt;/welcome-file-list&gt;
    &lt;filter&gt;
      &lt;filter-name&gt;clearbi-compiler-invocation-interceptor&lt;/filter-name&gt;
      &lt;filter-class&gt;com.cti.compiler.env.web.CompilerInvocationInterceptor&lt;/filter-class&gt;
    &lt;/filter&gt;
    &lt;filter-mapping&gt;
      &lt;filter-name&gt;clearbi-compiler-invocation-interceptor&lt;/filter-name&gt;
      &lt;servlet-name&gt;MessageBrokerServlet&lt;/servlet-name&gt;
    &lt;/filter-mapping&gt;
    &lt;mime-mapping&gt;
      &lt;extension&gt;air&lt;/extension&gt;
      &lt;mime-type&gt;application/vnd.adobe.air-application-installer-package+zip&lt;/mime-type&gt;
    &lt;/mime-mapping&gt;
    &lt;servlet&gt;
      &lt;servlet-name&gt;CrystalReportViewerServlet&lt;/servlet-name&gt;
      &lt;servlet-class&gt;com.crystaldecisions.report.web.viewer.CrystalReportViewerServlet&lt;/servlet-class&gt;
    &lt;/servlet&gt;
    &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;CrystalReportViewerServlet&lt;/servlet-name&gt;
      &lt;url-pattern&gt;/CrystalReportViewerHandler&lt;/url-pattern&gt;
    &lt;/servlet-mapping&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;crystal_image_uri&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;/crystalreportviewers&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
    &lt;context-param&gt;
      &lt;javaee:param-name&gt;crystal_image_use_relative&lt;/javaee:param-name&gt;
      &lt;javaee:param-value&gt;webapp&lt;/javaee:param-value&gt;
    &lt;/context-param&gt;
  &lt;/web-app&gt;
  </code></pre>