3

我们目前使用 XStream 将我们的 Web 服务输入/输出编码为 XML。但是,我们正在考虑切换到具有多种语言(protobuf、Thrift、Hessian 等)的代码生成器的二进制格式,以便更轻松地支持新客户,减少对手动编码的依赖(也更好地支持我们的包含二进制数据的消息格式) .

然而,我们在服务器上的大多数对象都是 POJO,使用 XStream 通过反射和注释处理序列化,并且这些库中的大多数假设它们将自己生成 POJO。我可以想到几种连接替代库的方法:

  1. 为目标格式编写一个 XStream 封送拆收器。

  2. 编写自定义代码以将 POJO 编组到/来自替代库生成的类。

  3. 子类化生成的类以实现 POJO 逻辑。可能需要一些重写。(我还提到我们想使用 Terracotta 吗?)

  4. 使用另一个同时支持反射(如 XStream)和代码生成的库。

但是我不确定哪个序列化库最适合上述技术。

4

1 回答 1

1

(1) 可能工作量不大因为许多序列化库都包含一个帮助 API,该 API 知道如何读取/写入原始值和分隔符。

(2) 可能为您提供最广泛的工具选择:https ://github.com/eishay/jvm-serializers/wiki/ToolBehavior (有些是语言中立的)。有缺陷但希望不是完全无用的基准:https ://github.com/eishay/jvm-serializers/wiki

其中许多工具会生成类,这需要编写代码来转换为您的 POJO 或从您的 POJO 转换。直接使用 POJO 的工具通常不是语言中立的。

(3) 似乎是个坏主意(对您的特定项目一无所知)。我通常保持我的消息类没有任何其他逻辑。

(4) Protostuff 库(支持 Protocol Buffer 格式)允许您编写“模式”来描述您希望如何序列化 POJO。但是,编写此模式可能最终比仅编写代码在 POJO 和某些工具生成的类之间转换的工作量更大且更容易出错。

Protostuff 还可以通过反射自动生成模式,但这可能会产生一种感觉有点以 Java 为中心的消息格式。

于 2011-04-03T20:23:31.880 回答