Newsgroup: it.comp.java
Titolo: bug di tomcat 3.2.1

Ciao.
La cosa mi sembra curiosa e così ve la riporto. Pensavo di andarmi a pescare
il codice sorgente di tomcat per capire cosa succede, e perché, ma purtroppo
sono di fretta.
Se qualcuno sa darmi una spiegazione...
Codice:
<%@page import="java.lang.reflect.*, java.io.*" %>
<%
    Class clazz = application.getClass();
    Method m = clazz.getMethod("getResourceAsStream", new Class[] {
String.class });
    String pathToLayout = "/nomefile.html";
    InputStream is = (InputStream)m.invoke(application, new Object[]
{pathToLayout});
    out.println("is = " + is);
%>
output di Tomcat 3.2.1 (Errore 500 su browser)
Internal Servlet Error:
javax.servlet.ServletException
 at
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImp
l.java:459)
 at
_0002fTestReflection_0002ejspTestReflection_jsp_0._jspService(_0002fTestRefl
ection_0002ejspTestReflection_jsp_0.java:75)
 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.ja
va: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:79
7)
 at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
 at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.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:
java.lang.IllegalAccessException
 at java.lang.reflect.Method.invoke(Native Method)
 at
_0002fTestReflection_0002ejspTestReflection_jsp_0._jspService(_0002fTestRefl
ection_0002ejspTestReflection_jsp_0.java:65)
 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.ja
va: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:79
7)
 at org.apache.tomcat.core.ContextManager.service(ContextManager.java:743)
 at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.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)
Output su tomcat 3.3.1:
is = java.io.BufferedInputStream@2b28fe
In Tomcat 3.3.1 funziona perfettamente. Su Tomcat 3.2.1 no.
La documentazione javadoc dice che su invoke l'eccezione
java.lang.IllegalAccessException sta a significare che ho chiamato un metodo
non accessibile. E non è vero. Ora quello che mi piacerebbe capire è come è
possibile che chiamando un metodo dell'interfaccia pubblica di un oggetto,
ciò non funziona. Che cosa hanno combinato dietro le quinte perché ciò
avvenga, proprio non ne ho idea.
Quando ho un attimo, se la memoria del problema persiste, dò uno sguardo ai
sorgenti. Ma nel frattempo, qualcuno ha mai incontrato un problema simile?
--
Luigi R. Viggiano
Programmatore Java. scjp, scwcd.
JUG Torino Member:
http://www.jugtorino.it

 sorgenti. Ma nel frattempo, qualcuno ha mai incontrato un problema simile?
Mai capitato, però se scopri da che dipende faccelo sapere ;)
--------------------------------
Inviato via 
http://usenet.libero.it

> Mai capitato, però se scopri da che dipende faccelo sapere ;)
Ho dato uno sguardo a ServletContextWrapper di Tomcat :-( niente di strano.
Continua ad essere un mistero. Può darsi che si tratti di una strana
combinazione di funzionamento del ClassLoader di tomcat o di qualche
securitymanager, che ne impedisca l'invocazione di metodi via reflection?
Boh...