@@ -17,7 +17,7 @@ class JavaSerializerWrapper : JavaSerializer() {
1717 val graphContext = kryo.graphContext
1818 var objectStream = graphContext.get<Any >(this ) as ObjectInputStream ?
1919 if (objectStream == null ) {
20- objectStream = WrappingObjectInputStream (input, kryo)
20+ objectStream = IgnoringUidWrappingObjectInputStream (input, kryo)
2121 graphContext.put(this , objectStream)
2222 }
2323 objectStream.readObject()
@@ -27,7 +27,7 @@ class JavaSerializerWrapper : JavaSerializer() {
2727 }
2828}
2929
30- class WrappingObjectInputStream (iss : InputStream ? , private val kryo : Kryo ) : ObjectInputStream(iss) {
30+ class IgnoringUidWrappingObjectInputStream (iss : InputStream ? , private val kryo : Kryo ) : ObjectInputStream(iss) {
3131 override fun resolveClass (type : ObjectStreamClass ): Class <* >? {
3232 return try {
3333 Class .forName(type.name, false , kryo.classLoader)
@@ -43,4 +43,28 @@ class WrappingObjectInputStream(iss : InputStream?, private val kryo: Kryo) : Ob
4343 }
4444 }
4545 }
46- }
46+
47+ // This overriding allows to ignore serialVersionUID during deserialization.
48+ // For more info, see https://stackoverflow.com/a/1816711
49+ override fun readClassDescriptor (): ObjectStreamClass {
50+ var resultClassDescriptor = super .readClassDescriptor() // initially streams descriptor
51+
52+ // the class in the local JVM that this descriptor represents.
53+ val localClass: Class <* > = try {
54+ Class .forName(resultClassDescriptor.name)
55+ } catch (e: ClassNotFoundException ) {
56+ return resultClassDescriptor
57+ }
58+
59+ val localClassDescriptor = ObjectStreamClass .lookup(localClass) ? : return resultClassDescriptor
60+
61+ // only if class implements serializable
62+ val localSUID = localClassDescriptor.serialVersionUID
63+ val streamSUID = resultClassDescriptor.serialVersionUID
64+ if (streamSUID != localSUID) { // check for serialVersionUID mismatch.
65+ resultClassDescriptor = localClassDescriptor // Use local class descriptor for deserialization
66+ }
67+
68+ return resultClassDescriptor
69+ }
70+ }
0 commit comments