在GWT中既是Serializable又是IsSerializable

时间:2011-09-27 14:05:43

标签: java gwt

我在与GWT项目分开的项目中有一些DTO,并且我试图将它们用作GWT项目中的DTO。他们实施Serializable以用于其他服务。目前,因为我不希望在GWT RPC服务接口方法签名中全部引用它们,所以我必须采用“欺骗”GWT的技术,将序列化的类列入白名单,方法是使虚拟方法不执行任何操作,从不调用。< / p>

我不想在GWT项目中创建单独的IsSerializable类,以便不重复代码,但也不需要虚拟方法。

我想到的另一个选择是添加(a)GWT jar作为包含我的DTO的项目的依赖项,以便它们可以同时实现SerializableIsSerializable。搜索同时成为SerializableIsSerializable主题的讨论只会引发关于在两者之间进行选择的讨论。

一个类可以实现SerializableIsSerializable而不会出现并发症吗?

2 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的GWT?如果它是最近的(> 1.4)那么,据我所知,GWT documentation表示您可以直接使用Serializable个对象:

  GWT团队认为社区普遍意识到这些   问题但更喜欢能够使用标准的便利性   java.io.Serializable接口而不是拥有它们的类   实现isSerializable标记接口,虽然都是标记   GWT 1.4和。支持表示可序列化类的接口   后来。考虑到这一点,GWT团队对GWT RPC进行了更改   系统支持使用java.io.Serializable进行数据传输   将被转移的对象(通常称为DTO)   电线。但是,有一个条件可以支持   新GWT RPC系统中的java.io.Serializable。

答案 1 :(得分:0)

我尝试实现IsSerializableSerializable,因为我希望能够将我的DTO保存到Http会话中并通过群集复制它们。我也喜欢允许旧客户端(使用无效策略)能够使用IsSerializable提供的新服务(当然是具有相同签名的服务)的想法。但是当回退到1.3.3行为(没有有效的策略)并且在DTO中实现两个接口时,GWT变得疯狂(客户端反序列化器试图实例化一个名为String内容的类)。一旦我摆脱Serializable,GWT RPC系统就可以再次运行了。

编辑:奇怪的是,我在删除Serializable后再次尝试将其放回我的DTO中。它奏效了。我一直在开发模式下测试,也许是插件的错误?