【问题标题】:Why can't GWT deserialize the native datastore key any more?为什么 GWT 不能再反序列化本机数据存储密钥?
【发布时间】:2013-01-24 11:07:50
【问题描述】:

我在升级所有库后才开始遇到这个问题:

我使用的是 GWT 2.4、App Engine 1.6.3 和 Objectify 3.0。

我升级到 GWT 2.5、App Engine 1.7.4 和 Objectify 4.0b1。

从那以后,我收到了only 1 other person 似乎在整个互联网上都有的这个奇怪错误!

堆栈跟踪:

Caused by: com.google.gwt.user.client.rpc.SerializationException: com.google.appengine.api.datastore.Key/1349195865
    at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.instantiate(SerializerBase.java:114)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:396)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.googlecode.objectify.Key_FieldSerializer.deserialize(Key_FieldSerializer.java:11)
    at com.googlecode.objectify.Key_FieldSerializer.deserial(Key_FieldSerializer.java:29)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:398)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.deserialize(Collection_CustomFieldSerializerBase.java:34)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.deserialize(ArrayList_CustomFieldSerializer.java:34)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_FieldSerializer.deserial(ArrayList_FieldSerializer.java:19)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:398)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.utilitiessavings.testapp2.shared.Account_FieldSerializer.deserialize(Account_FieldSerializer.java:29)
    at com.utilitiessavings.testapp2.shared.Account_FieldSerializer.deserial(Account_FieldSerializer.java:51)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:398)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.google.gwt.user.client.rpc.core.java.util.Collection_CustomFieldSerializerBase.deserialize(Collection_CustomFieldSerializerBase.java:34)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_CustomFieldSerializer.deserialize(ArrayList_CustomFieldSerializer.java:34)
    at com.google.gwt.user.client.rpc.core.java.util.ArrayList_FieldSerializer.deserial(ArrayList_FieldSerializer.java:19)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:398)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.utilitiessavings.testapp2.client.action.GetAccountsResult_FieldSerializer.deserialize(GetAccountsResult_FieldSerializer.java:20)
    at com.utilitiessavings.testapp2.client.action.GetAccountsResult_FieldSerializer.deserial(GetAccountsResult_FieldSerializer.java:38)
    at com.google.gwt.user.client.rpc.impl.SerializerBase.deserialize(SerializerBase.java:95)
    at com.google.gwt.user.client.rpc.impl.ClientSerializationStreamReader.deserialize(ClientSerializationStreamReader.java:398)
    at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119)
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter$ResponseReader$8.read(RequestCallbackAdapter.java:106)
    at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:214)
    ... 27 more

反序列化 Account 时会出现问题,因为它包含一个 Objectify Key,它包装了本机 datastore key

序列化工作正常,我的对象图在数据存储区中一切正常,但我无法取回任何包含密钥的东西,这几乎是所有有用的东西。

任何指针表示赞赏。

【问题讨论】:

  • 清理项目并确保没有遗留缓存或旧生成文件。重新启动,重新启动并重试。有时它只是缓存的值。
  • 已尝试删除 gwt-unitCache 文件夹中的所有内容,并进行清理。似乎没有任何效果。序列化策略可能吗?

标签: google-app-engine gwt deserialization objectify gwt-2.5


【解决方案1】:

我也遇到过同样的问题,它似乎与数据存储无关,因为当我将对象发送到服务器并尝试取回它时,我仍然遇到反序列化错误。

AsyncCallService{

void createUser(User user, AsyncCallback<User> user);
}

ServiceImpl{

User createUser(User user){

DB.save(user);

return user

}

这仍然会导致客户端出现序列化错误或反序列化错误。

我所做的只是传回一个新用户;

User createUser(User user){
DB.save(user);
User newUser = new User();

newUser.setId(user.getId())

return newUser;

}

问题已解决,只是现在我失去了不需要反序列化的旧应用引擎堆栈的一些“好处”。

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多