Un servizio OSGi è un'interfaccia di classe o servizio Java, insieme a una serie di proprietà del servizio come coppie nome/valore. Le proprietà del servizio differenziano tra i diversi provider di servizi che forniscono servizi con la stessa interfaccia di servizio.
Un servizio OSGi viene definito semanticamente dalla relativa interfaccia di servizio e implementato come oggetto di servizio. La funzionalità di un servizio è definita dalle interfacce che implementa. Pertanto, applicazioni diverse possono implementare lo stesso servizio. Le interfacce di servizio consentono ai bundle di interagire mediante interfacce di binding, non tramite implementazioni. Specificare un'interfaccia di servizio con il minor numero possibile di dettagli di implementazione.
Interfaccia semplice con un metodo per unire i dati con XDP modello.
package com.mysite.samples;
import com.adobe.aemfd.docmanager.Document;
public interface MyfirstInterface
{
public Document mergeDataWithXDPTemplate(Document xdpTemplate, Document xmlDocument);
}
Crea un nuovo pacchetto denominato com.mysite.samples.impl
per mantenere l’implementazione dell’interfaccia.
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;
}
}
Annotazione @Component(...)
alla riga 10 marca questa classe Java come componente OSGi e la registra come servizio OSGi.
La @Reference
annotazione fa parte dei servizi dichiarativi OSGi e viene utilizzata per inserire un riferimento Outputservice nella variabile outputService
.
c:\aemformsbundles\mysite\core
mvn clean install -PautoInstallBundle
Il bundle sarà disponibile anche nella seguente posizione C:\AEMFormsBundles\mysite\core\target
. Il bundle può anche essere distribuito in AEM utilizzando il Console web Felix.
Ora puoi utilizzare il servizio nella pagina JSP. Il seguente frammento di codice mostra come accedere al servizio e utilizzare i metodi implementati dal servizio
MyFirstAEMFormsService myFirstAEMFormsService = sling.getService(com.mysite.samples.MyFirstAEMFormsService.class);
com.adobe.aemfd.docmanager.Document generatedDocument = myFirstAEMFormsService.mergeDataWithXDPTemplate(xdp_or_pdf_template,xmlDocument);
Il pacchetto di esempio contenente la pagina JSP può essere scaricato da qui
Il bundle completo è disponibile per il download
Importa e installa il pacchetto in AEM utilizzando il gestore di pacchetti
Utilizza un postman per effettuare una chiamata POST e fornire i parametri di input come mostrato nella schermata sottostante