You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by jtigre <pu...@yahoo.com> on 2007/06/20 14:15:08 UTC

ClassNotFoundException when deserialized from tomcat web app


Hi,
Sorry for being little over descriptive here. I have an issue deserializing
a file that contains a Map&lt;String, List&lt;POJOs&gt;&gt;. These POJO bean
classes are stored in a 
jar file uder web-app/lib. I use classes from this jar in the rest of the
application. I can deserialize the file from a standalone java program and,
from tomcat web app when tomcat is started from within Eclipse IDE; but I
can not get it to work from the same webapp when tomcat is started in
standalone mode 
(not from within IDE). I have some javabeans added into a List object, which
is added to a LinkedHashMap object in the serialized file.

This is the partial stack trace - 
java.lang.ClassNotFoundException: com.biz.icomp.dbi.DBCustomer  
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:585)

This is the code -
FileInputStream fis = new FileInputStream(serializedFilePath);
ObjectInputStream ois = new ObjectInputStream(fis);
Map map = (Map)ois.readObject();
ois.close();

I even tried to override the default class loader as -
ClassLoader old = Thread.currentThread().getContextClassLoader();
FileInputStream fis = new FileInputStream(serializedFilePath);
ObjectInputStream ois = new ObjectInputStream(fis);
File root = new File(&lt;path of jar file containing the DBCustomer and
similar classes&gt;);
URLClassLoader urlLoader = new URLClassLoader(new URL[] { root.toURL() },
Thread.currentThread().getContextClassLoader());
Map map = (Map)ois.readObject();
ois.close();
Thread.currentThread().setContextClassLoader(old);

It still doesn't work. I also tried printing the default class loader and
the loader after overriding it. This is what I see - 
&gt;<u>When run from a standalone java class-</u>
Default Class Loader -&gt; sun.misc.Launcher$AppClassLoader@a39137
URLClassLoader Class Loader -&gt; java.net.URLClassLoader@127f79d

&gt;<u>When run from tomcat started directly (not from IDE)-</u>
Default Class Loader -&gt; WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------&gt; Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@25c828 (these last 3 lines
are automatically printed)

URLClassLoader Class Loader -&gt; java.net.URLClassLoader@170a4d0

&gt;<u>When run from tomcat started within Eclipse-</u>
Default Class Loader -&gt; WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------&gt; Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@10d4f27

URLClassLoader Class Loader -&gt; java.net.URLClassLoader@1ec4333

So, the class loaders are same whether or not the tomcat is started from
within IDE. The class which is not found by the class loader, is actually
there in a 
jar file in WEB-IN\lib. I tried everything I found on google. I copied the
jar file in common/lib of tomcat installation but it didn't help. As I said,
it works when I start tomcat from eclipse. Am I missing anything? If this is
a classpath issue, I am not sure how should I resolve it as the web app
contains all classes it needs to use. Appreciate your help.

-- 
View this message in context: http://www.nabble.com/ClassNotFoundException-when-deserialized-from-tomcat-web-app-tf3951988.html#a11212063
Sent from the Tomcat - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org