OSGi-service
- 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