chaokunyang commented on issue #1854:
URL: https://github.com/apache/fury/issues/1854#issuecomment-2375437501
Hi @theigl , I used JDK serialization to serialize your object, it throw
ClassCastException too:
```java
java.lang.RuntimeException: java.lang.ClassCastException: cannot assign
instance of org.apache.fury.serializer.$Proxy6 to field
java.lang.reflect.Proxy.h of type java.lang.reflect.InvocationHandler in
instance of org.apache.fury.serializer.$Proxy6
at org.apache.fury.FuryTestBase.jdkDeserialize(FuryTestBase.java:339)
at
org.apache.fury.serializer.JdkProxySerializerTest.serializeProxy(JdkProxySerializerTest.java:142)
at
java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at
org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:136)
at
org.testng.internal.invokers.TestInvoker.invokeMethod(TestInvoker.java:658)
at
org.testng.internal.invokers.TestInvoker.invokeTestMethod(TestInvoker.java:219)
at
org.testng.internal.invokers.MethodRunner.runInSequence(MethodRunner.java:50)
at
org.testng.internal.invokers.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:923)
at
org.testng.internal.invokers.TestInvoker.invokeTestMethods(TestInvoker.java:192)
at
org.testng.internal.invokers.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at
org.testng.internal.invokers.TestMethodWorker.run(TestMethodWorker.java:128)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1597)
at org.testng.TestRunner.privateRun(TestRunner.java:808)
at org.testng.TestRunner.run(TestRunner.java:603)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:429)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:423)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:383)
at org.testng.SuiteRunner.run(SuiteRunner.java:326)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:95)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1249)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
at org.testng.TestNG.runSuites(TestNG.java:1092)
at org.testng.TestNG.run(TestNG.java:1060)
at com.intellij.rt.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:66)
at
com.intellij.rt.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:105)
Caused by: java.lang.ClassCastException: cannot assign instance of
org.apache.fury.serializer.$Proxy6 to field java.lang.reflect.Proxy.h of type
java.lang.reflect.InvocationHandler in instance of
org.apache.fury.serializer.$Proxy6
at
java.base/java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2102)
at
java.base/java.io.ObjectStreamClass$FieldReflector.checkObjectFieldValueTypes(ObjectStreamClass.java:2066)
at
java.base/java.io.ObjectStreamClass.checkObjFieldValueTypes(ObjectStreamClass.java:1355)
at
java.base/java.io.ObjectInputStream$FieldValues.defaultCheckFieldValues(ObjectInputStream.java:2682)
at
java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2483)
at
java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2269)
at
java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1747)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:525)
at
java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:483)
at org.apache.fury.FuryTestBase.jdkDeserialize(FuryTestBase.java:337)
... 26 more
```
Here is my code for JDK serialization invocation:
```java
public static byte[] jdkSerialize(Object o) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (ObjectOutputStream objectOutputStream = new
ObjectOutputStream(bos)) {
objectOutputStream.writeObject(o);
objectOutputStream.flush();
return bos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static Object jdkDeserialize(byte[] data) {
try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
ObjectInputStream objectInputStream =
new
ClassLoaderObjectInputStream(Thread.currentThread().getContextClassLoader(),
bis)) {
return objectInputStream.readObject();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
```
Seems `ProxyFactory.JdkProxyFactory.ProxyReplacement#readResolve` should
return `JdkHandler` instead of `Proxy` instance.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]