OSGi Service

En OSGi-tjänst är en Java-klass eller ett Java-tjänstgränssnitt tillsammans med ett antal tjänsteegenskaper som namn/värde-par. Tjänstegenskaperna skiljer sig mellan olika tjänsteleverantörer som tillhandahåller tjänster med samma gränssnitt.

En OSGi-tjänst definieras semantiskt av dess tjänstgränssnitt och implementeras som ett serviceobjekt. En tjänsts funktionalitet definieras av de gränssnitt som den implementerar. Olika program kan alltså implementera samma tjänst. Tjänstgränssnitten gör det möjligt att interagera genom att binda gränssnitt, inte implementeringar. Ett tjänstgränssnitt ska anges med så få implementeringsdetaljer som möjligt.

Definiera gränssnittet

Ett enkelt gränssnitt med en metod för att sammanfoga data med mallen XDP.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

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

Implementera gränssnittet

Skapa ett nytt paket med namnet com.mysite.samples.impl för implementeringen av gränssnittet.

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;
  }

}

Anteckningen @Component(...) på rad 10 markerar den här Java-klassen som en OSGi-komponent samt registrerar den som en OSGi-tjänst.

Anteckningen @Reference ingår i OSGi-deklarativa tjänster och används för att mata in en referens för OutputServicei variabeln outputService.

Bygg och distribuera paketet

  • Öppna kommandotolkfönstret
  • Navigera till c:\aemformsbundles\mysite\core
  • Kör kommandot mvn clean install -PautoInstallBundle
  • Ovanstående kommando skapar och distribuerar automatiskt paketet till din AEM som körs på localhost:4502

Paketet kommer också att vara tillgängligt på följande plats C:\AEMFormsBundles\mysite\core\target. Paketet kan också distribueras till AEM med webbkonsolen Felix.

Använda tjänsten

Du kan nu använda tjänsten på JSP-sidan. Följande kodutdrag visar hur du får åtkomst till tjänsten och använder de metoder som implementerats av tjänsten

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

Exempelpaketet som innehåller JSP-sidan kan hämtas här

Det fullständiga paketet kan hämtas

Testa paketet

Importera och installera paketet i AEM med pakethanteraren

Använd postman för att ringa ett POST-samtal och ange indataparametrarna som visas på bilden nedan
postman

Nästa steg

Skapa Sling Servlet

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