Invalid lambda deserialization error after relocation of packages
Hi,
I'm having an issue with serializing & deserializing lambdas that were processed by asm: "Invalid lambda deserialization"
My environment:
I'm using java 8, version :
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
I'm using shadow plugin for gradle that uses asm for relocating packages and references in jars and/or class files.
I'm using the official version 0.8 from the link:
https://github.com/johnrengelman/shadow/tree/0.8
This version uses asm in version 3, but I overrode the asm dependency and set it to the freshest on Maven, which is 5.0.3:
org.ow2.asm:asm:5.0.3, org.ow2.asm:asm-commons:5.0
I created a sample project to easily reproduce the problem:
https://github.com/kzarzycki/asm-lambda-deserialization-error-test
When I run my test, I get an exception:
Exception in thread "main" java.io.IOException: unexpected exception type
at java.io.ObjectStreamClass.throwMiscException(ObjectStreamClass.java:1538)
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1110)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1810)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
at AsmTest.deserialize(AsmTest.java:36)
at AsmTest.main(AsmTest.java:21)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at java.lang.invoke.SerializedLambda.readResolve(SerializedLambda.java:230)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at java.io.ObjectStreamClass.invokeReadResolve(ObjectStreamClass.java:1104)
... 5 more
Caused by: java.lang.IllegalArgumentException: Invalid lambda deserialization
at AsmTest.$deserializeLambda$(AsmTest.java:11)
... 15 more
I'll be grateful for your help with this issue!