【问题标题】:Serializing JDBC Types in GWT在 GWT 中序列化 JDBC 类型
【发布时间】:2012-03-11 06:33:33
【问题描述】:

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

【问题讨论】:

  • 它们实际上都是 GWT 可序列化的吗?这些课程是您创建的吗?
  • 我创建的类是可序列化的,而且 JDBC 类型(代表数据库类型的 java 类型)也是可序列化的(参见db.apache.org/ojb/docu/guides/jdbc-types.html),可能除了 Blob 和 Clob,但我不使用他们

标签: gwt jdbc


【解决方案1】:

如果您的任何其他 RPC 方法没有返回这些 jdbc 类型,您可能会遇到问题。

例如,如果您的类 Foo 不是通过返回 List[Object] 的方法以外的任何方法通过 RPC 发送的,那么 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

【讨论】:

  • 即使我写了这样的 Dummy 类,我可以使用List<Object> serviceMethod() 来返回这个列表中的类型吗?
【解决方案2】:

您可以将它们返回为

List<Serializable> serviceMethod();

如果你保证它们都是可序列化的。在从服务方法返回之前,只需将它们全部转换为 Serializable 即可。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我知道 Object 类没有被 GWT 序列化。这是我的问题的一个目标,即了解如何序列化具有共同超类型为 Object 的 uknown 对象
    • No GWT-RPC不能序列化java.lang.Object,除了List,Map也不能序列化
    猜你喜欢
    • 1970-01-01
    • 2016-08-30
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多