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 XDP mall.

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 som heter com.mysite.samples.impl för implementering 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 görs den här Java-klassen till en OSGi-komponent och registreras som en OSGi-tjänst.

The @Reference anteckningen ingår i OSGi-deklarationstjänster och används för att mata in en referens till OutputService i 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 Felix webbkonsol.

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ämtad härifrån

Det fullständiga paketet kan hämtas

Testa paketet

Importera och installera paketet i AEM med pakethanterare

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