Hi,
Sorry for being little over descriptive here. I have an issue deserializing
a file that contains a Map<String, List<POJOs>>. 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(<path of jar file containing the DBCustomer and
similar classes>);
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; [EMAIL PROTECTED]
URLClassLoader Class Loader -&gt; [EMAIL PROTECTED]

&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:
[EMAIL PROTECTED] (these last 3 lines
are automatically printed)

URLClassLoader Class Loader -&gt; [EMAIL PROTECTED]

&gt;<u>When run from tomcat started within Eclipse-</u>
Default Class Loader -&gt; WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------&gt; Parent Classloader:
[EMAIL PROTECTED]

URLClassLoader Class Loader -&gt; [EMAIL PROTECTED]

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

Reply via email to