apache / apache/fory

[Java] support copy non-serializable objects such as java.lang.Package

Open
#2,941 17 comments 0 reactions 0 assignees View on GitHub
bug good first issue
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.