Champollion expose deux APIs Jakarta distinctes : JSON-P (Processing) qui manipule du JSON brut comme un flux d’événements ou un arbre de valeurs, et JSON-B (Binding) qui mappe automatiquement entre JSON et POJO. Cette page pose le vocabulaire de chacune.
JSON-P 2.1 — JSON Processing
API bas niveau, orientée structure JSON. Couvre la spec https://jakarta.ee/specifications/jsonp/2.1/.
Parser et Generator (streaming)
|
Lecteur pull orienté événements : |
|
Écrivain push, fluide : |
|
Fabriques configurées (buffer pool, pretty-printing, encoding). Réutilisables, thread-safe. |
Object model (DOM)
|
Interface scellée — racine de la hiérarchie. Sous-types : |
|
|
|
|
|
Constructeurs mutables ; |
|
Lecture / écriture complète d’un |
Patch / Pointer / Merge Patch
|
Adresse une valeur dans un document : |
|
Séquence d’opérations atomiques ( |
|
Patch « différentiel » par fusion arborescente. |
JSON-B 3.0 — JSON Binding
API haut niveau, orientée objet Java. Couvre la spec https://jakarta.ee/specifications/jsonb/3.0/.
|
Point d’entrée principal. |
|
Fluide. |
|
Bag de propriétés standard : |
|
Conversion bidirectionnelle entre un type Java et un type JSON natif (typiquement |
|
Customization bas niveau : on pilote directement |
|
Plan résolu une fois par classe : liste ordonnée de |
|
Contrat d’un binding statique généré par APT. Implémenté par |
Différence essentielle : JSON-P vs JSON-B
| Critère | JSON-P | JSON-B |
|---|---|---|
Niveau |
Bas — manipule des événements ou un DOM JSON |
Haut — manipule des objets Java |
Cas typique |
Streaming, gros documents, patch / merge |
DTO REST, configuration, échanges CRUD |
Allocation |
Minimale en streaming (zéro DOM) |
Un object graph complet à chaque appel |
Customization |
Aucune — c’est juste de la structure |
Annotations ( |
Performance |
Cible Parsson / Jackson streaming |
Cible Yasson / Jackson databind |
JSON-B repose sur JSON-P : Jsonb.toJson(obj) finit toujours par pousser dans un JsonGenerator. La couche binding sait composer sur la couche processing — pas l’inverse.
Vocabulaire Champollion-spécifique
Mode runtime |
Binding JSON-B par introspection |
Mode statique (ou « codegen ») |
Binding JSON-B généré à la compilation par |
Differential testing |
Suite automatisée : pour chaque type testé, vérifier |
|
Annotation Champollion-spécifique qui marque un type pour la génération de binding. Par défaut l’APT scanne aussi les annotations standard ( |
|
SPI ServiceLoader qui expose un binding statique généré. Le runtime consulte d’abord ce SPI, puis retombe sur l’introspection si absent. |