java - GWT 序列化中的 FieldSerializer 编译错误

标签 java gwt serialization

我遇到了这个错误:

[DEBUG] [testgwt] - Rebinding org.stofkat.testgwt.client.GetTestsService
[INFO] [testgwt] - Module testgwt has been loaded
[ERROR] [testgwt] - Errors in 'generated://CB9089E742875E64C1F5E08E3E60A8B5        /org/stofkat/testgwt/shared/TestsWrapper_FieldSerializer.java'
[ERROR] [testgwt] - Line 9: The type TestsWrapper_FieldSerializer must implement the inherited abstract method TypeHandler.serial(SerializationStreamWriter, Object)
[ERROR] [testgwt] - Line 9: The type TestsWrapper_FieldSerializer must implement the inherited abstract method TypeHandler.deserial(SerializationStreamReader, Object)
[ERROR] [testgwt] - Line 36: Type mismatch: cannot convert from TestsWrapper to Object
[ERROR] [testgwt] - Line 40: Cannot cast from Object to TestsWrapper
[ERROR] [testgwt] - Line 44: Cannot cast from Object to TestsWrapper
[INFO] [testgwt] - See snapshot: C:\Users\Leejjon\AppData\Local\Temp\org.stofkat.testgwt.shared.TestsWrapper_FieldSerializer4210265464022362123.java

我已成功隔离两个 Java 项目中的问题 here (只需在 Eclipse 上将项目作为 GWT Web 应用程序运行,然后按页面上的按钮)。

我想做的是使用 libgdx 创建一个游戏,其中的关卡可以从 XML 文件加载到 POJO 中。然后我将 POJO 传递到引擎中,它将显示级别。我使用 SimpleXML 进行 XML 解析,因为该库可以在 Android 和桌面 Java 上运行。但是,我无法在游戏的 GWT (HTML5) 版本中使用它,因为 SimpleXML 框架使用 java.io 中的类。 (这是不允许的,因为 GWT 客户端上的 Java 代码被编译为 javascript,并且不允许简单地从文件系统上的任何文件读取内容)。因此,我现在将 XML 文件加载到 GWT 服务器上的 POJO 中,并尝试使用 RPC 将其传递给客户端。

POJO 类将位于桌面 (LWJGL)、Android 和 HTML5 (GWT) 版本使用的 Java 项目中,因此 POJO 类无法实现 IsSerialized,因为 GWT jar 不能位于该项目中。所以我按照格伦在this other stackoverflow topic中的回答并为每个POJO创建了一个包装类,它扩展了原始POJO并实现了IsSerialized。

请帮我验证这是否是 GWT 中的错误或者我做错了。

最佳答案

IsSerializable 不再是强制的。您使用的 stackoverflow 引用资料确实很旧。请通过https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC

与您相关的部分3。序列化 Java 对象

A type is serializable and can be used in a service interface if one of the following is true:

All primitive types (int, char, boolean, etc.) and their wrapper objects are serializable by default.
An array of serializable types is serializable by extension.
A class is serializable if it meets these three requirements:
It implements either Java Serializable or GWT IsSerializable interface, either directly, or because it derives from a superclass that does.
Its non-final, non-transient instance fields are themselves serializable, and
It has a default (zero argument) constructor with any access modifier (e.g. private Foo(){} will work)

您的解决方案可能偏离了轨道。该方法会消耗带宽和运行时性能。

关于java - GWT 序列化中的 FieldSerializer 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14429855/

相关文章:

Java 对象转 JSON : Ignore Cycle

java - Apache HttpClient 未显示响应的 Content-Length 和 Content-Encoding header

java - 无法理解如何在 Android 和 Java 中将整数转换为 IP

java - 如何在 Eclipse GWT 项目中分析服务器?

c# - 如何在没有模式信息的情况下将 c# 对象序列化为 xml?

json - 冷融合9 : Using serializeJson on Hibernate entity encodes numeric properties as strings

java - 当未指定索引之一时,多维数组如何分配内存

java - 如何将此功能调整为 FIFO 和 LRU?

java - 如何将 JPA 对象从 App Engine 发送到 GET?类型 'org.datanucleus.store.types.sco.simple.Date'

javascript - highcharts , 隐藏图表