DocumentatieAEMTutorials voor AEMTutorials voor AEM Forms

OSGi-service

Laatst bijgewerkt: 5 mei 2025
  • Van toepassing op:
  • Experience Manager 6.4
  • Experience Manager 6.5
  • Onderwerpen:
  • Adaptieve formulieren

Gemaakt voor:

  • Beginner
  • Ontwikkelaar

Een dienst OSGi is een klasse of de dienstinterface van Java, samen met een aantal de diensteigenschappen als naam/waardeparen. De de diensteigenschappen onderscheiden zich onder verschillende dienstverleners die de diensten van de zelfde de dienstinterface verlenen.

De dienst OSGi wordt semantisch bepaald door zijn de dienstinterface en als de dienstvoorwerp uitgevoerd. De functionaliteit van de dienst wordt bepaald door de interfaces het uitvoert. Dientengevolge, kunnen de verschillende toepassingen de zelfde dienst uitvoeren. De interfaces van de dienst staan bundels toe om door bindende interfaces, niet implementaties in wisselwerking te staan. Een de dienstinterface zou met zo weinig implementatiedetails moeten worden gespecificeerd mogelijk.

De interface definiëren

Een eenvoudige interface met één methode om gegevens met het XDP malplaatje samen te voegen.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

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

Implementeer de interface

Maak een nieuw pakket met de naam com.mysite.samples.impl voor de implementatie van de 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;
  }

}

De aantekening @Component(...) op regel 10 maakt deze Java-klasse gemarkeerd als een OSGi-component en registreert deze als een OSGi-service.

De @Reference aantekening maakt deel uit van de verklarende diensten OSGi, en wordt gebruikt om een verwijzing van OutputServicein veranderlijk outputService te injecteren.

De bundel maken en implementeren

  • Open bevel snel venster
  • Navigeren naar c:\aemformsbundles\mysite\core
  • De opdracht uitvoeren mvn clean install -PautoInstallBundle
  • Met de bovenstaande opdracht wordt de bundel automatisch gegenereerd en geïmplementeerd op uw AEM-instantie die wordt uitgevoerd op localhost:4502

De bundel is ook beschikbaar op de volgende locatie C:\AEMFormsBundles\mysite\core\target . De bundel kan ook in AEM worden opgesteld gebruikend de het Webconsole van de Felix.

De service gebruiken

U kunt de dienst in uw JSP pagina nu gebruiken. Het volgende codefragment toont hoe te om toegang tot uw dienst te krijgen en de methodes te gebruiken die door de dienst worden uitgevoerd

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

Het steekproefpakket dat de JSP pagina bevat kan van hier worden gedownload

De volledige bundel kan worden gedownload

De verpakking testen

Invoer en installeer het pakket in AEM gebruikend de pakketmanager

Gebruik postman om een POST-aanroep te maken en de invoerparameters op te geven, zoals hieronder in de schermafbeelding wordt getoond
postman

Volgende stappen

Sling Servlet maken

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