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