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.