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]

Reply via email to