【问题标题】:NullPointerException when using GWT's AutoBean deserialization with HashMap使用带有 HashMap 的 GWT 的 AutoBean 反序列化时出现 NullPointerException
【发布时间】:2012-02-11 12:50:36
【问题描述】:

我对 Google 的 AutoBean 序列化和反序列化有一些问题。 我有一个包含原始类型和地图的 AutoBean。我可以毫无问题地序列化和反序列化原始类型,但是当我尝试读取反序列化的 Map 时,我得到 NullPointerException。 你以前遇到过类似的问题吗?有一个代表我的问题的 JUnit 测试。前两个断言通过,但第三个失败。

public class AutoBeanTest {

    @Test
    public void test() throws Exception {
        MyFactory myFactory = AutoBeanFactorySource.create(MyFactory.class);

        Options options = myFactory.options().as();
        options.setMyInt(5);
        HashMap<Double, Boolean> map = newHashMap();
        map.put(8.0, true);
        map.put(9.1, false);

        options.setMyMap(map);

        Options deserialized = AutoBeanCodex.decode(myFactory, Options.class, AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(options)).getPayload()).as();
        assertEquals(deserialized.getMyInt(),5);
        assertTrue(options.getMyMap().containsKey(8d));
        assertTrue(deserialized.getMyMap().containsKey(8d));
    }

    public interface MyFactory extends AutoBeanFactory {
        AutoBean<Options> options();
    }

    public interface Options {

        public int getMyInt();

        void setMyInt(int myInt);

        Map<Double, Boolean> getMyMap();

        void setMyMap(Map<Double, Boolean> myMap);
    }
}

【问题讨论】:

  • com.google.web.bindery.autobean.shared.AutoBeanCodexTest 检查了很多地图功能,包括 put/get 跨编码/解码 - 我的猜测是,在编码/解码已经不精确的值之后,使用双精度作为键有些不妥。不过还没有尝试运行您的测试。

标签: gwt serialization hashmap nullpointerexception autobean


【解决方案1】:

不久前我一直在玩弄 AutoBean 功能。我认为它仍然是一辆越野车。我很确定异常是由 AutoBean 代码中的错误引起的,而不是在您的代码中。

如果您在调试器中运行上述示例代码并检查生成的 JSON,则一切正常。您甚至可以调用deserialized.getMyMap().size() 并获得正确的值,但是一旦您要访问内容就会发生错误。

有一个解决方法,只需使用Map&lt;String, String&gt; 而不是DoubleBoolean 就可以了...

【讨论】:

    【解决方案2】:

    Ackchyually... Autobeans 以in JSON only strings are allowed as keys 的方式正确执行此操作。但当然错误信息应该更有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多