2012-02-20 69 views
1

我需要在GWT中序列化未知类型的对象(只有JDBC类型)。我有一个持有不知名的“jdbc”对象列表的对象,我需要它从客户端传输到服务器并返回。如果这个对象序列化为不在gwt客户端环境中,我可以在Object列表中保存这些未知对象。但GWT不能序列化Object类型的对象。我怎样才能做到这一点?任何建议序列化GWT中的JDBC类型

+0

他们都是实际上GWT序列化?这些课程是由你创建的吗? – Strelok 2012-02-21 05:52:20

+0

我创建的类是可序列化的,并且JDBC类型(代表数据库类型的Java类型)也是可序列化的(请参阅http://db.apache.org/ojb/docu/guides/jdbc-types.html),可能除外Blob和Clob,但我不与他们合作 – maks 2012-02-21 09:56:33

回答

0

请参阅GWT JRE Emulation Reference,没有Object类和GWT无法序列化它,所以你应该创建自己的传输对象,它实现了标记接口IsSerializable。 简而言之,RPC无法序列化java.lang.Object。检查此链接: GWT Sending type OBJECT Via RPC和良好的线程在这里: Serialize objectWhy is GWT serialization so complicated?

+0

我知道Object类不是由GWT序列化的。这是我的问题的一个目标,以了解如何序列化具有共同超类型的未知对象作为对象 – maks 2012-02-21 09:53:02

+0

否GWT-RPC无法序列化java.lang.Object,除此之外,映射也不能被序列化 – 2012-02-21 10:19:13

4

您可能遇到了问题,如果不被任何您的其他RPC方法返回的JDBC类型。

例如,如果您的Foo类不是通过RPC以除了返回List [Object]之外的任何方法发送的,那么GWT在编译时(在它生成RPC白名单时)并不知道Foo是一个它应该生成序列化代码的类。这对生成的JavaScript特别有用,其中避免来自未使用类型的代码膨胀非常重要。

您可以通过在通过RPC发送的虚拟类中手动添加否则未引用的类(JDBC中所有可能的返回类型)来解决此问题。 How do I add a type to GWT's Serialization Policy whitelist?

或者,您可以编写一个自定义的RemoteService生成器来使用,它可以添加不需要Dummy类的类型。 http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html#generator

+0

即使我编写了这样的Dummy类,我可以使用'List serviceMethod()'返回这个列表中的类型吗? – maks 2012-02-21 18:28:47

2

您可以返回他们作为

List<Serializable> serviceMethod(); 

如果你保证,他们都是Serializable接口。在从服务方法返回之前,将它们全部转换为Serializable。