You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Matt Larson <la...@ncep.noaa.gov> on 2001/09/26 21:25:19 UTC
[Fwd: Tomcat's non-polymorphic request handler.]
I sent this to the tomcat user group, but got no response.
Comments?
I'm having some difficulty with the polymorphic behavior of Tomcat's
request handler.
Consider the following:
package RMS;
import java.lang.Integer;
public class TestPolyMorph {
int i;
String s;
public void setNumberVar(String i) {
this.i = Integer.parseInt(i);
}
public void setNumberVar(int i) {
this.i = i;
}
public int getNumber() {
return(i);
}
public void setStringVar(String s) {
this.s = s;
}
public String getStringVar(String s) {
return(s);
}
public TestPolyMorph() {
}
}
... and the .JSP file:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!-- <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="Mon, 01 Jan 1990 00:00:01 GMT">
-->
<meta http-equiv="Content-Type"
content="text/html;CHARSET=iso-8859-1">
<meta http-equiv="Content-Style-Type" content="text/css">
</head>
<%@ page language="java" import="RMS.*" %>
<jsp:useBean id="ui" class="RMS.TestPolyMorph" scope="session"/>
<jsp:setProperty name="ui" property="*"/>
<body>
Testing... Testing... Testing.
</body>
</html>
Now... the passing a non-integer value for the property: numberVar will
yield a stack trace:
http://SERVER:PORT/CONTEXT/jsp/TestPolyMorph.jsp?numberVar=foobar
org.apache.jasper.JasperException: foobar
at
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:204)
at
org.apache.jasper.runtime.JspRuntimeLibrary.introspect(JspRuntimeLibrary.java:152)
at
jsp._0002fjsp_0002fTestPolyMorph_0002ejspTestPolyMorph_jsp_2._jspService(_0002fjsp_0002fTestPolyMorph_0002ejspTestPolyMorph_jsp_2.java:91)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:177)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:318)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:391)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
at org.apache.tomcat.core.Handler.service(Handler.java:286)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:484)
Root cause:
org.apache.jasper.JasperException: 3.2
at
org.apache.jasper.runtime.JspRuntimeLibrary.convert(JspRuntimeLibrary.java:138)
at
org.apache.jasper.runtime.JspRuntimeLibrary.introspecthelper(JspRuntimeLibrary.java:198)
at
org.apache.jasper.runtime.JspRuntimeLibrary.introspect(JspRuntimeLibrary.java:152)
at
jsp._0002fjsp_0002fTestPolyMorph_0002ejspTestPolyMorph_jsp_2._jspService(_0002fjsp_0002fTestPolyMorph_0002ejspTestPolyMorph_jsp_2.java:91)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:119)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:177)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:318)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:391)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
at org.apache.tomcat.core.Handler.service(Handler.java:286)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:797)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:210)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:498)
at java.lang.Thread.run(Thread.java:484)
Even though there is indeed a method signature:
setNumberVar(String i);
....
Tomcat prefers to use (through introspection):
setNumberVar(int i);
The beans I use to handle property settings must continue to use
polymorphism.
Any ideas?
Thanks,
matt