3

Nous utilisons actuellement XStream pour coder nos entrées/sorties de service Web en XML. Cependant, nous envisageons de passer à un format binaire avec un générateur de code pour plusieurs langages (protobuf, Thrift, Hessian, etc.) pour faciliter le support de nouveaux clients et moins sur le codage manuel (pour mieux supporter nos formats de messages incluant des données binaires) .XStream <-> Formats binaires alternatifs (par exemple, tampons de protocole)

Cependant, la plupart de nos objets sur le serveur sont des POJO avec XStream gérant la sérialisation via la réflexion et les annotations, et la plupart de ces bibliothèques supposent qu'ils généreront les POJO eux-mêmes. Je peux penser à quelques façons d'interfacer une bibliothèque alternative:

  1. Ecrivez un marshaler XStream pour le format cible.

  2. Écrire du code personnalisé pour marshaler les POJO vers/depuis les classes générées par la bibliothèque alternative.

  3. Sous-classe les classes générées pour implémenter la logique POJO. Peut nécessiter une réécriture. (Aussi ai-je mentionné que nous voulons utiliser Terracotta?)

  4. Utilisez une autre bibliothèque qui prend en charge à la fois la réflexion (comme XStream) et la génération de code.

Cependant, je ne suis pas sûr serialization library serait mieux adapté aux techniques ci-dessus.

Répondre

1

(1) peut ne pas être que beaucoup de travail depuis de nombreuses bibliothèques de sérialisation comprennent une API auxiliaire qui sait lire/écrire des valeurs primitives et des délimiteurs.

(2) vous donne probablement le plus grand choix d'outils: https://github.com/eishay/jvm-serializers/wiki/ToolBehavior (certains sont indépendants de la langue). Des bancs d'essai imparfaits mais pas tout à fait inutiles: https://github.com/eishay/jvm-serializers/wiki

Plusieurs de ces outils génèrent des classes, ce qui nécessite d'écrire du code pour convertir vers/depuis vos POJO. Les outils qui fonctionnent directement avec les POJO ne sont généralement pas neutres.

(3) semble être une mauvaise idée (ne sachant rien de votre projet spécifique). Je garde normalement mes classes de messages libres de toute autre logique.

(4) Le Protostuff library (qui prend en charge le format de tampon de protocole) vous permet write a "schema" de décrire comment vous souhaitez sérialiser vos POJO. Mais écrire ce schéma pourrait finir par être plus de travail et plus propice aux erreurs que d'écrire simplement du code pour convertir entre vos POJO et les classes générées par certains outils.

Protostuff peut aussi automatically generate a schema par réflexion, mais cela peut donner un format de message qui semble un peu centré sur Java.