我遇到了这个错误:
[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类无法实现IsSerializable,因为GWT jar不能在项目。所以我在this other stackoverflow topic中跟随了Glenn的回答,并为每个扩展原始POJO并实现IsSerializable的POJO创建了一个包装类。
请帮我验证这是GWT中的错误还是我做错了。
答案 0 :(得分:1)
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)
您可能已经偏离了解决方案。该方法既可以节省带宽,也可以降低运行时性能。