This is the mail archive of the
kawa@sources.redhat.com
mailing list for the Kawa project.
Making Serializable Classes
- From: Ranjan Bagchi <ranjan dot bagchi at frotz dot com>
- To: kawa at sources dot redhat dot com
- Date: Sat, 26 Jan 2002 20:49:19 -0800
- Subject: Making Serializable Classes
- References: <1011816896.6779.ezmlm@sources.redhat.com>
Hi kawa'ers--
I was experimenting with creating classes in Kawa, and was curious about making
Serializable classes.
So I tried this:
(define-simple-class <MyClass> (<java.io.Serializable>)
(x type: <int> init-value: 33 init-keyword: x:))
(define obj (make <MyClass>))
(define baos (make <java.io.ByteArrayOutputStream>))
(define oos (make <java.io.ObjectOutputStream> baos))
(invoke oos 'writeObject obj)
(define ois (make <java.io.ObjectInputStream> (make
<java.io.ByteArrayInputStream> (invoke baos 'toByteArray))))
(define obj1 (invoke ois 'readObject))
I expected an error when I invoked 'writeObject. But that worked fine...
What didn't work fine was deserializing the object: I get the following error
java.lang.ClassNotFoundException: MyClass
at java.net.URLClassLoader$1.run(URLClassLoader.java:201)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:189)
at java.lang.ClassLoader.loadClass(ClassLoader.java:308)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:264)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:324)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:212)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:546)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1491)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1413)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1604)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1252)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:323)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:42)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:28)
at java.lang.reflect.Method.invoke(Method.java:313)
at gnu.expr.PrimProcedure.applyV(PrimProcedure.java:142)
at gnu.mapping.MethodProc.applyN(MethodProc.java:133)
at gnu.kawa.reflect.Invoke.applyN(Invoke.java:149)
at gnu.kawa.reflect.Invoke.applyN(Invoke.java:49)
at gnu.expr.ApplyExp.eval(ApplyExp.java:46)
at gnu.expr.SetExp.eval(SetExp.java:88)
at gnu.expr.Expression.eval(Expression.java:21)
at gnu.expr.ModuleExp.evalModule(ModuleExp.java:182)
at kawa.Shell.run(Shell.java:77)
at kawa.Shell.run(Shell.java:32)
at kawa.SocketRepl.apply0(repl.java:491)
at gnu.mapping.Future.run(Future.java:59)
Curious if there's a way to get this to work...
Ranjan