【发布时间】:2013-09-27 11:55:27
【问题描述】:
我有一个运行良好的 GWT 应用程序。现在我正在尝试使用gwt-syncproxy 创建一个可以简单地重用服务器端代码的Android客户端。
到目前为止,一切都运行良好。我能找到的唯一问题是当我启动 RPC 到一个需要枚举作为参数的方法时。
枚举看起来像这样:
import java.io.Serializable;
import com.google.gwt.user.client.rpc.IsSerializable;
public enum ReferenceTable implements IsSerializable, Serializable
{
basetable, othertable;
ReferenceTable(){}
}
我得到的错误信息是:
com.google.gwt.user.client.rcp.IncompatibleRemoteServiceException: Invalid type signature for package.ReferenceTable
这表明这是与序列化有关的问题。
我尝试使用IsSerializable 和Serializable 的不同组合,并且总是在部署之前清理项目。 GWT 应用程序和 Android 应用程序都对用于通信的数据类型使用相同代码。
有人知道如何解决这个问题吗?如果没有其他方法,我可以避免使用枚举,但我更喜欢使用它们。特别是,因为 GWT 服务器-客户端通信本身一切正常。
顺便说一句:服务器端的错误是:
Caused by: com.google.gwt.user.client.rpc.SerializationException: Invalid type signature for some.package.ReferenceTable
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.validateTypeVersions(ServerSerializationStreamReader.java:1116)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:610)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readObject(ServerSerializationStreamReader.java:567)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:140)
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:425)
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:312)
... 24 more
编辑:
我创建了一个示例 GWT 应用程序和一个示例 Android 应用程序,因此人们可以实际尝试代码:
要部署应用程序,只需修改 build.properties 文件,然后将 build.xml 作为 ant 脚本运行。在Android应用的MainActivity中,修改URL指向GWT应用。
【问题讨论】:
-
您是否尝试向 ReferenceTable 类添加非参数构造函数?
-
@ElHoss 请再次查看代码。有一个非参数构造函数。
-
ups ...你是对的。你的类在你的源包里吗?
-
@ElHoss 是的,它在标记为源的
shared包中。
标签: java android gwt enums gwt-syncproxy