This short patch should implement TC_CLASS type deserialization from
object-streams, which is required for example with Java Media Framework's
new registry-file loading. It appears to work properly with JMF 2.1.1
registry file at least, altough I'm new to Kaffe internals, hence no
serialization-side (output) support.

 -Donwulff
? kaffe-CLASS.patch
Index: libraries/javalib/kaffe/io/ObjectInputStreamImpl.java
===================================================================
RCS file: /cvs/kaffe/kaffe/libraries/javalib/kaffe/io/ObjectInputStreamImpl.java,v
retrieving revision 1.6
diff -u -r1.6 ObjectInputStreamImpl.java
--- libraries/javalib/kaffe/io/ObjectInputStreamImpl.java       2000/06/15 16:08:54    
 1.6
+++ libraries/javalib/kaffe/io/ObjectInputStreamImpl.java       2001/08/01 11:55:24
@@ -166,6 +166,10 @@
                currObject = getArray();
                break;
 
+       case ObjectStreamConstants.TC_CLASS:
+               currObject = getClassOnly();
+               break;
+
        case ObjectStreamConstants.TC_RESET:
                resetObjectReferences();
                return (readObject());
@@ -236,6 +240,26 @@
        try {
                ObjectStreamClassImpl cls = 
(ObjectStreamClassImpl)parent.readObject();
                Object obj = cls.getObject(parent, this);
+               return (obj);
+       }
+       catch (InvalidClassException ice) {
+               throw ice;
+       }
+       catch (ClassNotFoundException e1) {
+               throw new StreamCorruptedException("error getting object: " + e1);
+       }
+       catch (IOException e2) {
+               throw new StreamCorruptedException("error getting object: " + e2);
+       }
+       catch (ClassCastException e3) {
+               throw new StreamCorruptedException("error getting object: " + e3);
+       }
+}
+
+private Object getClassOnly() throws StreamCorruptedException, OptionalDataException, 
+InvalidClassException {
+       try {
+               Object obj = (ObjectStreamClassImpl)parent.readObject();
+               makeObjectReference(obj);
                return (obj);
        }
        catch (InvalidClassException ice) {

Reply via email to