Can';t从GWT服务返回自定义类
我有我的GWT项目,另一个项目只有简单的域对象,没有GWT特定的内容 在我的域对象项目中,我有一个类Bob,它有一些基本字段。没什么特别的。他实现了Serializable 我想从GWT服务方法返回这种类型。了解到服务方法只能返回实现GWT的IsSerializable接口的类,我创建了Bob的子类BobSO(Bob服务对象),并让它实现IsSerializable 基本项目结构Can';t从GWT服务返回自定义类,gwt,Gwt,我有我的GWT项目,另一个项目只有简单的域对象,没有GWT特定的内容 在我的域对象项目中,我有一个类Bob,它有一些基本字段。没什么特别的。他实现了Serializable 我想从GWT服务方法返回这种类型。了解到服务方法只能返回实现GWT的IsSerializable接口的类,我创建了Bob的子类BobSO(Bob服务对象),并让它实现IsSerializable 基本项目结构 proj> Bob.java proj_gwt proj_gwt > projgwt.gwt.xml
proj> Bob.java
proj_gwt
proj_gwt > projgwt.gwt.xml
proj_gwt.client
proj_gwt.server
proj_gwt.shared > BobSO.java
我在运行服务时出错。它似乎正在加载BobSO,并为超类Bob查找源代码,但找不到源代码。
“文件路径中的错误”
第6行:Bob没有可用的源代码。您是否忘记继承必需的
您可以将项目打包为jar,并将其添加到GWT项目的类路径中 BobSO的子类会工作吗,因为他实现了IsSerializable 它应该可以工作,但请注意IsSerializable是GWT的“旧”标记接口 看起来GWT知道BobSO在哪里。我需要做什么才能让它知道Bob.java的源代码在哪里?我已经尝试在我的域对象项目中创建一个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" />
1.可串行化
实现Serializable或IsSerializable,并确保该类满足GWT序列化的要求(无参数构造函数,无最终字段,…)
2.确定来源
您需要创建一个模块来帮助GWT-RPC查找可序列化类[*]
模块“gwt.xml”可以存在于您的域项目中。或者,如果您不想接触域项目,它也可以存在于您的gwt项目中-请确保将其放入正确的包中:
域项目
src
bar
domain
Bob.java
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"/>)
GWT项目
src
bar
domain
Bob.java
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"/>)
src
酒吧
Domain.gwt.xml(包含)
福
客户
MyEntryPoint.java
共享
BobSO.java
Bar.gwt.xml(包含
)
重要注意事项
- 确保在更改这些依赖项后删除gwt unitCache文件夹。否则,编译器通常会以奇怪的方式失败(使用gwt 2.5.0.rc2测试)
- 始终向GWT编译器提供源文件夹,以了解客户端需要了解的所有信息。在本例中,这也是
的源文件夹bar.domain.Bob
- 还可以将Domain.gwt.xml放入“bar/Domain”包中,并使用