0

当我尝试向反序列化的 Map 实例插入新条目时,我没有得到任何异常,但 Map 没有被修改。这个入口点代码探测它。我做错了什么?

public class Test2 implements EntryPoint {

public interface SomeProxy {
    Map<String, List<Integer>> getStringKeyMap();
    void setStringKeyMap(Map<String, List<Integer>> value);
}

public interface BeanFactory extends AutoBeanFactory {
    BeanFactory INSTANCE = GWT.create(BeanFactory.class);

    AutoBean<SomeProxy> someProxy();
}

@Override
public void onModuleLoad() {
    SomeProxy proxy = BeanFactory.INSTANCE.someProxy().as();

    proxy.setStringKeyMap(new HashMap<String, List<Integer>>());
    proxy.getStringKeyMap().put("k1", new ArrayList<Integer>());
    proxy.getStringKeyMap().put("k2", new ArrayList<Integer>());

    String payload = AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(proxy)).toString();
    proxy = AutoBeanCodex.decode(BeanFactory.INSTANCE, SomeProxy.class, payload).as();

    // insert a new entry into a deserialized map
    proxy.getStringKeyMap().put("k3", new ArrayList<Integer>());

    System.out.println(proxy.getStringKeyMap().keySet()); // the keySet is [k1, k2] :-( ¿where is k3? 
}

}

4

2 回答 2

0

诸如 java.util.Set 和 java.util.List 之类的集合类很棘手,因为它们是根据 Object 实例进行操作的。要使集合可序列化,您应该通过普通类型参数指定它们期望包含的特定对象类型(例如,Map<Foo,Bar>而不仅仅是Map)。如果您使用原始集合或地图,您将获得臃肿的代码并容易受到拒绝服务攻击。

字体: http: //www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes

于 2014-04-29T12:51:19.097 回答
0

不应该 AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(proxy)) .toString(); 成为getPayLoad()

稍后我会检查代码,我不知道这是否导致了问题。但它确实与我的典型方法不同。

于 2012-06-03T17:05:23.023 回答