3

В настоящее время мы используем XStream для кодирования входов/выходов наших веб-сервисов в XML. Однако мы рассматриваем возможность перехода на двоичный формат с генератором кода для нескольких языков (protobuf, Thrift, Hessian и т. Д.), Чтобы упростить и облегчить поддержку новых клиентов в ручном кодировании (также для лучшей поддержки форматов сообщений, которые включают двоичные данные) ,XStream <-> Альтернативные двоичные форматы (например, буферы протокола)

Однако большинство наших объектов на сервере являются POJO с XStream, обрабатывающие сериализацию посредством отражения и аннотаций, и большинство из этих библиотек предполагают, что они будут генерировать сами POJO. Я могу придумать несколько способов взаимодействия с альтернативной библиотекой:

  1. Напишите маршалер XStream для целевого формата.

  2. Написать собственный код для маршалирования POJO в/из классов, сгенерированных альтернативной библиотекой.

  3. Подкласс созданных классов для реализации логики POJO. Может потребоваться переписывание. (Также я упомянул, что мы хотим использовать Terracotta?)

  4. Используйте другую библиотеку, которая поддерживает как отражение (например, XStream), так и генерацию кода.

Однако я не уверен, какой serialization library был бы лучше всего подходит для вышеупомянутых техник.

ответ

1

(1) не может быть , что много работы, поскольку многие библиотеки сериализации включают вспомогательный API, который знает, как читать/писать примитивные значения и разделители.

(2), вероятно, дает вам самый широкий выбор инструментов: https://github.com/eishay/jvm-serializers/wiki/ToolBehavior (некоторые из них нейтральны). Недостатки, но, надеюсь, не совсем бесполезные ориентиры: https://github.com/eishay/jvm-serializers/wiki

Многие из этих инструментов генерируют классы, которые потребуют написания кода для преобразования в/из ваших POJO. Инструменты, которые работают с POJO напрямую, не являются языковыми.

(3) кажется плохой идеей (ничего не зная о вашем конкретном проекте). Обычно я сохраняю свои классы сообщений без какой-либо другой логики.

(4) Protostuff library (который поддерживает формат буфера протокола) позволяет вам write a "schema" описать, как вы хотите, чтобы ваши POJO сериализовались. Но при написании этой схемы может быть больше работы и больше подверженности ошибкам, чем просто писать код для преобразования между вашими POJO и некоторыми классами, созданными для инструмента.

Protostuff также может отражать automatically generate a schema, но это может привести к тому, что формат сообщения будет немного ориентирован на Java.