You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Fernando Cheros <fe...@cabezudo.net> on 2006/05/13 16:08:24 UTC
Tomcat, ClassLoader and java.lang.ClassCastException
I have this code:
DAOClassLoader d = new DAOClassLoader();
Object o = d.loadClass("security.to.ActionTO").newInstance();
System.out.println(o);
ActionTO u = (ActionTO)o;
u.setDescription("descripcion");
System.out.println(u);
The ActionTO is a simple TO object whit their get and sets and the
loadClass is:
package infraestructure.utils;
import java.io.FileInputStream;
import java.util.Hashtable;
public class DAOClassLoader extends ClassLoader {
private Hashtable classes = new Hashtable();
private byte getClassFromFile(String className)[] {
System.out.println("Fetching the implementation of "
+ className);
byte result[];
try {
String file =
"/home/esteban/workspace/security/web/WEB-INF/classes/"
+ className;
file = file.replaceAll("\\.", "/") + ".class";
System.out.println("Trataremos con " + file + "...");
FileInputStream fi = new FileInputStream(file);
System.out.println("FileInputStream: " + fi);
result = new byte[fi.available()];
fi.read(result);
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@SuppressWarnings("unchecked")
public Class loadClass(String className) throws ClassNotFoundException {
return (loadClass(className, true));
}
@SuppressWarnings("unchecked")
public synchronized Class loadClass(String className, boolean resolveIt)
throws ClassNotFoundException {
Class result;
byte classData[];
System.out.println("Load class : " + className);
System.out.println("cache : ");
/* Check our local cache of classes */
result = (Class) classes.get(className);
if (result != null) {
System.out.println("returning cached result.");
return result;
}
try {
result = super.findSystemClass(className);
System.out
.println("returning system class (in CLASSPATH).");
return result;
} catch (ClassNotFoundException e) {
System.out.println("Not a system class.");
}
System.out.println("repositorio ");
classData = getClassFromFile(className);
if (classData == null) {
throw new ClassNotFoundException();
}
/* Define it (parse the class file) */
result = this.defineClass(null, classData, 0, classData.length);
if (result == null) {
throw new ClassFormatError();
}
if (resolveIt) {
resolveClass(result);
}
classes.put(className, result);
System.out.println("Returning newly loaded class.");
return result;
}
}
When I run the code in the console work fine, put when I run in a jsp I
have this:
type Exception report
message
description The server encountered an internal error () that prevented
it from fulfilling this request.
exception
org.apache.jasper.JasperException: security.to.ActionTO
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.ClassCastException: security.to.ActionTO
security.administration.Authorization.<init>(Authorization.java:51)
org.apache.jsp.admin.login_jsp._jspService(login_jsp.java:49)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
note The full stack trace of the root cause is available in the Apache
Tomcat/5.0 logs.
and the log is:
2006-05-12 14:02:42 StandardWrapperValve[jsp]: Servlet.service() for
servlet jsp threw exception
java.lang.ClassCastException: security.to.ActionTO
at
security.administration.Authorization.<init>(Authorization.java:46)
at org.apache.jsp.admin.login_jsp._jspService(login_jsp.java:49)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
I configure tomcat with:
# Use the Java security manager? (yes/no)
TOMCAT5_SECURITY=no
to rule out the security system like a problem.
If I comment the code:
ActionTO u = (ActionTO)o;
work 'fine' (fine is like 'just run').
Anyone have any idea?
Thanks.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org