[
https://issues.apache.org/jira/browse/THRIFT-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13057508#comment-13057508
]
ojciec pijo commented on THRIFT-1226:
-------------------------------------
I think there's no java serialization spec per se, but default mechanism always
keeps references if particular instance is saved to the same stream more than
once. it is mentioned here:
http://java.sun.com/developer/technicalArticles/Programming/serialization/
("Caching Objects in the Stream").
For a testcase, I have generated the same pair of objects with Thrift 5 and 6.
Test passes for Thrift5, fails for Thrift6:
[...]
@Test
public void testVersion5() throws Exception {
A5 a = new A5();
B5 b = new B5();
//add the same instance twice
b.addToItems(a);
b.addToItems(a);
B5 deserialized = (B5)serializeAndDeserialize(b);
//with java serialization
//we expect that references are preserved and [0] == [1]
assertSame(deserialized.getItems().get(0), deserialized.getItems().get(1));
}
@Test
public void testVersion6() throws Exception {
A6 a = new A6();
B6 b = new B6();
//add the same instance twice
b.addToItems(a);
b.addToItems(a);
B6 deserialized = (B6)serializeAndDeserialize(b);
//since Thrift6 overrides default java serialization by providing
readObject/writeObject,
//now it behaves in 'thrift' way - references are replaced by copies
//and this assertion FAILS!
assertSame(deserialized.getItems().get(0), deserialized.getItems().get(1));
}
> command line option to disable overriding java serialization
> ------------------------------------------------------------
>
> Key: THRIFT-1226
> URL: https://issues.apache.org/jira/browse/THRIFT-1226
> Project: Thrift
> Issue Type: Improvement
> Components: Java - Compiler
> Affects Versions: 0.6, 0.6.1
> Reporter: ojciec pijo
> Attachments: testcase.zip
>
>
> bugfix THRIFT-1038 is a breaking change since it overrides default java
> serialization mechanism. as a result, objects generated by Thrift v6 are not
> compatible with java serialization rules (references between objects are lost
> after deserialization). Please provide a command line parameter to disable
> generating readObject/writeObject as a workaround.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira