Servizio OSGi

Un servizio OSGi è una classe Java o un’interfaccia di servizio, insieme a una serie di proprietà di servizio come coppie nome/valore. Le proprietà del servizio distinguono tra i diversi provider di servizi che forniscono servizi con la stessa interfaccia di servizio.

Un servizio OSGi è definito semanticamente dalla relativa interfaccia di servizio e implementato come oggetto di servizio. La funzionalità di un servizio è definita dalle interfacce implementate. In questo modo, applicazioni diverse possono implementare lo stesso servizio. Le interfacce di servizio consentono ai bundle di interagire tramite interfacce di binding, non tramite implementazioni. È necessario specificare un’interfaccia di servizio con il minor numero di dettagli di implementazione possibile.

Definire l’interfaccia

Un’interfaccia semplice con un metodo per unire i dati con XDP modello.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

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

Implementare l’interfaccia

Crea un nuovo pacchetto denominato com.mysite.samples.impl per l’implementazione dell’interfaccia.

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’annotazione @Component(...) sulla riga 10 contrassegna questa classe Java come componente OSGi e la registra come servizio OSGi.

Il @Reference l’annotazione fa parte di servizi dichiarativi OSGi e viene utilizzata per inserire un riferimento di Servizio di output nella variabile outputService.

Creare e distribuire il bundle

  • Apri finestra del prompt dei comandi
  • Accedi a c:\aemformsbundles\mysite\core
  • Esegui il comando mvn clean install -PautoInstallBundle
  • Il comando precedente genera e distribuisce automaticamente il bundle nell’istanza AEM in esecuzione su localhost:4502

Il bundle sarà disponibile anche nella seguente posizione C:\AEMFormsBundles\mysite\core\target. Il pacchetto può essere distribuito all'AEM utilizzando Console web Felix.

Utilizzo del servizio

Ora puoi utilizzare il servizio nella pagina JSP. Il seguente snippet di codice mostra come accedere al servizio e utilizzare i metodi implementati dal servizio

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

Il pacchetto di esempio contenente la pagina JSP può essere scaricato da qui

Il bundle completo è disponibile per il download

Testare il pacchetto

Importare e installare il pacchetto in AEM utilizzando gestione pacchetti

Utilizza Postman per effettuare una chiamata POST e fornire i parametri di input come mostrato nella schermata seguente
postino

Passaggi successivi

Crea Sling Servlet

In questa pagina