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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to