Details
-
Type:
Bug
-
Status:
Resolved
-
Priority:
Blocker
-
Resolution: Fixed
-
Affects Version/s: 6.0.2
-
Fix Version/s: 6.1.0
-
Component/s: None
-
Labels:None
-
Environment:Fedora Core 6, Sun JVM 1.5.0_09
-
Testcase included:yes
-
Number of attachments :
Description
Upgrading from Jetty 6.0.1 to 6.0.2 gives me the following exception:
2006-12-21 08:34:43.995::WARN: EXCEPTION
javax.servlet.UnavailableException: Servlet Not Initialized
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:434)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:629)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
at org.mortbay.jetty.Server.handle(Server.java:303)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:452)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:721)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:509)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:209)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:349)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:320)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
The unit test that triggers this:
public void testJettyBang() throws Exception {
// setup test servlet container
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(0);
server.setConnectors(new Connector[]
);
ContextHandler context = new ContextHandler();
context.setContextPath("/");
server.setHandler(context);
ServletHandler handler = new ServletHandler();
context.setHandler(handler);
ServletHolder servletHolder = new ServletHolder();
servletHolder.setClassName(TestServlet.class.getName());
servletHolder.setName("TestServlet");
handler.addServlet(servletHolder);
ServletMapping servletMapping = new ServletMapping();
servletMapping.setServletName("TestServlet");
servletMapping.setPathSpecs(new String[]
);
handler.addServletMapping(servletMapping);
server.start();
int port = connector.getLocalPort();
LOG.debug("port: " + port);
String location = "http://localhost:" + port + "/";
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(location);
int result = httpClient.executeMethod(getMethod);
LOG.debug("result: " + result);
server.stop();
assertEquals(200, result);
String resultBody = getMethod.getResponseBodyAsString();
assertEquals("Hello World", resultBody);
}
public static class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
}
Fixed in 6.1.0
For 6.0.2 you can work around the issue if you code like:
Context context = new Context(...);
ServletHandler handler = context.getServletHandler();
...