Service OSGi

Un service OSGi est une classe Java ou une interface de service, ainsi qu’un certain nombre de propriétés de service sous la forme de paires nom/valeur. Les propriétés du service différencient les différents fournisseurs de services qui fournissent des services avec la même interface de service.

Un service OSGi est défini sémantiquement par son interface de service et implémenté en tant qu’objet de service. La fonctionnalité d’un service est définie par les interfaces qu’il implémente. Ainsi, différentes applications peuvent mettre en œuvre le même service. Les interfaces de service permettent aux lots d’interagir par des interfaces de liaison, et non par des implémentations. Une interface de service doit être spécifiée avec le moins de détails d’implémentation possible.

Définir l’interface

Une interface simple avec une méthode pour fusionner les données avec le modèle XDP.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

public interface MyfirstInterface
{
    public Document mergeDataWithXDPTemplate(Document xdpTemplate, Document xmlDocument);
}

Implémenter l’interface

Créez un nouveau package appelé com.mysite.samples.impl pour contenir l’implémentation de l’interface.

package com.mysite.samples.impl;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.aemfd.docmanager.Document;
import com.adobe.fd.output.api.OutputService;
import com.adobe.fd.output.api.OutputServiceException;
import com.mysite.samples.MyfirstInterface;
@Component(service = MyfirstInterface.class)
public class MyfirstInterfaceImpl implements MyfirstInterface {
  @Reference
  OutputService outputService;

  private static final Logger log = LoggerFactory.getLogger(MyfirstInterfaceImpl.class);

  @Override
  public Document mergeDataWithXDPTemplate(Document xdpTemplate, Document xmlDocument) {
    com.adobe.fd.output.api.PDFOutputOptions pdfOptions = new com.adobe.fd.output.api.PDFOutputOptions();
    pdfOptions.setAcrobatVersion(com.adobe.fd.output.api.AcrobatVersion.Acrobat_11);
    try {
      return outputService.generatePDFOutput(xdpTemplate, xmlDocument, pdfOptions);

    } catch (OutputServiceException e) {

      log.error("Failed to merge data with XDP Template", e);

    }

    return null;
  }

}

L’annotation @Component(...) sur la ligne 10 marque cette classe Java en tant que composant OSGi et l’enregistre en tant que service OSGi.

L’annotation @Reference fait partie des services déclaratifs OSGi et est utilisée pour injecter une référence du service Outputservice dans la variable outputService.

Créer et déployer le lot

  • Ouvrez la fenêtre d’invite de commande.
  • Accédez à c:\aemformsbundles\mysite\core.
  • Exécuter la commande mvn clean install -PautoInstallBundle
  • La commande ci-dessus crée et déploie automatiquement le lot vers votre instance AEM s’exécutant sur localhost:4502.

Le lot sera également disponible à l’emplacement suivant : C:\AEMFormsBundles\mysite\core\target. Le lot peut également être déployé dans AEM à l’aide de la console web Felix.

Utiliser le service

Vous pouvez désormais utiliser le service dans votre page JSP. L’extrait de code suivant montre comment accéder à votre service et utiliser les méthodes implémentées par le service.

MyFirstAEMFormsService myFirstAEMFormsService = sling.getService(com.mysite.samples.MyFirstAEMFormsService.class);
com.adobe.aemfd.docmanager.Document generatedDocument = myFirstAEMFormsService.mergeDataWithXDPTemplate(xdp_or_pdf_template,xmlDocument);

L’exemple de package contenant la page JSP peut être téléchargé ici.

Le lot complet est disponible au téléchargement.

Tester le package

Importez et installez le package dans AEM à l’aide du gestionnaire de packages.

Utilisez Postman pour effectuer un appel POST et fournir les paramètres d’entrée comme illustré dans la capture d’écran ci-dessous.
Postman.

Étapes suivantes

Créer un servlet Sling

recommendation-more-help
8de24117-1378-413c-a581-01e660b7163e