[Java] support copy non-serializable objects such as java.lang.Package
- Dominant language
- Java
- Stars
- 4.5k
- Forks
- 443
- Avg merge
- 5h 59m
- Merged PRs (30d)
- 77
Description
### Search before asking
- [x] I had searched in the [issues](https://github.com/apache/fory/issues) and found no similar issues.
### Version
I'm facing an issue copying Hibernate objects using `fory.copy(object)` whereas `fory.deserialize(fory.serialize(object))` works fine for the same object.
`java.lang.RuntimeException: Create sequential serializer failed,
class: class org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader
java.lang.UnsupportedOperationException: Class class java.lang.Package doesn't support serialization.
at org.apache.fory.resolver.ClassResolver.getSerializerClass(ClassResolver.java:920)
at org.apache.fory.resolver.ClassResolver.getSerializerClass(ClassResolver.java:854)
at org.apache.fory.builder.BaseObjectCodecBuilder.lambda$getOrCreateSerializer$8(BaseObjectCodecBuilder.java:607)
at org.apache.fory.builder.BaseObjectCodecBuilder.lambda$typeResolver$2(BaseObjectCodecBuilder.java:247)
at org.apache.fory.builder.JITContext.asyncVisitFory(JITContext.java:159)
at org.apache.fory.builder.BaseObjectCodecBuilder.typeResolver(BaseObjectCodecBuilder.java:247)
at org.apache.fory.builder.BaseObjectCodecBuilder.typeResolver(BaseObjectCodecBuilder.java:243)
at org.apache.fory.builder.BaseObjectCodecBuilder.getOrCreateSerializer(BaseObjectCodecBuilder.java:607)
at org.apache.fory.builder.BaseObjectCodecBuilder.readOrGetSerializerForDeclaredType(BaseObjectCodecBuilder.java:2164)
at org.apache.fory.builder.BaseObjectCodecBuilder.readChunk(BaseObjectCodecBuilder.java:2056)
at org.apache.fory.builder.BaseObjectCodecBuilder.lambda$deserializeForMap$47e820f7$1(BaseObjectCodecBuilder.java:1995)
at org.apache.fory.codegen.Expression$While.(Expression.java:2209)
at org.apache.fory.builder.BaseObjectCodecBuilder.deserializeForMap(BaseObjectCodecBuilder.java:1967)
at org.apache.fory.builder.BaseObjectCodecBuilder.deserializeForNotNull(BaseObjectCodecBuilder.java:1662)
at org.apache.fory.builder.BaseObjectCodecBuilder.deserializeForNotNull(BaseObjectCodecBuilder.java:1621)
at org.apache.fory.builder.BaseObjectCodecBuilder.lambda$deserializeForNullable$26(BaseObjectCodecBuilder.java:1552)
at org.apache.fory.builder.BaseObjectCodecBuilder.readRef(BaseObjectCodecBuilder.java:1572)
at org.apache.fory.builder.BaseObjectCodecBuilder.deserializeForNullable(BaseObjectCodecBuilder.java:1552)
at org.apache.fory.builder.ObjectCodecBuilder.lambda$deserializeGroup$135afeca$1(ObjectCodecBuilder.java:560)
at org.apache.fory.codegen.ExpressionOptimizer.invokeGenerated(ExpressionOptimizer.java:49)
at org.apache.fory.builder.ObjectCodecOptimizer.invokeGenerated(ObjectCodecOptimizer.java:138)
at org.apache.fory.builder.ObjectCodecBuilder.deserializeGroup(ObjectCodecBuilder.java:577)
at org.apache.fory.builder.ObjectCodecBuilder.buildDecodeExpression(ObjectCodecBuilder.java:465)
at org.apache.fory.builder.BaseObjectCodecBuilder.genCode(BaseObjectCodecBuilder.java:264)
at org.apache.fory.codegen.CompileUnit.getCode(CompileUnit.java:53)
at org.apache.fory.codegen.JaninoUtils.toBytecode(JaninoUtils.java:81)
at org.apache.fory.codegen.JaninoUtils.toBytecode(JaninoUtils.java:73)
at org.apache.fory.codegen.CodeGenerator.compile(CodeGenerator.java:145)
at org.apache.fory.builder.CodecUtils.loadOrGenCodecClass(CodecUtils.java:113)
at org.apache.fory.builder.CodecUtils.lambda$loadOrGenObjectCodecClass$0(CodecUtils.java:53)
at org.apache.fory.builder.CodecUtils.loadSerializer(CodecUtils.java:164)
... 172 common frames omitted
Wrapped by: java.lang.RuntimeException: java.lang.UnsupportedOperationException: Class class java.lang.Package doesn't support serialization.
at org.apache.fory.builder.CodecUtils.loadSerializer(CodecUtils.java:170)
at org.apache.fory.builder.CodecUtils.loadOrGenObjectCodecClass(CodecUtils.java:50)
at org.apache.fory.serializer.CodegenSerializer.loadCodegenSerializer(CodegenSerializer.java:49)
... 170 common frames omitted
Wrapped by: java.lang.RuntimeException: Create sequential serializer failed,
class: class org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader
at org.apache.fory.serializer.CodegenSerializer.loadCodegenSerializer(CodegenSerializer.java:52)
at org.apache.fory.resolver.ClassResolver.lambda$getObjectSerializerClass$3(ClassResolver.java:1024)
at org.apache.fory.builder.JITContext.registerSerializerJITCallback(JITContext.java:121)
at org.apache.fory.resolver.ClassResolver.getObjectSerializerClass(ClassResolver.java:1022)
at org.apache.fory.resolver.ClassResolver.getSerializerClass(ClassResolver.java:976)
at org.apache.fory.resolver.ClassResolver.getSerializerClass(ClassResolver.java:854)
at org.apache.fory.resolver.ClassResolver.createSerializer(ClassResolver.java:1260)
at org.apache.fory.resolver.ClassResolver.getOrUpdateClassInfo(ClassResolver.java:1182)
at org.apache.fory.Fory.copyObject(Fory.java:1393)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.serializer.collection.CollectionSerializers$DefaultJavaCollectionSerializer.copy(CollectionSerializers.java:734)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.serializer.AbstractObjectSerializer.copyFields(AbstractObjectSerializer.java:788)
at org.apache.fory.serializer.AbstractObjectSerializer.copy(AbstractObjectSerializer.java:702)
at org.apache.fory.Fory.copyObject(Fory.java:1488)
at org.apache.fory.Fory.copyObject(Fory.java:1448)
at org.apache.fory.Fory.copy(Fory.java:1372)
... 135 common frames omitted
Wrapped by: org.apache.fory.exception.CopyException: java.lang.RuntimeException: Create sequential serializer failed,
class: class org.hibernate.boot.registry.classloading.internal.AggregatedClassLoader
at org.apache.fory.Fory.processCopyError(Fory.java:373)
`
### Component(s)
Java
### Minimal reproduce step
Trying to just copy the object fails.
### What did you expect to see?
A successful deepCopy of the object.
### What did you see instead?
The given exception.
### Anything Else?
_No response_
### Are you willing to submit a PR?
- [ ] I'm willing to submit a PR!
Contributor guide
Assessment
This issue has not been assessed yet.