GoogleのAutoBeanのシリアル化とデシリアライズに問題があります。 私はプリミティブ型とマップも含むAutoBeanを持っています。私はシリアライズすることができますし、問題のないプリミティブ型をdeserialize、私はdeserialized Mapを読み込もうとすると、私はNullPointerExceptionを取得します。 以前にも同様の問題を経験したことがありますか?私の問題を表すJUnitテストがあります。最初の2つのアサートはパスですが、3番目のアサートは失敗します。HashMapでGWTのAutoBeanデシリアライズを使用するとNullPointerExceptionが発生する
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'は機能には、マップの多くをチェックアウト...
はちょうど
Map<String, String>
の代わりに、Double
またはBoolean
使用し、回避策はあり、それが動作しますencode/decodeを渡す/取得する - 私の推測では、すでに不正確な値をエンコード/デコードした後に、倍精度文字をキーとして使用して何かがうねっていると思われるでしょう。まだあなたのテストを実行しようとしていない。 –