0

这是我的情况:

我有一个服务器应用程序,提供一个远程接口,它使用 bean 对象作为调用参数/返回值。这些当然是可序列化的。例如,在外科工作的医生。

对于我的本地应用程序,我扩展了这些调用对象:例如,医生有一个额外的密码字段,因此医生的密码可以存储在本地。现在我的本地对象也是可序列化的,我也使用它通过本地网络发送这些。

现在对我来说,在远程调用服务器时使用扩展实现的对象最简单的方法是什么?服务器显然无法重建我的序列化实现,因为他不知道我的专业类。

我是否必须通过基本上复制除新字段之外的所有字段来从我的扩展对象中手动创建一个未扩展的 bean 对象?还是有更好/更简单的方法来做到这一点?覆盖序列化方法不是一种选择,因为如上所述,我仍然需要我的本地对象也可以正常序列化。

4

1 回答 1

0

服务器显然无法重建我的序列化实现,因为他不知道我的专业类。

除非您的服务器可以通过类路径中的 jar 了解您的专用类,否则您将无法让它反序列化您的类。

创建代理可能是一个探索的角度,但不能保证这会奏效(关于您的具体情况的详细信息不足)。

一个更简单的解决方案是为您的 bean 使用根类,包含或扩展哈希映射并将属性/值存储在其中。不要为每个属性创建 getter 和 setter,只实现一对并将属性名称作为字符串提供。

除非服务器不知道地图中的 Serializable 对象之一,否则服务器不会有任何反序列化问题。此方法允许您在其中添加任何额外的 bean 信息,并且服务器将始终知道如何处理它。

您还可以尝试一个更棘手的角度。类 Class 本身是可序列化的。因此,如果您在传输 bean 之前传输了它,那么服务器可能会先了解它。我自己从未尝试过,所以我不知道它是否会起作用。只是一个想法。

于 2011-05-07T01:50:09.103 回答