Serviço OSGi

Um serviço OSGi é uma classe Java ou interface de serviço, juntamente com várias propriedades de serviço como pares de nome/valor. As propriedades do serviço diferenciam entre diferentes provedores de serviços que fornecem serviços com a mesma interface de serviço.

Um serviço OSGi é definido semanticamente por sua interface de serviço e implementado como um objeto de serviço. A funcionalidade de um serviço é definida pelas interfaces que ele implementa. Dessa forma, aplicativos diferentes podem implementar o mesmo serviço. As interfaces de serviço permitem que os pacotes interajam por interfaces de vinculação, não por implementações. Uma interface de serviço deve ser especificada com o menor número de detalhes de implementação possível.

Definir a interface

Uma interface simples com um método para unir dados com o modelo XDP.

package com.mysite.samples;

import com.adobe.aemfd.docmanager.Document;

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

Implementar a interface

Crie um novo pacote chamado com.mysite.samples.impl para conter a implementação da 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;
  }

}

A anotação @Component(...) na linha 10 marca essa classe Java como um componente OSGi, bem como a registra como um Serviço OSGi.

A anotação @Reference faz parte dos serviços declarativos OSGi e é usada para inserir uma referência do Outputservice na variável outputService.

Criar e implantar o pacote

  • Abrir janela do prompt de comando
  • Navegue até c:\aemformsbundles\mysite\core
  • Executar o comando mvn clean install -PautoInstallBundle
  • O comando acima criará e implantará automaticamente o pacote em sua instância do AEM em execução em localhost:4502

O pacote também estará disponível no seguinte local C:\AEMFormsBundles\mysite\core\target. O pacote também pode ser implantado no AEM usando o Felix web console.

Uso do serviço

Agora você pode usar o serviço em sua página JSP. O trecho de código a seguir mostra como obter acesso ao serviço e usar os métodos implementados pelo serviço

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

O pacote de exemplo contendo a página JSP pode ser baixado daqui

O pacote completo está disponível para download

Testar o pacote

Importe e instale o pacote no AEM usando o gerenciador de pacotes

Use o carteiro para fazer uma chamada de POST e fornecer os parâmetros de entrada conforme mostrado na captura de tela abaixo
carteiro

Próximas etapas

Criar Sling Servlet

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