Closed GoogleCodeExporter closed 8 years ago
On test startup, do:
System.setProperty("protostuff.runtime.collection_schema_on_repeated_fields",
"true");
I've updated the wiki explaining why that is needed for cyclic collections.
http://code.google.com/p/protostuff/wiki/SerializingObjectGraphs (bottom part)
Original comment by david.yu...@gmail.com
on 20 Oct 2011 at 9:26
it still wrong.
modify source to this:
package com.alibaba.cat.bean;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import com.dyuproject.protostuff.GraphIOUtil;
import com.dyuproject.protostuff.LinkedBuffer;
import com.dyuproject.protostuff.Schema;
import com.dyuproject.protostuff.runtime.RuntimeSchema;
public class LinkedListBeanTest {
public static void main(String[] args) {
System.setProperty("protostuff.runtime.collection_schema_on_repeated_fields", "true");
LinkedListBean bean = new LinkedListBean();
bean.aname = "test";
Item share = new Item("share");
LinkedList<Item> linkedList = new LinkedList<Item>();
linkedList.add(share);
linkedList.add(new Item("aaaa"));
bean.linkedList = linkedList;
List<Item> list = new ArrayList<Item>();
list.add(share);
list.add(new Item("bbbb"));
bean.list = list;
Schema<LinkedListBean> schema = RuntimeSchema.getSchema(LinkedListBean.class);
byte[] bytes = GraphIOUtil.toByteArray(bean, schema, LinkedBuffer.allocate(256));
LinkedListBean deBean = new LinkedListBean();
GraphIOUtil.mergeFrom(bytes, deBean, schema);
System.out.println("linkedList:" + deBean.linkedList);
//linkedList:[[name:share, name:bbbb], name:aaaa]
System.out.println("list:" + deBean.list);
//list:[name:share, name:bbbb]
}
}
class LinkedListBean {
public List list;
public LinkedList linkedList;
public String aname;
}
class Item {
public String name;
public Item(String name){
this.name = name;
}
public String toString() {
return "name:" + name;
}
}
thanks, help!
Original comment by without...@hotmail.com
on 20 Oct 2011 at 11:00
It looks like you've found a bug. I've a fix w/c I'll commit in a little bit.
If you try to change the declaration from:
public List list;
public LinkedList linkedList;
to:
public List<Item> list;
public LinkedList<Item> linkedList;
It will work. But without the generics, it will fail.
With the fix, both scenarios will work.
Original comment by david.yu...@gmail.com
on 20 Oct 2011 at 3:37
thanks
Original comment by without...@hotmail.com
on 21 Oct 2011 at 4:28
I've committed the fix. Can you try it out and report back if you still have
problems?
I still have one remaining issue to fix regarding EnumMaps on graph io.
Collections without generics will be serialized differently (larger size
because of type metadata) compared to having them.
E.g on production systems, you cannot just refactor to add/remove generics if
you want to keep compatibility on the wire.
I'll be adding more detailed docs regarding refactoring/schema evolution on
dynamic types.
Original comment by david.yu...@gmail.com
on 21 Oct 2011 at 5:47
completed @ rev 1393-1395
Original comment by david.yu...@gmail.com
on 22 Oct 2011 at 6:58
Original issue reported on code.google.com by
without...@hotmail.com
on 20 Oct 2011 at 4:40Attachments: