这是我的情况:
我有一个服务器应用程序,提供一个远程接口,它使用bean对象作为调用参数/返回值。这些当然是Serializable。例如,医生,在外科手术中工作。
对于我的本地应用程序,我已经扩展了这些调用对象:例如,医生有一个额外的密码字段,因此医生的密码可以存储在本地。现在我的本地对象也是Serializable,我也用它来通过本地网络发送它们。
现在最简单的方法是在远程调用服务器时使用扩展实现的对象?服务器显然无法重建我的序列化实现,因为他不知道我的专业类。
我是否必须从扩展的bean对象手动创建一个未扩展的bean对象,基本上复制除了新的以外的所有字段?或者有更好/更简单的方法吗?覆盖序列化方法不是一种选择,因为如上所述,我仍然需要我的本地对象通常也可以序列化。
答案 0 :(得分:0)
服务器显然无法重建 我的序列化实现,因为 他不懂我的专业 类。
除非您的服务器可以通过类路径中的jar了解您的专业类,否则您将无法对其进行反序列化。
创建proxies可能是一个值得探索的角度,但不能保证这会起作用(关于您的具体情况的详细信息不足)。
更简单的解决方案是为bean使用根类,包含或扩展哈希映射并在其中存储属性/值。不是为每个属性创建getter和setter,而是只实现一对,并将属性名称作为字符串提供。
除非服务器不知道地图中的某个Serializable对象,否则服务器不会有任何问题要反序列化它。此方法允许您在其中添加任何额外的bean信息,服务器将始终知道如何处理它。
你可以尝试一个更棘手的角度。类Class本身是可序列化的。因此,如果您在转移bean之前转移它,可能是服务器可以先了解它。我自己从来没有试过这个,所以我不知道它是否会起作用。只是一个想法。