我有我的GWT项目,另一个项目只有简单的域对象,没有特定的GWT。
在我的Domain Objects项目中,我有一个类Bob,它有一些原始字段。没什么特别的。他为它实现了Serializable。
我想从GWT服务方法返回此类型。了解到服务方法只能返回实现GWT的IsSerializable接口的类,我创建了Bob的子类BobSO(Bob服务对象),并实现了IsSerializable。
基本项目结构
proj> Bob.java
proj_gwt
proj_gwt > projgwt.gwt.xml
proj_gwt.client
proj_gwt.server
proj_gwt.shared > BobSO.java
运行服务时出错。它似乎正在加载BobSO,并寻找超类Bob的源代码,并且无法找到源代码。 “[文件路径]中的错误 第6行:鲍勃没有源代码可以忘记继承所需的
答案 0 :(得分:2)
实现Serializable或IsSerializable,并确保该类满足GWT可序列化的remaining requirements(无参数构造函数,无最终字段,......)
您需要创建一个模块来帮助GWT-RPC找到可序列化的类 [*] 。
模块“gwt.xml”可以存在于您的域项目中。或者,如果您不想触摸域项目,它也可以存在于您的GWT项目中 - 只需确保将其放在正确的包中:
<强> DomainProject 强>
src
bar
domain
Bob.java
<强> GwtProject 强>
src
bar
Domain.gwt.xml (contains <src path='domain'/>)
foo
client
MyEntryPoint.java
shared
BobSO.java
Bar.gwt.xml (contains <src path='client'/>
<src path='shared'/>
<inherits name="foo.Domain"/>)
bar.domain.Bob
。<source path=""/>
[*]顺便说一句,令人惊讶的是,在GWT中通常甚至不需要为依赖项定义模块。 (但是当涉及到GWT-RPC时需要它。)如果你愿意,可以用一个简单的例子来尝试 - 只要它们在GWT编译器的类路径上,GWT就会自己找到源 -
答案 1 :(得分:1)
BobSO子类是否会因为实现IsSerializable而工作?
它应该可以工作,但请注意,IsSerializable是GWT的“旧”标记接口。您现在可以使用java.io.Serializable。
看起来GWT知道BobSO在哪里。我需要做什么才能知道Bob.java的来源在哪里?我已经尝试在我的DOmain Objects项目中创建一个gwt.xml,但我不确定它是否需要列出每个应该可见的类,以及如何在我的GWT项目中导入它。
我认为在您的域项目中创建GWT模块是正确的方法。您不必列出每个班级。 “source”元素的“path”属性应包含子包的名称:
<module>
<source path="mysubpackage" />
</module>
如果您有多个包,则可以拥有多个源元素。您还可以在包中包含/排除特定类,例如:
<source path="somepackage">
<include name="SomeClass.java" />
<include name="stuff/OtherClass.java" />
<exclude name="blah/**" />
</source>
要在原始GWT模块中导入它,只需添加一个“inherits”条目,其中包含您创建的.gwt.xml文件的完全限定名称,但不带“.gwt.xml”扩展名。假设您的新模块文件名为Domain.gwt.xml并位于“com.domainpackage”包中,您可以添加:
<inherits name="com.domainpackage.Domain" />
答案 2 :(得分:0)
您可以将项目打包为jar并将其添加到GWT项目的类路径中。