Moouna opened a new issue, #1893:
URL: https://github.com/apache/fury/issues/1893
### Question
### Problem with Fury Serialization/Deserialization for Nested Classes
I’m using **Fury** for serializing and deserializing two different classes
(`Source` and `Target`) that have similar structures but different inner
classes (`SourceInner` and `TargetInner`). Serialization works when handling a
list (`innerList`), but it fails when serializing a single field (`inner`),
throwing a `ClassCastException`.
### Classes:
```java
@Data
public class Source {
private SourceInner inner;
private List<SourceInner> innerList;
}
public class SourceInner {
}
@Data
public class Target {
private TargetInner inner;
private List<TargetInner> innerList;
}
public class TargetInner {
}
```
### Test Case 1: Success
Serialization and deserialization works fine when using the `innerList`
field (a list of `SourceInner`):
```java
@Test
public void testFurySuccess() {
Source source = new Source();
source.setInnerList(new ArrayList<>());
source.getInnerList().add(new SourceInner());
Fury fury = Fury.builder()
.withLanguage(Language.JAVA)
.requireClassRegistration(false)
.withClassVersionCheck(false)
.withCodegen(true)
.withJdkClassSerializableCheck(false)
.build();
byte[] bytes = fury.serializeJavaObject(source);
Target target = fury.deserializeJavaObject(bytes, Target.class);
System.out.println(target); // Success
}
```
### Test Case 2: Failure
However, when trying to serialize the `inner` field (a single instance of
`SourceInner`), it fails with a `ClassCastException`:
```java
@Test
public void testFuryFailed() {
Source source = new Source();
source.setInner(new SourceInner());
Fury fury = Fury.builder()
.withLanguage(Language.JAVA)
.requireClassRegistration(false)
.withClassVersionCheck(false)
.withCodegen(true)
.withJdkClassSerializableCheck(false)
.build();
byte[] bytes = fury.serializeJavaObject(source);
Target target = fury.deserializeJavaObject(bytes, Target.class); //
Fails
System.out.println(target);
}
```
### Error:
```
java.lang.ClassCastException: SourceInner cannot be cast to TargetInner
at
org.apache.fury.format.dto.TargetFuryCodec_0.read(TargetFuryCodec_0.java:242)
at org.apache.fury.Fury.readDataInternal(Fury.java:958)
at org.apache.fury.Fury.deserializeJavaObject(Fury.java:1117)
...
```
### Question:
How can I make Fury correctly deserialize `SourceInner` to `TargetInner`
without a `ClassCastException`? Is there a way to map `SourceInner` to
`TargetInner` automatically, or do I need to implement custom logic?
Thanks in advance for any suggestions!
--
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: commits-unsubscr...@fury.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@fury.apache.org
For additional commands, e-mail: commits-h...@fury.apache.org