Problem fixed... The problem was not with Tomcat but with the proprietary library used (my class 'B').
At least I learned how Tomcat loads the classes... And the potential issues with the class loaders. Thanks again Thierry -----Original Message----- From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]] Sent: Saturday, July 13, 2002 8:42 PM To: Tomcat Users List; [EMAIL PROTECTED] Subject: RE: ClassCast exception On Sat, 13 Jul 2002, Thierry Thelliez wrote: > Date: Sat, 13 Jul 2002 20:01:29 -0600 > From: Thierry Thelliez <[EMAIL PROTECTED]> > Reply-To: Tomcat Users List <[EMAIL PROTECTED]>, [EMAIL PROTECTED] > To: 'Tomcat Users List' <[EMAIL PROTECTED]> > Subject: RE: ClassCast exception > > Thanks Craig for correcting my forName() mistake. > > But do you have any suggestions for the casting issue? > What's the return type of doSomething()? I presume it returns a B? The most reliable way to cause a ClassCastException is if A is *not* really a subclass of B :-). If you accidentally made this mistake, putting them in the same JAR or things like that wouldn't have mattered anyway. > > Regards, > Thierry > Craig > -----Original Message----- > From: Craig R. McClanahan [mailto:[EMAIL PROTECTED]] > Sent: Saturday, July 13, 2002 7:57 PM > To: Tomcat Users List; [EMAIL PROTECTED] > Subject: RE: ClassCast exception > > > > On Sat, 13 Jul 2002, Thierry Thelliez wrote: > > > Date: Sat, 13 Jul 2002 19:46:36 -0600 > > From: Thierry Thelliez <[EMAIL PROTECTED]> > > Reply-To: Tomcat Users List <[EMAIL PROTECTED]>, > [EMAIL PROTECTED] > > To: 'Tomcat Users List' <[EMAIL PROTECTED]> > > Subject: RE: ClassCast exception > > > > > > More details to the problem described in the first email. > > > > I have now tried another scenario: > > > > My parent class (B) is now sitting in a jar in WEB-INF/lib. > > My subClass (A) is in a .class in WEB-INF/classes. > > B and A are in different packages (p1.x.B and p2.A). > > > > The code with the casting issue is in a static method of A. > > > > B b = doSomething(); -> Works > > > > log("B " + b.getClass().getName()); -> p1.x.B > > log("B " + b.getClass().getClassLoader()); -> CL1 > > > > log("A " + A.class.getClassLoader()); -> CL2 (seems to be > = > > to CL1) > > > > That will generally be true -- the container sets up a single class > loader > for everything in WEB-INF/classes and WEB-INF/lib. > > > ( b.getClass().getClassLoader()) == > > Class.forName("p2.A").getClassLoader())); -> true > > > > ( b.getClass().getClassLoader()) == > > Class.forName("A").getClassLoader())); -> Class not > found... > > This is never going to work. The argument to Class.forName has to be > the > fully qualified class name. See the Javadocs on java.lang.Class for > more. > > > > > A a = (A) doSomething(); -> > > ClassCastException... > > > > > > > > I have been through extensive web search. It seems that this problem > is > > not uncommon but I cannot figure out how to solve it... > > > > (How do you get the instance id for the ClassLoaders? In the output in > > my first email, my class loaders are giving me a name, not a unique > id) > > > > Help! > > > > Thierry > > > > Craig > > > > -----Original Message----- > > From: Thierry Thelliez [mailto:[EMAIL PROTECTED]] > > Sent: Saturday, July 13, 2002 6:04 PM > > To: [EMAIL PROTECTED] > > Subject: ClassCast exception > > > > Hello, > > > > I have a ClassCast problem. I read the archive and attempted few > > suggestions (like grouping everything in one jar in WEB-INF/lib) > without > > success. > > > > I am using tomcat 4.0.4 and 1.3.1_02 under Solaris. > > > > Someone suggested looking at the ClassLoaders. The following is > > generated by something like: > > Log4j("MyClass " + MyClass.class.getClassLoader()); > > > > -------------------------------------------------------------------- > > 2002-07-13 18:36:56,808 - - MyClass WebappClassLoader > > available: > > delegate: false > > repositories: > > required: > > ----------> Parent Classloader: > > StandardClassLoader > > available: > > delegate: true > > repositories: > > file:/serverPath/jakarta-tomcat-4.0.4/classes/ > > file:/serverPath/jakarta-tomcat-4.0.4/lib/jasper-runtime.jar > > file:/serverPath/jakarta-tomcat-4.0.4/lib/jasper-compiler.jar > > file:/serverPath/jakarta-tomcat-4.0.4/lib/naming-factory.jar > > required: > > ----------> Parent Classloader: > > StandardClassLoader > > available: > > Extension[javax.mail, implementationVendor=Sun Microsystems, Inc., > > implementationVendorId=com > > .sun, implementationVersion=1.2, specificationVendor=Sun Microsystems, > > Inc., specificationVersion > > =1.2] > > delegate: true > > repositories: > > file:/serverPath/jakarta-tomcat-4.0.4/common/classes/ > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/naming-common.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/servlet.jar > > > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/naming-resources.jar > > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/jdbc2_0-stdext.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/activation.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/jta-spec1_0_1.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/xerces.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/tyrex-0.9.7.0.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/mail.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/jndi.jar > > file:/serverPath/jakarta-tomcat-4.0.4/common/lib/cos.jar > > required: > > ----------> Parent Classloader: > > sun.misc.Launcher$AppClassLoader@3f52a5 > > > > > > --------------------------------- > > > > just after that I try a Class.forName("MyClass"); > > but I get a ClassNotFound exception. > > > > > > Is that normal that I don't see listed the webapps/myApp/WEB-INF/lib > in > > the repositories above? > > > > In the ClassCast issue, both classes return the same loader. > > > > Thanks, > > Thierry > > > > > > -- > > To unsubscribe, e-mail: > > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > > <mailto:[EMAIL PROTECTED]> > > > > > > -- > > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > > > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
