You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2001/10/01 12:58:43 UTC
DO NOT REPLY [Bug 3896] New: -
ClassCastException when invoking certain subclasses of HTTPServlet
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3896>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=3896
ClassCastException when invoking certain subclasses of HTTPServlet
Summary: ClassCastException when invoking certain subclasses of
HTTPServlet
Product: Tomcat 4
Version: 4.0 Final
Platform: Sun
OS/Version: Solaris
Status: NEW
Severity: Normal
Priority: Other
Component: Catalina
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: faensen@inf.fu-berlin.de
When invoking a servlet that is a subclass of org.webmacro.http.WMServlet (which
in turn is a direct subclass of HTTPServlet) the Catalina core throws a
ServletException that is a linked to a ClassCastException:
Here is a snippet from the log file
2001-10-01 12:19:59
StandardWrapper[:org.apache.catalina.INVOKER.hermes.web.HelloWorld]: Marking
servlet org.apache.ca
talina.INVOKER.hermes.web.HelloWorld as unavailable
2001-10-01 12:19:59 invoker: Cannot allocate servlet instance for path
/servlet/hermes.web.HelloWorld
javax.servlet.ServletException: Class hermes.web.HelloWorld is not a Servlet
at
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:848)
at
org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:621)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(Unknown
Source)
at org.apache.catalina.servlets.InvokerServlet.doGet(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Unknown Source)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(Unknown
Source)
at org.apache.catalina.core.StandardWrapperValve.invoke(Unknown Source)
at org.apache.catalina.core.StandardPipeline.invokeNext(Unknown Source)
at org.apache.catalina.core.StandardPipeline.invoke(Unknown Source)
at org.apache.catalina.core.ContainerBase.invoke(Unknown Source)
at org.apache.catalina.core.StandardContextValve.invoke(Unknown Source)
The problem seems to occur in the following lines in
org.apache.catalina.core.StandardWrapper:
try {
servlet = (Servlet) classClass.newInstance();
} catch (ClassCastException e) {
unavailable(null);
// Restore the context ClassLoader
throw new ServletException
(sm.getString("standardWrapper.notServlet", actualClass), e);
}
By splitting the line
servlet = (Servlet) classClass.newInstance();
and adding some debugging output
log("Trying to instantiate " + classClass.getName());
Object instance = classClass.newInstance();
log("Instantiated, instance is " + instance);
log("Trying to cast ...");
servlet = (Servlet) instance;
one can focus that instance (which is of class hermes.web.HelloWorld) cannot be
casted to Servlet.
The class hierarchy is as follows
Interface javax.servlet.Servlet
^
| implements
|
Class javax.servlet.GenericServlet
^
| extends
|
Class javax.servlet.http.HttpServlet
^
| extends
|
Class org.webmacro.servlet.WMServlet
^
| extends
|
Class hermes.web.HelloWorld
Clearly, HelloWorld should be castable to Servlet.
I have no idea why the cast fails. May be something is wrong with the class
loader.
Daniel Faensen