Why not just use Class.forName(classNameFromApplet)? Or are you
trying to load unknown classes across the net? If the classes are
in the servlet engine's classpath or in the servlets directory, you
don't need a URLClassloader.

Rod McChesney, Korobra


John Brecht wrote:
>
> Hello -
>
> I originally posted this on comp.lang.java.programmer, but the responses
> I got seem to indicate that the problem has more to do with this being a
> servlet, so I repost it here. (I'm brand new to this list. I tried
> searching the archives, but the searcher just hung. Is there an FAQ
> somewhere?)
>
> I am writing a servlet that acts as a dispatcher between applets and
> classes on the server whose methods those applets need to call. (These
> classes on the server should never get downloaded to the client for
> security reasons.) All of these classes on the server extend the same
> class, Solver. Solver has the method, checkAttempt(). Any subclass of
> Solver is meant to override this method.
>
> My servlet uses a URLClassLoader to load the appropriate class based on
> a string passed to it from the applet. I am able to get the class
> loaded, but when I try to cast it to Solver, so I can call it's
> checkAttempt() method, I get a ClassCastException. Here is how I do the
> class loading:
>
>   private Solver getSolver(String solverName) {
>
>     Class solverClass;
>     Solver theSolver = null;
>
>     try {
>       log("about to load class... "+solverName);
>       solverClass = loader.loadClass(solverName);
>       log("loaded class: "+solverClass);
>       log("parent:"+solverClass.getSuperclass());
>
>       log("about to instantiate...");
>       Object theInstance = solverClass.newInstance();
>       log("instantiated");
>
>       if(theInstance instanceof Solver ) {
>        log("about to cast as Solver...");
>         theSolver = (Solver)(theInstance);
>         log("cast solver:"+theSolver);
>       } else {
>         log("couldn't cast, not a Solver!");
>       }
>
>     } catch (Exception e) {
>       log(""+e);
>     }
>
>     return theSolver;
>  }
>
> "loader" is a URLClassLoader prepared with the appropriate codebase upon
> initilization of the servlet.  A check of the logs shows that the class I'm
> trying to instantiate has Solver as a Superclass, but then "theInstance"
> somehow does not end up being an actual instance of Solver, and thus not
> castable to Solver.  How can this be?  What am I doing wrong?
>
> ---
> John Brecht
> Department of Physics and Astronomy
> Michigan State University
> [EMAIL PROTECTED]
>
> ___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to