Fermer

août 16, 2021

Utilisation de Jolt comme outil de transformation dans AEM


Un cas d'utilisation fréquent que la plupart des développeurs Full Stack d'Adobe Experience Manager (AEM) auraient rencontré est la migration de contenu de différentes applications vers AEM. Les données des applications source peuvent se présenter sous divers formats tels que JSON, XML, CSV, etc. Lorsque le format de fichier source est JSON, afin de transformer les données source en structure cible, nous devons écrire des programmes complexes pour les lire et les analyser. Dans ce blog, je vais vous montrer une solution efficace et configurable à ce problème.

J'ai récemment relevé ce défi avec l'un de nos clients. Ils disposent d'un service Solr, dans lequel sont stockées les informations les plus récentes sur leurs magasins dans le monde. Je voulais éviter d'appeler ce service chaque fois que nous présentons ces informations dans AEM. À cette fin, j'ai décidé de mettre en œuvre un processus par lots quotidien pour obtenir les données du service et les transformer en nœuds et propriétés JCR.

Le problème était que les informations sont stockées dans un format qui ne correspond pas directement à la structure requise pour les pages de boutique dans notre implémentation AEM actuelle. Par conséquent, j'ai dû effectuer une transformation de ces données avant de les télécharger sur le système.

Ma première pensée a été d'écrire un algorithme de transformation élaboré. Néanmoins, j'ai réalisé que c'était probablement un problème assez courant et j'ai décidé de chercher une bibliothèque pour faire le travail. La meilleure option que j'ai trouvée était Jolt. Il s'agit d'une bibliothèque open source sans dépendances externes, testée dans plusieurs autres projets open source comme Apache Camel et Apache NiFiet très discutée dans les forums de développement de logiciels.

Qu'est-ce que Jolt ?

Jolt est une bibliothèque de transformation JSON vers JSON open source écrite en Java.

Les principales fonctionnalités de Jolt sont :

  • Fournit un ensemble de transformations pour gérer la conversion JSON vers JSON.[19659016]Transforme la structure des données JSON, pas la manipulation des données.
  • Utilise un fichier JSON pour la spécification.

Démo : http://jolt-demo.appspot.com/#inception

Repo GitHub : https://github.com/bazaarvoice/jolt

Jolt prend en charge les transformations suivantes.

  • Shift : copie les données de l'entrée vers l'arbre de sortie
  • Par défaut : applique les valeurs par défaut à l'arbre.
  • Supprimer : supprime les données de l'arbre.
  • Trier : trie la valeur es.
  • Cardinalité : ajuste la cardinalité des données d'entrée.

Des informations supplémentaires et des exemples de ces transformations sont disponibles sur la page GitHub de Jolt.

Étapes pour intégrer Jolt dans un projet AEM.

Tout d'abord, nous devons ajouter la dépendance Maven. Apache ServiceMix propose un wrapper OSGi pour Jolt, nous n'avons donc pas besoin de l'intégrer dans notre bundle. N'oubliez pas d'installer le fichier jar via Adobe Experience Manager Web Console Bundles.


    org.apache.servicemix.bundles
    org.apache.servicemix.bundles.bazaarvoice-jolt
    0.1.1_1

Maintenant, nous peut utiliser Jolt pour faire tout le travail de levage lourd pour nous.

Pour les propositions de démonstration, imaginez que vous ayez ce document JSON qui provient d'un système externe :

{
    "store_id": "1234",
"adresse": {
"street_addresses": ["742 Evergreen Terrace"],
"ville": "Springfield"
}
}

Et nous voulons le charger dans AEM comme ceci :

{
"storeId" : "1234",
"lieu" : {
"adresse" : [ "742 Evergreen Terrace" ],
"ville" : "Springfield"
}
}

Jolt peut enchaîner différentes transformations pour traiter un enregistrement. Ainsi, notre fichier de spécification de transformation doit consister en un tableau d'opérations. Dans notre cas, nous n'en avons besoin que d'un.

Pour effectuer notre transformation, nous utiliserons l'opération de décalage. Il copie les propriétés du JSON d'entrée à l'emplacement souhaité dans le fichier de sortie. Dans la propriété spec, nous indiquons à Jolt les emplacements initiaux et finaux pour un champ donné.

Voyons comment déplacer street_addresses vers address.

Tout d'abord, nous commençons par une copie de l'entrée :

"spec": {
    "adresse": {
"street_addresses":
    }
}

Ensuite, nous définissons où nous voulons déplacer la propriété :

"spec": {
    "adresse": {
        "street_addresses":  "emplacement"
    }
}

Enfin, nous spécifions son nouveau nom :

"spec": {
    "adresse": {
        "street_addresses": "location.address"
    }
}

Avec cette simple spécification, nous avons déplacé address.street_addresses à location.address 

Les transformations restantes peuvent être effectuées avec le fichier de spécifications suivant :[19659043][
{
« operation »: « shift »,
« spec »:{
« store_id »: « storeId »,
« address »: {
« street_addresses »: « location.address »,
« city »: « location.city »
}
}
}
]

Comme vous pouvez le voir, le fichier de spécifications n'est pas trop compliqué.

Maintenant que nous savons comment effectuer des transformations à l'aide de Jolt, il est temps de les utiliser en Java.

Pour utiliser Jolt, nous devons instancier Chainr. Voici un exemple de code qui exécute la transformation décrite :

import com.bazaarvoice.jolt.Chainr ;
importer com.bazaarvoice.jolt.JsonUtils ;

classe publique JoltTest {
    public static void transformJsonJolt() {
        chainr chainr final = Chainr.fromSpec(JsonUtils.classpathToList("/path/to/specFile.json"));
        Objet final jsonInput = JsonUtils.classpathToObject("/chemin/vers/jsonInput.json");
        Objet final jsonOutput = chainr.transform(jsonInput);
        System.out.println(jsonOutput);
    }
}

Le résultat :

{storeId=1234, location={address=[742 Evergreen Terrace]city=Springfield}}

Conclusion

Jolt est un outil puissant qui vous aide à effectuer des transformations JSON complexes sans Réinventer la roue. C'est simple, open source et sans dépendance.

Maintenant que vous savez transformer vos données JSON, consultez ce blog d'un de mes collègues pour savoir comment les importer dans AEM à l'aide de ContentImporter.

À propos de l'auteur

Felipe est un ingénieur logiciel avec une maîtrise en administration des affaires et plus de huit ans d'expérience dans l'industrie du logiciel. Chez Perficient Latin America, il est développeur dans la pratique Adobe.

En savoir plus sur cet auteur






Source link