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

Interfaccia semplice con un metodo per unire i dati con il modello XDP.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

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

Implementare l’interfaccia

Creare 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(...) alla riga 10 contrassegna questa classe Java come componente OSGi e la registra come servizio OSGi.

L'annotazione @Reference fa parte dei servizi dichiarativi OSGi e viene utilizzata per inserire un riferimento di Outputservice nella variabile outputService.

Creare e distribuire il bundle

  • Apri finestra del prompt dei comandi
  • Passa 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 nel seguente percorso C:\AEMFormsBundles\mysite\core\target. Il bundle può anche essere distribuito in AEM utilizzando la 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

Importa e installa 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

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