[jboss-user] [Tomcat, HTTPD, Servlets & JSP] - servlet init hangs reading /WEB-INF/web.xml 5.0.1
mlybarger
do-not-reply at jboss.com
Mon Mar 9 07:57:03 EDT 2009
I have a very simple servlet which hangs on the servlet init method. Another similar example I have throws an OOM excetpion doing the same thing. All the code is doing is trying to parse the web.xml using the commons digester.
I hope this isn't too much code to paste. I'm running a default 5.0.1 (same behavior on 5.0.0, but this code runs fine on the 4.2.2 server) server with 1.6.0.11 jdk.
This code originates from the struts 1.1 ActionServlet. There is a problem with the digester.parse() call. Does this have something to do with VFS perhaps?
| package org.test;
|
| import java.io.IOException;
| import java.io.InputStream;
| import java.net.URL;
|
| import javax.servlet.ServletException;
| import javax.servlet.http.HttpServlet;
|
| import org.apache.commons.digester.Digester;
| import org.apache.commons.logging.Log;
| import org.apache.commons.logging.LogFactory;
| import org.apache.struts.Globals;
| import org.xml.sax.SAXException;
|
| public class TestServlet extends HttpServlet {
|
| public TestServlet() {
| super();
| // TODO Auto-generated constructor stub
| }
|
| protected static Log log = LogFactory.getLog(TestServlet.class);
| protected String registrations[] = {
| "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN",
| "/org/apache/struts/resources/struts-config_1_0.dtd",
| "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN",
| "/org/apache/struts/resources/struts-config_1_1.dtd",
| "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN",
| "/org/apache/struts/resources/web-app_2_2.dtd",
| "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",
| "/org/apache/struts/resources/web-app_2_3.dtd"
| };
|
| protected String servletMapping = null;
| protected String servletName = null;
|
| /**
| * @see Servlet#init(ServletConfig)
| */
| protected void initServlet() throws ServletException
| {
|
| // Remember our servlet name
| this.servletName = getServletConfig().getServletName();
|
| // Prepare a Digester to scan the web application deployment descriptor
| Digester digester = new Digester();
| digester.push(this);
| digester.setNamespaceAware(true);
| digester.setValidating(false);
|
| // Register our local copy of the DTDs that we can find
| for (int i = 0; i < registrations.length; i += 2) {
| URL url = this.getClass().getResource(registrations[i+1]);
| if (url != null) {
| digester.register(registrations, url.toString());
| }
| }
|
| // Configure the processing rules that we need
| digester.addCallMethod("web-app/servlet-mapping",
| "addServletMapping", 2);
| digester.addCallParam("web-app/servlet-mapping/servlet-name", 0);
| digester.addCallParam("web-app/servlet-mapping/url-pattern", 1);
|
| // Process the web application deployment descriptor
| if (log.isDebugEnabled()) {
| log.debug("Scanning web.xml for controller servlet mapping");
| }
|
| InputStream input =
| getServletContext().getResourceAsStream("/WEB-INF/web.xml");
|
| try {
| digester.parse(input);
|
| } catch (IOException e) {
| log.error("io error", e);
| throw new ServletException(e);
|
| } catch (SAXException e) {
| log.error("error", e);
| throw new ServletException(e);
|
| } finally {
| if (input != null) {
| try {
| input.close();
| } catch (IOException e) {
| log.error("error", e);
| throw new ServletException(e);
| }
| }
| }
|
| // Record a servlet context attribute (if appropriate)
| if (log.isDebugEnabled()) {
| log.debug("Mapping for servlet '" + servletName + "' = '" +
| servletMapping + "'");
| }
|
| if (servletMapping != null) {
| getServletContext().setAttribute(Globals.SERVLET_KEY, servletMapping);
| }
|
| }
|
| public void init() throws ServletException {
| log.info("start - init()");
| initServlet();
| log.info("done - init()");
| }
|
| }
|
web.xml
| <?xml version="1.0" encoding="UTF-8"?>
| <!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>jbtest</display-name>
| <servlet>
| <servlet-name>ActionServlet</servlet-name>
| <servlet-class>org.test.TestServlet</servlet-class>
| <load-on-startup>-1</load-on-startup>
| </servlet>
| <servlet-mapping>
| <servlet-name>ActionServlet</servlet-name>
| <url-pattern>/do/eforms-client</url-pattern>
| </servlet-mapping>
| </web-app>
|
It's been over 5 minutes sitting there with the cpu spiked and the init method didn't finish. My log only shows the start log, not the stop.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4216182#4216182
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4216182
More information about the jboss-user
mailing list