Show Menu
TÓPICOS×

Invocar o AEM Forms usando Serviços da Web

A maioria dos serviços do AEM Forms no container de serviço é configurada para expor um serviço da Web, com suporte total para a geração WSDL (Web Service Definition Language). Ou seja, você pode criar objetos proxy que consomem a pilha SOAP nativa de um serviço AEM Forms. Como resultado, os serviços do AEM Forms podem trocar e processar as seguintes mensagens SOAP:
  • Solicitação SOAP: Enviado para um serviço do Forms por um aplicativo cliente que solicita uma ação.
  • Resposta SOAP: Enviado para um aplicativo cliente por um serviço do Forms depois que uma solicitação SOAP é processada.
Usando os serviços da Web, você pode executar as mesmas operações dos serviços do AEM Forms que pode usando a API Java. Uma vantagem de usar serviços da Web para chamar os serviços do AEM Forms é que você pode criar um aplicativo cliente em um ambiente de desenvolvimento compatível com SOAP. Um aplicativo cliente não está vinculado a um ambiente de desenvolvimento específico ou linguagem de programação. Por exemplo, você pode criar um aplicativo cliente usando o Microsoft Visual Studio .NET e C# como linguagem de programação.
Os serviços do AEM Forms são expostos pelo protocolo SOAP e são compatíveis com o WSI Basic Perfil 1.1. A WSI (Web Services Interoperability) é uma organização de padrões abertos que promove a interoperabilidade do serviço da Web entre plataformas. Para obter informações, consulte https://www.ws-i.org/ .
O AEM Forms oferece suporte aos seguintes padrões de serviço da Web:
Para chamar os serviços do AEM Forms usando um serviço da Web, geralmente você cria uma biblioteca proxy que consome o serviço WSDL. A seção Invocar formulários AEM usando serviços da Web usa JAX-WS para criar classes proxy Java para chamar serviços. (Consulte Criação de classes proxy Java usando JAX-WS .)
Você pode recuperar um WDSL de serviço especificando a seguinte definição de URL (os itens entre colchetes são opcionais):
 https://<your_serverhost>:<your_port>/soap/services/<service_name>?wsdl[&version=<version>][&async=true|false][lc_version=<lc_version>]

em que:
  • your_serverhost representa o endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms.
  • your_port representa a porta HTTP que o servidor de aplicativos J2EE usa.
  • service_name representa o nome do serviço.
  • versão representa a versão de público alvo de um serviço (a versão de serviço mais recente é usada por padrão).
  • async especifica o valor true para ativar operações adicionais para invocação assíncrona ( false por padrão).
  • lc_version representa a versão do AEM Forms que você deseja chamar.
A tabela a seguir lista as definições WSDL do serviço (supondo que o AEM Forms seja implantado no host local e a publicação seja 8080).
Serviço
Definição WSDL
Assembler
http://localhost:8080/soap/services/ AssemblerService?wsdl
Voltar e restaurar
http://localhost:8080/soap/services/BackupService?wsdl
formulários em código de barras
http://localhost:8080/soap/services/ BarcodedFormsService?wsdl
Converter PDF
http://localhost:8080/soap/services/ ConvertPDFService?wsdl
Distiller
http://localhost:8080/soap/services/ DistillerService?wsdl
DocConverter
http://localhost:8080/soap/services/DocConverterService?WSDL
DocumentManagement
http://localhost:8080/soap/services/DocumentManagementService?WSDL
Criptografia
http://localhost:8080/soap/services/EncryptionService?wsdl
Forms
http://localhost:8080/soap/services/FormsService?wsdl
Integração de dados de formulário
http://localhost:8080/soap/services/FormDataIntegration?wsdl
Gerar PDF
http://localhost:8080/soap/services/ GeneratePDFService?wsdl
Gerar PDF 3D
http://localhost:8080/soap/services/Generate3dPDFService?WSDL
Saída
http://localhost:8080/soap/services/ OutputService?wsdl
Utilitários PDF
http://localhost:8080/soap/services/ PDFUtilityService?wsdl
Extensões do Acrobat Reader DC
http://localhost:8080/soap/services/ ReaderExtensionsService?wsdl
Repositório
http://localhost:8080/soap/services/ RepositoryService?wsdl
Gerenciamento de direitos
http://localhost:8080/soap/services/ RightsManagementService?wsdl
Assinatura
http://localhost:8080/soap/services/ SignatureService?wsdl
Utilitários XMP
http://localhost:8080/soap/services/ XMPUtilityService?wsdl
Definições WSDL do processo do AEM Forms
Você deve especificar o nome do Aplicativo e o nome do Processo na definição WSDL para acessar um WSDL que pertence a um processo criado no Workbench. Suponha que o nome do aplicativo seja MyApplication e que o nome do processo seja EncryptDocument . Nessa situação, especifique a seguinte definição de WSDL:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl

Para obter informações sobre o exemplo do processo de vida curta MyApplication/EncryptDocument , consulte Exemplo do processo de vida curta.
Um aplicativo pode conter pastas. Nesse caso, especifique os nomes das pastas na definição WSDL:
 http://localhost:8080/soap/services/MyApplication/[<folderA>/.../<folderZ>/]EncryptDocument?wsdl

Acessar novas funcionalidades usando serviços da Web
A nova funcionalidade do serviço AEM Forms pode ser acessada usando serviços da Web. Por exemplo, no AEM Forms, a capacidade de codificar anexos usando MTOM é introduzida. (Consulte Invocar formulários AEM usando MTOM .)
Para acessar a nova funcionalidade introduzida no AEM Forms, especifique o lc_version atributo na definição WSDL. Por exemplo, para acessar a nova funcionalidade do serviço (incluindo suporte a MTOM), especifique a seguinte definição de WSDL:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?wsdl&lc_version=9.0.1

Ao definir o lc_version atributo, certifique-se de usar três dígitos. Por exemplo, 9.0.1 é igual à versão 9.0.
Tipo de dados BLOB do serviço Web
As WSDLs do serviço AEM Forms definem muitos tipos de dados. Um dos tipos de dados mais importantes expostos em um serviço da Web é um BLOB tipo. Esse tipo de dados mapeia para a com.adobe.idp.Document classe ao trabalhar com APIs Java de formulários AEM. (Consulte Passar dados para os serviços do AEM Forms usando a API Java.)
Um BLOB objeto envia e recupera dados binários (por exemplo, arquivos PDF, dados XML etc.) de e para os serviços do AEM Forms. O BLOB tipo é definido em um WSDL de serviço da seguinte maneira:
 <complexType name="BLOB">
     <sequence>
         <element maxOccurs="1" minOccurs="0" name="contentType"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="binaryData"
             type="xsd:base64Binary"/>
         <element maxOccurs="1" minOccurs="0" name="attachmentID"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="remoteURL"
             type="xsd:string"/>
         <element maxOccurs="1" minOccurs="0" name="MTOM"
             type="xsd:base64Binary"
             xmime:expectedContentTypes="*/*"
             xmlns:xmime="https://www.w3.org/2005/05/xmlmime"/>
         <element maxOccurs="1" minOccurs="0" name="swaRef"
             type="tns1:swaRef"/>
         <element maxOccurs="1" minOccurs="0" name="attributes"
             type="impl:MyMapOf_xsd_string_To_xsd_anyType"/>
     </sequence>
 </complexType>

Os campos MTOM e swaRef são suportados apenas no AEM Forms. Você pode usar esses novos campos somente se especificar um URL que inclua a lc_version propriedade.
Fornecimento de objetos BLOB em solicitações de serviço
Se uma operação de serviço do AEM Forms exigir um BLOB tipo como valor de entrada, crie uma instância do BLOB tipo na lógica do aplicativo. (Muitos dos start rápidos do serviço da Web localizados em Programação com formulários AEM mostram como trabalhar com um tipo de dados BLOB.)
Atribua valores a campos que pertencem à BLOB instância da seguinte forma:
  • Base64 : Para transmitir dados como um texto codificado em um formato Base64, defina os dados no BLOB.binaryData campo e defina o tipo de dados no formato MIME (por exemplo, application/pdf ) no BLOB.contentType campo. (Consulte Invocar formulários AEM usando a codificação Base64.)
  • MTOM : Para transmitir dados binários em um anexo MTOM, defina os dados no BLOB.MTOM campo. Essa configuração anexa os dados à solicitação SOAP usando a estrutura Java JAX-WS ou a API nativa da estrutura SOAP. (Consulte Invocar formulários AEM usando MTOM .)
  • SwaRef : Para transmitir dados binários em um anexo SwaRef do WS-I, defina os dados no BLOB.swaRef campo. Essa configuração anexa os dados à solicitação SOAP usando a estrutura Java JAX-WS. (Consulte Invocar formulários AEM usando SwaRef .)
  • Anexo MIME ou DIME : Para transmitir dados em um anexo MIME ou DIME, anexe os dados à solicitação SOAP usando a API nativa da estrutura SOAP. Defina o identificador do anexo no BLOB.attachmentID campo. (Consulte Invocar formulários AEM usando a codificação Base64.)
  • URL remoto: Se os dados estiverem hospedados em um servidor da Web e acessíveis por meio de um URL HTTP, defina o URL HTTP no BLOB.remoteURL campo. (Consulte Invocar formulários AEM usando dados BLOB em HTTP .)
Acessar dados em objetos BLOB retornados de serviços
O protocolo de transmissão para BLOB objetos retornados depende de vários fatores, que são considerados na seguinte ordem, parando quando a condição principal é atendida:
  1. O URL do Público alvo especifica o protocolo de transmissão. Se o URL do público alvo especificado na invocação SOAP contiver o parâmetro blob=" *BLOB_TYPE ", então BLOB_TYPE determinará o protocolo de transmissão. BLOB_TYPE *é um espaço reservado para base64, dime, mime, http, mtom ou swaref.
  2. O terminal SOAP do serviço é Smart . Se as seguintes condições forem verdadeiras, os documentos de saída serão retornados usando o mesmo protocolo de transmissão que os documentos de entrada:
    • O parâmetro de ponto final SOAP do serviço Protocolo padrão para objetos de blob de saída está definido como Inteligente.
      Para cada serviço com um terminal SOAP, o console de administração permite que você especifique o protocolo de transmissão para quaisquer blobs retornados. (Consulte a ajuda administrativa .)
    • O serviço AEM Forms utiliza um ou mais documentos como entrada.
  3. O terminal SOAP de serviço não é inteligente . O protocolo configurado determina o protocolo de transmissão do documento e os dados são retornados no BLOB campo correspondente. Por exemplo, se o terminal SOAP estiver definido como DIME, o blob retornado estará no blob.attachmentID campo independentemente do protocolo de transmissão de qualquer documento de entrada.
  4. Caso contrário . Se um serviço não tomar o tipo de documento como entrada, os documentos de saída serão retornados no BLOB.remoteURL campo sobre o protocolo HTTP.
Conforme descrito na primeira condição, é possível garantir o tipo de transmissão para qualquer documentos retornado estendendo o URL do terminal SOAP com um sufixo, da seguinte forma:
     https://<your_serverhost>:<your_port>/soap/services/<service
     name>?blob=base64|dime|mime|http|mtom|swaref

Esta é a correlação entre os tipos de transmissão e o campo a partir do qual você obtém os dados:
  • Formato Base64: Defina o blob sufixo como base64 para retornar os dados no BLOB.binaryData campo.
  • Anexo MIME ou DIME : Defina o blob sufixo como DIME ou MIME para retornar os dados como um tipo de anexo correspondente com o identificador de anexo retornado no BLOB.attachmentID campo. Use a API proprietária da estrutura SOAP para ler os dados do anexo.
  • URL remoto: Defina o blob sufixo http para manter os dados no servidor de aplicativos e retorne o URL apontando para os dados no BLOB.remoteURL campo.
  • MTOM ou SwaRef : Defina o blob sufixo como mtom ou swaref para retornar os dados como um tipo de anexo correspondente com o identificador de anexo retornado nos campos BLOB.MTOM ou BLOB.swaRef . Use a API nativa da estrutura SOAP para ler os dados do anexo.
É recomendável que você não exceda 30 MB ao preencher um BLOB objeto chamando seu setBinaryData método. Caso contrário, há a possibilidade de ocorrer uma OutOfMemory exceção.
Os aplicativos baseados no JAX WS que usam o protocolo de transmissão MTOM estão limitados a 25 MB de dados enviados e recebidos. Essa limitação se deve a um erro no JAX-WS. Se o tamanho combinado dos arquivos enviados e recebidos exceder 25 MB, use o protocolo de transmissão SwaRef em vez do MTOM. Caso contrário, existe uma possibilidade de OutOfMemory exceção.
Transmissão MTOM de matrizes de bytes codificadas em base64
Além do BLOB objeto, o protocolo MTOM suporta qualquer parâmetro de matriz de bytes ou campo de matriz de bytes de um tipo complexo. Isso significa que estruturas SOAP do cliente que oferecem suporte a MTOM podem enviar qualquer xsd:base64Binary elemento como um anexo MTOM (em vez de um texto codificado em base64). Os pontos de extremidade SOAP do AEM Forms podem ler esse tipo de codificação de matriz de bytes. Entretanto, o serviço AEM Forms sempre retorna um tipo de matriz de bytes como um texto codificado em base64. Os parâmetros da matriz de bytes de saída não suportam MTOM.
Os serviços do AEM Forms que retornam uma grande quantidade de dados binários usam o tipo Documento/BLOB em vez do tipo de matriz de bytes. O tipo de Documento é muito mais eficiente para transmitir grandes quantidades de dados.

Tipos de dados de serviço da Web

A tabela a seguir lista os tipos de dados Java e mostra o tipo de dados do serviço da Web correspondente.
Tipo de dados Java
Tipo de dados do serviço Web
java.lang.byte[]
xsd:base64Binary
java.lang.Boolean
xsd:boolean
java.util.Date
O DATE tipo, que é definido em um WSDL de serviço da seguinte forma:
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" type="xsd:dateTime" />
</sequence>
</complexType>
Se uma operação de serviço do AEM Forms usar um java.util.Date valor como entrada, o aplicativo cliente SOAP deve passar a data no DATE.date campo. A definição do DATE.calendar campo nesse caso causa uma exceção de tempo de execução. Se o serviço retornar um java.util.Date , a data será retornada no DATE.date campo.
java.util.Calendar
O DATE tipo, que é definido em um WSDL de serviço da seguinte forma:
<complexType name="DATE">
<sequence>
<element maxOccurs="1" minOccurs="0" name="date" type="xsd:dateTime" />
<element maxOccurs="1" minOccurs="0" name="calendar" type="xsd:dateTime" />
</sequence>
</complexType>
Se uma operação de serviço do AEM Forms usar um java.util.Calendar valor como entrada, o aplicativo cliente SOAP deve passar a data no DATE.caledendar campo. A definição do DATE.date campo nesse caso causa uma exceção de tempo de execução. Se o serviço retornar um java.util.Calendar , a data será retornada no DATE.calendar campo.
java.math.BigDecimal
xsd:decimal
com.adobe.idp.Document
BLOB
java.lang.Double
xsd:double
java.lang.Float
xsd:float
java.lang.Integer
xsd:int
java.util.List
MyArrayOf_xsd_anyType
java.lang.Long
xsd:long
java.util.Map
O apachesoap:Map , que é definido em um WSDL de serviço da seguinte forma:
<schema elementFormDefault="qualified" targetNamespace="https://xml.apache.org/xml-soap" xmlns="https://www.w3.org/2001/XMLSchema">
<complexType name="mapItem">
<sequence>
<element name="key" nillable="true" type="xsd:anyType"/>
<element name="value" nillable="true" type="xsd:anyType"/>
</sequence>
</complexType>
<complexType name="Map">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="apachesoap:mapItem"/>
</sequence>
</complexType>
</schema>
O Mapa é representado como uma sequência de pares de chave/valor.
java.lang.Object
$1
java.lang.Short
xsd:short
java.lang.String
xsd:string
org.w3c.dom.Document
O tipo XML, que é definido em um WSDL de serviço da seguinte maneira:
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" type="xsd:string" />
</sequence>
</complexType>
Se uma operação de serviço do AEM Forms aceitar um org.w3c.dom.Document valor, passe os dados XML no XML.document campo.
A definição do XML.element campo causa uma exceção de tempo de execução. Se o serviço retornar um org.w3c.dom.Document , os dados XML serão retornados no XML.document campo.
org.w3c.dom.Element
O tipo XML, que é definido em um WSDL de serviço da seguinte maneira:
<complexType name="XML">
<sequence>
<element maxOccurs="1" minOccurs="0" name="document" type="xsd:string" />
<element maxOccurs="1" minOccurs="0" name="element" type="xsd:string" />
</sequence>
</complexType>
Se uma operação de serviço do AEM Forms usar uma entrada org.w3c.dom.Element como, passe os dados XML no XML.element campo.
A definição do XML.document campo causa uma exceção de tempo de execução. Se o serviço retornar um org.w3c.dom.Element , os dados XML serão retornados no XML.element campo.
Site do Adobe Developer
O site do Adobe Developer contém o seguinte artigo que discute a chamada dos serviços do AEM Forms usando a API de serviço da Web:
Invocar serviços da Web usando componentes personalizados descreve como criar um componente AEM Forms que chama serviços da Web de terceiros.

Criação de classes proxy Java usando JAX-WS

Você pode usar o JAX-WS para converter um WSDL de serviço do Forms para classes proxy Java. Essas classes permitem que você chame as operações dos serviços do AEM Forms. O Apache Ant permite que você crie um script de compilação que gera classes proxy Java referenciando um serviço WSDL do AEM Forms. Você pode gerar arquivos proxy JAX-WS executando as seguintes etapas:
  1. Instale o Apache Ant no computador cliente. (Consulte https://ant.apache.org/bindownload.cgi .)
    • Adicione o diretório bin ao caminho da classe.
    • Defina a variável de ANT_HOME ambiente para o diretório onde você instalou o Ant.
  2. Instale o JDK 1.6 ou posterior.
    • Adicione o diretório JDK bin ao caminho da classe.
    • Adicione o diretório JRE bin ao caminho da classe. Este compartimento está localizado no [JDK_INSTALL_LOCATION]/jre diretório.
    • Defina a variável JAVA_HOME ambiente para o diretório onde você instalou o JDK.
    O JDK 1.6 inclui o programa wsimport usado no arquivo build.xml. O JDK 1.5 não inclui esse programa.
  3. Instale o JAX-WS no computador cliente. (Consulte API Java para XML Web Services .)
  4. Use JAX-WS e Apache Ant para gerar classes proxy Java. Crie um script de construção Ant para realizar essa tarefa. O script a seguir é um exemplo de script de construção Ant chamado build.xml:
     <?xml version="1.0" encoding="UTF-8"?>
     
     <project basedir="." default="compile">
     
     <property name="port" value="8080" />
     <property name="host" value="localhost" />
     <property name="username" value="administrator" />
     <property name="password" value="password" />
     <property name="tests" value="all" />
     
     <target name="clean" >
            <delete dir="classes" />
     </target>
     
     <target name="wsdl" depends="clean">
            <mkdir dir="classes"/>
            <exec executable="wsimport" failifexecutionfails="false" failonerror="true" resultproperty="foundWSIMPORT">
                <arg line="-keep -d classes https://${host}:${port}/soap/services/EncryptionService?wsdl&lc_version=9.0.1"/>
            </exec>
            <fail unless="foundWSIMPORT">
               !!! Failed to execute JDK's wsimport tool. Make sure that JDK 1.6 (or later) is on your PATH !!!
            </fail>
     </target>
     
     <target name="compile" depends="clean, wsdl" >
          <javac destdir="./classes" fork="true" debug="true">
             <src path="./src"/>
          </javac>
     </target>
     
     <target name="run">
          <java classname="Client" fork="yes" failonerror="true" maxmemory="200M">
             <classpath>
               <pathelement location="./classes"/>
             </classpath>
             <arg value="${port}"/>
             <arg value="${host}"/>
             <arg value="${username}"/>
             <arg value="${password}"/>
             <arg value="${tests}"/>
          </java>
     </target>
     </project>
    
    
    Dentro desse script de construção Ant, observe que a url propriedade está definida para fazer referência ao serviço de criptografia WSDL executado em localhost. As propriedades username e password devem ser definidas com um nome de usuário e senha válidos para formulários AEM. Observe que o URL contém o lc_version atributo. Sem especificar a lc_version opção, não é possível invocar novas operações do serviço AEM Forms.
    Substitua EncryptionService pelo nome do serviço AEM Forms que você deseja chamar usando classes proxy Java. Por exemplo, para criar classes proxy Java para o serviço Rights Management, especifique:
     http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
    
    
  5. Crie um arquivo BAT para executar o script de criação Ant. O seguinte comando pode ser localizado em um arquivo BAT responsável pela execução do script de compilação Ant:
     ant -buildfile "build.xml" wsdl
    
    
    Coloque o script de criação ANT no diretório C:\Program Files\Java\jaxws-ri\bin directory. O script grava os arquivos JAVA no .pasta /classes. O script gera arquivos JAVA que podem chamar o serviço.
  6. Empacote os arquivos JAVA em um arquivo JAR. Se você estiver trabalhando no Eclipse, siga estas etapas:
    • Crie um novo projeto Java que seja usado para disponibilizar os arquivos JAVA proxy em um arquivo JAR.
    • Crie uma pasta de origem no projeto.
    • Crie um com.adobe.idp.services pacote na pasta Origem.
    • Selecione o com.adobe.idp.services pacote e importe os arquivos JAVA da pasta adobe/idp/services para o pacote.
    • Se necessário, crie um org/apache/xml/xmlsoap pacote na pasta Origem.
    • Selecione a pasta de origem e importe os arquivos JAVA da pasta org/apache/xml/xmlsoap.
    • Defina o nível de conformidade do compilador Java como 5.0 ou superior.
    • Construa o projeto.
    • Exporte o projeto como um arquivo JAR.
    • Importe este arquivo JAR no caminho de classe de um projeto cliente. Além disso, importe todos os arquivos JAR localizados em <Diretório de instalação>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty.
    Todos os start rápidos do serviço da Web Java (exceto o serviço de Formulários) localizados em Programação com formulários AEM criam arquivos proxy Java usando JAX-WS. Além disso, todos os start rápidos do serviço da Web Java usam SwaRef. (Consulte Invocar formulários AEM usando SwaRef .)
Consulte também:

Criação de classes proxy Java usando o Apache Axis

Você pode usar a ferramenta Apache Axis WSDL2Java para converter um serviço Forms em classes proxy Java. Essas classes permitem que você chame operações do serviço Forms. Usando o Apache Ant, você pode gerar arquivos da biblioteca do Axis a partir de um WSDL de serviço. Você pode baixar o Apache Axis no URL https://ws.apache.org/axis/ .
Os start rápidos do serviço da Web associados ao serviço Forms usam classes proxy Java criadas usando o Apache Axis. Os start rápidos do serviço da Web Forms também usam Base64 como tipo de codificação. (Consulte Start rápidos da API do Forms Service.)
Você pode gerar arquivos da biblioteca Java Axis executando as seguintes etapas:
  1. Instale o Apache Ant no computador cliente. Ele está disponível em https://ant.apache.org/bindownload.cgi .
    • Adicione o diretório bin ao caminho da classe.
    • Defina a variável de ANT_HOME ambiente para o diretório onde você instalou o Ant.
  2. Instale o Apache Axis 1.4 no computador cliente. Ele está disponível em https://ws.apache.org/axis/ .
  3. Configure o caminho da classe para usar os arquivos Axis JAR no cliente de serviço da Web, conforme descrito nas instruções de instalação do Axis em https://ws.apache.org/axis/java/install.html .
  4. Use a ferramenta Apache WSDL2Java no Axis para gerar classes proxy Java. Crie um script de construção Ant para realizar essa tarefa. O script a seguir é um exemplo de script de construção Ant chamado build.xml:
     <?xml version="1.0"?>
     <project name="axis-wsdl2java">
     
     <path id="axis.classpath">
     <fileset dir="C:\axis-1_4\lib" >
         <include name="**/*.jar" />
     </fileset>
     </path>
     
     <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" />
     
     <target name="encryption-wsdl2java-client" description="task">
     <axis-wsdl2java
         output="C:\JavaFiles"
         testcase="false"
         serverside="false"
         verbose="true"
         username="administrator"
         password="password"
         url="http://localhost:8080/soap/services/EncryptionService?wsdl&lc_version=9.0.1" >
     </axis-wsdl2java>
     </target>
     
     </project>
    
    
    Dentro desse script de construção Ant, observe que a url propriedade está definida para fazer referência ao serviço de criptografia WSDL executado em localhost. As propriedades username e password devem ser definidas com um nome de usuário e senha válidos para formulários AEM.
  5. Crie um arquivo BAT para executar o script de criação Ant. O seguinte comando pode ser localizado em um arquivo BAT responsável pela execução do script de compilação Ant:
     ant -buildfile "build.xml" encryption-wsdl2java-client
    
    
    Os arquivos JAVA são gravados na propriedade C:\JavaFiles folder as specified by the output . Para chamar com êxito o serviço Forms, importe esses arquivos JAVA para o caminho da classe.
    Por padrão, esses arquivos pertencem a um pacote Java chamado com.adobe.idp.services . É recomendável colocar esses arquivos JAVA em um arquivo JAR. Em seguida, importe o arquivo JAR para o caminho de classe do aplicativo cliente.
    Há diferentes maneiras de colocar arquivos .JAVA em um JAR. Uma maneira é usar um Java IDE como o Eclipse. Crie um projeto Java e crie um com.adobe.idp.services pacote (todos os arquivos .JAVA pertencem a este pacote). Em seguida, importe todos os arquivos .JAVA para o pacote. Por fim, exporte o projeto como um arquivo JAR.
  6. Altere o URL na EncryptionServiceLocator classe para especificar o tipo de codificação. Por exemplo, para usar base64, especifique ?blob=base64 para garantir que o BLOB objeto retorne dados binários. Ou seja, na EncryptionServiceLocator classe, localize a seguinte linha de código:
     http://localhost:8080/soap/services/EncryptionService;
    
    
    e alterá-lo para:
     http://localhost:8080/soap/services/EncryptionService?blob=base64;
    
    
  7. Adicione os seguintes arquivos Axis JAR ao caminho de classe do seu projeto Java:
    • activation.jar
    • axis.jar
    • commons-codec-1.3.jar
    • commons-collections-3.1.jar
    • commons-discovery.jar
    • commons-logging.jar
    • dom3-xml-apis-2.5.0.jar
    • jai_imageio.jar
    • jaxen-1.1-beta-9.jar
    • jaxrpc.jar
    • log4j.jar
    • mail.jar
    • saaj.jar
    • wsdl4j.jar
    • xalan.jar
    • xbean.jar
    • xercesImpl.jar
    Esses arquivos JAR estão no [install directory]/Adobe/Adobe Experience Manager Forms/sdk/lib/thirdparty diretório.
Consulte também:

Invocar formulários AEM usando a codificação Base64

Você pode chamar um serviço de Formulários AEM usando a codificação Base64. A codificação Base64 codifica anexos enviados com uma solicitação de chamada de serviço da Web. Ou seja, BLOB os dados são codificados em Base64, não toda a mensagem SOAP.
"Invocar formulários AEM usando a codificação Base64" discute chamar o seguinte processo de vida curta do AEM Forms nomeado MyApplication/EncryptDocument usando a codificação Base64.
Esse processo não se baseia em um processo de formulários AEM existente. Para acompanhar o exemplo de código, crie um processo chamado MyApplication/EncryptDocument usando o Workbench. (Consulte Usando o Workbench .)
Quando esse processo é chamado, ele executa as seguintes ações:
  1. Obtém o documento PDF não protegido passado para o processo. Esta ação se baseia na SetValue operação. O parâmetro de entrada desse processo é uma variável de document processo chamada inDoc .
  2. Criptografa o documento PDF com uma senha. Esta ação se baseia na PasswordEncryptPDF operação. O documento PDF criptografado por senha é retornado em uma variável de processo chamada outDoc .

Criação de um assembly de cliente .NET que usa a codificação Base64

Você pode criar um assembly de cliente .NET para chamar um serviço do Forms de um projeto do Microsoft Visual Studio .NET. Para criar um assembly de cliente .NET que use a codificação base64, execute as seguintes etapas:
  1. Crie uma classe proxy com base em um URL de invocação do AEM Forms.
  2. Crie um projeto do Microsoft Visual Studio .NET que produza o assembly do cliente .NET.
Criação de uma classe proxy
Você pode criar uma classe proxy usada para criar o assembly do cliente .NET usando uma ferramenta que acompanha o Microsoft Visual Studio. O nome da ferramenta é wsdl.exe e está localizado na pasta de instalação do Microsoft Visual Studio. Para criar uma classe proxy, abra o prompt de comando e navegue até a pasta que contém o arquivo wsdl.exe. Para obter mais informações sobre a ferramenta wsdl.exe, consulte a Ajuda do MSDN.
Digite o seguinte comando no prompt de comando:
 wsdl https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Por padrão, essa ferramenta cria um arquivo CS na mesma pasta que se baseia no nome do WSDL. Nessa situação, ele cria um arquivo CS chamado EncryptDocumentService.cs . Use esse arquivo CS para criar um objeto proxy que permite chamar o serviço especificado no URL de invocação.
Altere o URL na classe proxy para incluir ?blob=base64 a fim de garantir que o BLOB objeto retorne dados binários. Na classe proxy, localize a seguinte linha de código:
 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument";

e alterá-lo para:
 "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";

A seção Invocar formulários AEM usando codificação Base64 usa MyApplication/EncryptDocument como exemplo. Se você estiver criando um assembly de cliente .NET para outro serviço do Forms, substitua-o MyApplication/EncryptDocument pelo nome do serviço.
Desenvolvendo o assembly do cliente .NET
Crie um projeto da Biblioteca de classes do Visual Studio que produz um assembly de cliente .NET. O arquivo CS criado usando wsdl.exe pode ser importado para este projeto. Este projeto produz um arquivo DLL (o assembly do cliente .NET) que você pode usar em outros projetos do Visual Studio .NET para chamar um serviço.
  1. Start Microsoft Visual Studio .NET.
  2. Crie um projeto de Biblioteca de classes e nomeie-o DocumentService.
  3. Importe o arquivo CS que você criou usando wsdl.exe.
  4. No menu Projeto , selecione Adicionar referência .
  5. Na caixa de diálogo Adicionar referência, selecione System.Web.Services.dll .
  6. Click Select and then click OK .
  7. Compile e crie o projeto.
Este procedimento cria um assembly de cliente .NET chamado DocumentService.dll que você pode usar para enviar solicitações SOAP ao MyApplication/EncryptDocument serviço.
Certifique-se de ter adicionado ?blob=base64 ao URL na classe proxy usada para criar o assembly do cliente .NET. Caso contrário, não será possível recuperar dados binários do BLOB objeto.
Referência ao assembly do cliente .NET
Coloque seu assembly cliente .NET recém criado no computador onde você está desenvolvendo seu aplicativo cliente. Depois de colocar o assembly do cliente .NET em um diretório, você pode referenciá-lo a partir de um projeto. Consulte também a System.Web.Services biblioteca do seu projeto. Se você não fizer referência a esta biblioteca, não poderá usar o assembly do cliente .NET para chamar um serviço.
  1. No menu Projeto , selecione Adicionar referência .
  2. Click the .NET tab.
  3. Clique em Procurar e localize o arquivo DocumentService.dll.
  4. Click Select and then click OK .
Invocar um serviço usando um assembly de cliente .NET que usa codificação Base64
Você pode chamar o MyApplication/EncryptDocument serviço (que foi criado no Workbench) usando um assembly de cliente .NET que usa a codificação Base64. Para chamar o MyApplication/EncryptDocument serviço, execute as seguintes etapas:
  1. Crie um assembly de cliente Microsoft .NET que consuma o MyApplication/EncryptDocument serviço WSDL.
  2. Crie um projeto cliente do Microsoft .NET. Faça referência ao assembly do cliente Microsoft .NET no projeto do cliente. Consulte também System.Web.Services .
  3. Usando o assembly do cliente Microsoft .NET, crie um MyApplication_EncryptDocumentService objeto chamando seu construtor padrão.
  4. Defina a propriedade MyApplication_EncryptDocumentService do objeto Credentials com um System.Net.NetworkCredential objeto. No System.Net.NetworkCredential construtor, especifique um nome de usuário para formulários AEM e a senha correspondente. Defina valores de autenticação para permitir que seu aplicativo cliente .NET troque mensagens SOAP com êxito com o AEM Forms.
  5. Crie um BLOB objeto usando seu construtor. O BLOB objeto é usado para armazenar um documento PDF enviado para o MyApplication/EncryptDocument processo.
  6. Crie um System.IO.FileStream objeto chamando seu construtor. Passe um valor de string que representa o local do arquivo do documento PDF e o modo no qual o arquivo deve ser aberto.
  7. Crie uma matriz de bytes que armazene o conteúdo do System.IO.FileStream objeto. É possível determinar o tamanho da matriz de bytes obtendo a propriedade do System.IO.FileStream objeto Length .
  8. Preencha a matriz de bytes com dados de fluxo chamando o método do System.IO.FileStream objeto Read . Passe a matriz de bytes, a posição inicial e o comprimento do fluxo para ler.
  9. Preencha o BLOB objeto atribuindo sua binaryData propriedade ao conteúdo da matriz de bytes.
  10. Chame o MyApplication/EncryptDocument processo invocando o MyApplication_EncryptDocumentService método do invoke objeto e transmitindo o BLOB objeto que contém o documento PDF. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  11. Crie um System.IO.FileStream objeto chamando seu construtor e transmitindo um valor de string que representa o local do arquivo do documento criptografado por senha.
  12. Crie uma matriz de bytes que armazene o conteúdo de dados do BLOB objeto retornado pelo MyApplicationEncryptDocumentService método do invoke objeto. Preencha a matriz de bytes obtendo o valor do membro de BLOB dados do binaryData objeto.
  13. Crie um System.IO.BinaryWriter objeto chamando seu construtor e transmitindo o System.IO.FileStream objeto.
  14. Grave o conteúdo da matriz de bytes em um arquivo PDF chamando o método do System.IO.BinaryWriter objeto Write e transmitindo a matriz de bytes.

Invocar um serviço usando classes proxy Java e codificação Base64

Você pode chamar um serviço AEM Forms usando classes proxy Java e Base64. Para chamar o MyApplication/EncryptDocument serviço usando classes proxy Java, execute as seguintes etapas:
  1. Crie classes proxy Java usando JAX-WS que consome o MyApplication/EncryptDocument serviço WSDL. Use o seguinte terminal WSDL:
    https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    Substitua hiro-xp pelo endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms.
  2. Empacote as classes proxy Java criadas usando JAX-WS em um arquivo JAR.
  3. Inclua o arquivo Java proxy JAR e os arquivos JAR localizados no seguinte caminho:
    <Diretório de Instalação>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    no caminho de classe do projeto do cliente Java.
  4. Crie um MyApplicationEncryptDocumentService objeto usando seu construtor.
  5. Crie um MyApplicationEncryptDocument objeto chamando o MyApplicationEncryptDocumentService método do getEncryptDocument objeto.
  6. Defina os valores de conexão necessários para chamar o AEM Forms atribuindo valores aos seguintes membros de dados:
    • Atribua o endpoint WSDL e o tipo de codificação ao campo do javax.xml.ws.BindingProvider objeto ENDPOINT_ADDRESS_PROPERTY . Para chamar o MyApplication/EncryptDocument serviço usando a codificação Base64, especifique o seguinte valor de URL:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64
    • Atribua o usuário de formulários do AEM ao javax.xml.ws.BindingProvider campo USERNAME_PROPERTY do objeto.
    • Atribua o valor da senha correspondente ao javax.xml.ws.BindingProvider campo do PASSWORD_PROPERTY objeto.
    O exemplo de código a seguir mostra esta lógica de aplicativo:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=base64";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Recupere o documento PDF para enviar ao MyApplication/EncryptDocument processo criando um java.io.FileInputStream objeto usando seu construtor. Passe um valor de string que especifica o local do documento PDF.
  8. Crie uma matriz de bytes e preencha-a com o conteúdo do java.io.FileInputStream objeto.
  9. Crie um BLOB objeto usando seu construtor.
  10. Preencha o BLOB objeto chamando seu setBinaryData método e transmitindo a matriz de bytes. O BLOB setBinaryData objeto é o método a ser chamado ao usar a codificação Base64. Consulte Fornecimento de objetos BLOB em solicitações de serviço.
  11. Chame o MyApplication/EncryptDocument processo invocando o MyApplicationEncryptDocument método do invoke objeto. Passe o BLOB objeto que contém o documento PDF. O método invoke retorna um BLOB objeto que contém o documento PDF criptografado.
  12. Crie uma matriz de bytes que contenha o documento PDF criptografado chamando o BLOB método do getBinaryData objeto.
  13. Salve o documento PDF criptografado como um arquivo PDF. Grave a matriz de bytes em um arquivo.
Consulte também:

Invocar formulários AEM usando MTOM

Você pode chamar os serviços do AEM Forms usando o serviço da Web padrão MTOM. Esse padrão define como os dados binários, como um documento PDF, são transmitidos pela Internet ou pela intranet. Um recurso do MTOM é o uso do XOP:Include elemento. Esse elemento é definido na especificação XML Binary Otimized Packaging (XOP) para fazer referência aos anexos binários de uma mensagem SOAP.
A discussão aqui é sobre o uso do MTOM para chamar o seguinte processo de vida curta do AEM Forms chamado MyApplication/EncryptDocument .
Esse processo não se baseia em um processo de formulários AEM existente. Para acompanhar o exemplo de código, crie um processo chamado MyApplication/EncryptDocument usando o Workbench. (Consulte Usando o Workbench .)
Quando esse processo é chamado, ele executa as seguintes ações:
  1. Obtém o documento PDF não protegido passado para o processo. Esta ação se baseia na SetValue operação. O parâmetro de entrada desse processo é uma variável de document processo chamada inDoc .
  2. Criptografa o documento PDF com uma senha. Esta ação se baseia na PasswordEncryptPDF operação. O documento PDF criptografado por senha é retornado em uma variável de processo chamada outDoc .
O suporte a MTOM foi adicionado no AEM Forms, versão 9.
Os aplicativos baseados no JAX WS que usam o protocolo de transmissão MTOM estão limitados a 25 MB de dados enviados e recebidos. Essa limitação se deve a um erro no JAX-WS. Se o tamanho combinado dos arquivos enviados e recebidos exceder 25 MB, use o protocolo de transmissão SwaRef em vez do MTOM. Caso contrário, existe uma possibilidade de OutOfMemory exceção.
A discussão aqui é sobre o uso do MTOM em um projeto do Microsoft .NET para chamar os serviços do AEM Forms. A estrutura .NET usada é 3.5, e o ambiente de desenvolvimento é Visual Studio 2008. Se você tiver o WSE (Web Service Enhancements - Melhorias do serviço Web) instalado no seu computador de desenvolvimento, remova-o. A estrutura .NET 3.5 suporta uma estrutura SOAP chamada Windows Communication Foundation (WCF). Ao invocar o AEM Forms usando MTOM, somente WCF (não WSE) é suportado.

Criar um projeto .NET que chame um serviço usando MTOM

Você pode criar um projeto do Microsoft .NET que possa chamar um serviço do AEM Forms usando serviços da Web. Primeiro, crie um projeto do Microsoft .NET usando o Visual Studio 2008. Para chamar um serviço de Formulários AEM, crie uma Referência de serviço para o serviço de Formulários AEM que você deseja chamar em seu projeto. Ao criar uma Referência de serviço, especifique um URL para o serviço de Formulários AEM:
 http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1

Substitua localhost pelo endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms. Substitua MyApplication/EncryptDocument pelo nome do serviço AEM Forms para chamar. Por exemplo, para chamar uma operação de Gerenciamento de Direitos, especifique:
http://localhost:8080/soap/services/RightsManagementService?WSDL&lc_version=9.0.1
A lc_version opção garante que a funcionalidade do AEM Forms, como MTOM, esteja disponível. Sem especificar a lc_version opção, não é possível chamar os formulários AEM usando MTOM.
Depois de criar uma Referência de serviço, os tipos de dados associados ao serviço de Formulários AEM ficam disponíveis para uso em seu projeto .NET. Para criar um projeto .NET que chame um serviço AEM Forms, execute as seguintes etapas:
  1. Crie um projeto .NET usando o Microsoft Visual Studio 2008.
  2. No menu Projeto , selecione Adicionar referência de serviço.
  3. Na caixa de diálogo Endereço , especifique o WSDL para o serviço de formulários AEM. Por exemplo,
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
  4. Click Go and then click OK .

Invocar um serviço usando MTOM em um projeto .NET

Considere o MyApplication/EncryptDocument processo que aceita um documento PDF não protegido e retorna um documento PDF criptografado por senha. Para invocar o MyApplication/EncryptDocument processo (que foi criado no Workbench) usando o MTOM, execute as seguintes etapas:
  1. Crie um projeto do Microsoft .NET.
  2. Crie um MyApplication_EncryptDocumentClient objeto usando seu construtor padrão.
  3. Crie um MyApplication_EncryptDocumentClient.Endpoint.Address objeto usando o System.ServiceModel.EndpointAddress construtor. Passe um valor de string que especifica o WSDL para o serviço AEM Forms e o tipo de codificação:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=mtom
    
    
    Não é necessário usar o lc_version atributo. Esse atributo é usado ao criar uma referência de serviço. No entanto, certifique-se de especificar ?blob=mtom .
    Substitua hiro-xp pelo endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms.
  4. Crie um System.ServiceModel.BasicHttpBinding objeto obtendo o valor do membro de EncryptDocumentClient.Endpoint.Binding dados. Converta o valor de retorno em BasicHttpBinding .
  5. Defina o membro de System.ServiceModel.BasicHttpBinding dados do MessageEncoding objeto como WSMessageEncoding.Mtom . Esse valor garante que o MTOM seja usado.
  6. Ative a autenticação HTTP básica executando as seguintes tarefas:
    • Atribua o nome de usuário dos formulários AEM ao membro de dados MyApplication_EncryptDocumentClient.ClientCredentials.UserName.UserName .
    • Atribua o valor da senha correspondente ao membro de dados MyApplication_EncryptDocumentClient.ClientCredentials.UserName.Password .
    • Atribua o valor constante HttpClientCredentialType.Basic ao membro de dados BasicHttpBindingSecurity.Transport.ClientCredentialType .
    • Atribua o valor constante BasicHttpSecurityMode.TransportCredentialOnly ao membro de dados BasicHttpBindingSecurity.Security.Mode .
    O exemplo de código a seguir mostra essas tarefas.
     //Enable BASIC HTTP authentication
     encryptProcess.ClientCredentials.UserName.UserName = "administrator";
     encryptProcess.ClientCredentials.UserName.Password = "password";
     b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
     b.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
     b.MaxReceivedMessageSize = 4000000;
     b.MaxBufferSize = 4000000;
     b.ReaderQuotas.MaxArrayLength = 4000000;
    
    
  7. Crie um BLOB objeto usando seu construtor. O BLOB objeto é usado para armazenar um documento PDF para passar para o MyApplication/EncryptDocument processo.
  8. Crie um System.IO.FileStream objeto chamando seu construtor. Passe um valor de string que representa o local do arquivo do documento PDF e o modo no qual o arquivo deve ser aberto.
  9. Crie uma matriz de bytes que armazene o conteúdo do System.IO.FileStream objeto. É possível determinar o tamanho da matriz de bytes obtendo a propriedade do System.IO.FileStream objeto Length .
  10. Preencha a matriz de bytes com dados de fluxo chamando o método do System.IO.FileStream objeto Read . Passe a matriz de bytes, a posição inicial e o comprimento do fluxo para ler.
  11. Preencha o BLOB objeto atribuindo seu membro MTOM de dados ao conteúdo da matriz de bytes.
  12. Chame o MyApplication/EncryptDocument processo invocando o MyApplication_EncryptDocumentClient método do invoke objeto. Passe o BLOB objeto que contém o documento PDF. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  13. Crie um System.IO.FileStream objeto chamando seu construtor e transmitindo um valor de string que representa o local do arquivo do documento PDF protegido.
  14. Crie uma matriz de bytes que armazene o conteúdo de dados do BLOB objeto retornado pelo invoke método. Preencha a matriz de bytes obtendo o valor do membro de BLOB dados do MTOM objeto.
  15. Crie um System.IO.BinaryWriter objeto chamando seu construtor e transmitindo o System.IO.FileStream objeto.
  16. Grave o conteúdo da matriz de bytes em um arquivo PDF chamando o método do System.IO.BinaryWriter objeto Write e transmitindo a matriz de bytes.
A maioria das operações do serviço AEM Forms tem um start rápido MTOM. Você pode visualização esses start rápidos na seção de start rápido correspondente de um serviço. Por exemplo, para ver a seção start rápido de Saída, consulte Start rápidos da API de serviço de saída.
Consulte também:

Invocar o AEM Forms usando SwaRef

Você pode chamar os serviços do AEM Forms usando SwaRef. O conteúdo do elemento wsi:swaRef XML é enviado como um anexo dentro de um corpo SOAP que armazena a referência ao anexo. Ao chamar um serviço de Formulários usando SwaRef, crie classes proxy Java usando a API Java para serviços da Web XML (JAX-WS). (Consulte API Java para XML Web Services .)
A discussão aqui é sobre invocar o seguinte processo de vida curta do Forms nomeado MyApplication/EncryptDocument usando SwaRef.
Esse processo não se baseia em um processo de formulários AEM existente. Para acompanhar o exemplo de código, crie um processo chamado MyApplication/EncryptDocument usando o Workbench. (Consulte Usando o Workbench .)
Quando esse processo é chamado, ele executa as seguintes ações:
  1. Obtém o documento PDF não protegido passado para o processo. Esta ação se baseia na SetValue operação. O parâmetro de entrada desse processo é uma variável de document processo chamada inDoc .
  2. Criptografa o documento PDF com uma senha. Esta ação se baseia na PasswordEncryptPDF operação. O documento PDF criptografado por senha é retornado em uma variável de processo chamada outDoc .
Suporte a SwaRef adicionado ao AEM Forms
A discussão abaixo é sobre como invocar os serviços do Forms usando SwaRef em um aplicativo cliente Java. O aplicativo Java usa classes proxy criadas usando JAX-WS.

Chame um serviço usando arquivos da biblioteca JAX-WS que usam SwaRef

Para invocar o MyApplication/EncryptDocument processo usando arquivos proxy Java criados usando JAX-WS e SwaRef, execute as seguintes etapas:
  1. Crie classes proxy Java usando JAX-WS que consome o MyApplication/EncryptDocument serviço WSDL. Use o seguinte terminal WSDL:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Para obter informações, consulte Criação de classes proxy Java usando JAX-WS .
    Substitua hiro-xp pelo endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms.
  2. Empacote as classes proxy Java criadas usando JAX-WS em um arquivo JAR.
  3. Inclua o arquivo Java proxy JAR e os arquivos JAR localizados no seguinte caminho:
    <Diretório de Instalação>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    no caminho de classe do projeto do cliente Java.
  4. Crie um MyApplicationEncryptDocumentService objeto usando seu construtor.
  5. Crie um MyApplicationEncryptDocument objeto chamando o MyApplicationEncryptDocumentService método do getEncryptDocument objeto.
  6. Defina os valores de conexão necessários para chamar o AEM Forms atribuindo valores aos seguintes membros de dados:
    • Atribua o endpoint WSDL e o tipo de codificação ao campo do javax.xml.ws.BindingProvider objeto ENDPOINT_ADDRESS_PROPERTY . Para chamar o MyApplication/EncryptDocument serviço usando a codificação SwaRef, especifique o seguinte valor de URL:
       https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref
    • Atribua o usuário de formulários do AEM ao javax.xml.ws.BindingProvider campo USERNAME_PROPERTY do objeto.
    • Atribua o valor da senha correspondente ao javax.xml.ws.BindingProvider campo do PASSWORD_PROPERTY objeto.
    O exemplo de código a seguir mostra esta lógica de aplicativo:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=swaref";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Recupere o documento PDF para enviar ao MyApplication/EncryptDocument processo criando um java.io.File objeto usando seu construtor. Passe um valor de string que especifica o local do documento PDF.
  8. Crie um javax.activation.DataSource objeto usando o FileDataSource construtor. Passe o java.io.File objeto.
  9. Crie um javax.activation.DataHandler objeto usando seu construtor e transmitindo o javax.activation.DataSource objeto.
  10. Crie um BLOB objeto usando seu construtor.
  11. Preencha o BLOB objeto chamando seu setSwaRef método e transmitindo o javax.activation.DataHandler objeto.
  12. Chame o MyApplication/EncryptDocument processo invocando o MyApplicationEncryptDocument método do invoke objeto e transmitindo o BLOB objeto que contém o documento PDF. O método invoke retorna um BLOB objeto que contém um documento PDF criptografado.
  13. Preencha um javax.activation.DataHandler objeto chamando o BLOB método do getSwaRef objeto.
  14. Converta o javax.activation.DataHandler objeto em uma java.io.InputSteam instância chamando o javax.activation.DataHandler método do getInputStream objeto.
  15. Grave a java.io.InputSteam instância em um arquivo PDF que representa o documento PDF criptografado.
A maioria das operações do serviço do AEM Forms tem um start rápido SwaRef. Você pode visualização esses start rápidos na seção de start rápido correspondente de um serviço. Por exemplo, para ver a seção start rápido de Saída, consulte Start rápidos da API de serviço de saída.
Consulte também:

Invocar formulários AEM usando dados BLOB em HTTP

Você pode chamar os serviços do AEM Forms usando serviços da Web e transmitindo dados do BLOB por HTTP. Passar dados BLOB por HTTP é uma técnica alternativa em vez de usar codificação base64, DIME ou MIME. Por exemplo, você pode passar dados por HTTP em um projeto do Microsoft .NET que usa o Web Service Enhanced 3.0, que não é compatível com DIME ou MIME. Ao usar dados BLOB em HTTP, os dados de entrada são carregados antes que o serviço de formulários AEM seja chamado.
"Invocar formulários AEM usando dados BLOB em HTTP" discute chamar o seguinte processo de vida curta do AEM Forms nomeado MyApplication/EncryptDocument transmitindo dados BLOB em HTTP.
Esse processo não se baseia em um processo de formulários AEM existente. Para acompanhar o exemplo de código, crie um processo chamado MyApplication/EncryptDocument usando o Workbench. (Consulte Usando o Workbench .)
Quando esse processo é chamado, ele executa as seguintes ações:
  1. Obtém o documento PDF não protegido passado para o processo. Esta ação se baseia na SetValue operação. O parâmetro de entrada desse processo é uma variável de document processo chamada inDoc .
  2. Criptografa o documento PDF com uma senha. Esta ação se baseia na PasswordEncryptPDF operação. O documento PDF criptografado por senha é retornado em uma variável de processo chamada outDoc .
É recomendável que você esteja familiarizado com Invocar formulários do AEM usando SOAP. (Consulte Invocar formulários AEM usando serviços da Web.)

Criando um assembly de cliente .NET que usa dados via HTTP

Para criar um assembly de cliente que use dados via HTTP, siga o processo especificado em Invocar formulários AEM usando a codificação Base64. No entanto, altere o URL na classe proxy para incluir ?blob=http em vez de ?blob=base64 . Essa ação garante que os dados sejam transmitidos por HTTP. Na classe proxy, localize a seguinte linha de código:
 "http://localhost:8080/soap/services/MyApplication/EncryptDocument";

e alterá-lo para:
 "http://localhost:8080/soap/services/MyApplication/EncryptDocument?blob=http";

Referência ao assembly .NET clienMyApplication/EncryptDocumentt
Coloque seu novo assembly de cliente .NET no computador onde você está desenvolvendo seu aplicativo cliente. Depois de colocar o assembly do cliente .NET em um diretório, você pode referenciá-lo a partir de um projeto. Faça referência à System.Web.Services biblioteca do seu projeto. Se você não fizer referência a esta biblioteca, não poderá usar o assembly do cliente .NET para chamar um serviço.
  1. No menu Projeto , selecione Adicionar referência .
  2. Click the .NET tab.
  3. Clique em Procurar e localize o arquivo DocumentService.dll.
  4. Click Select and then click OK .
Invocar um serviço usando um assembly de cliente .NET que usa dados BLOB em HTTP
Você pode chamar o MyApplication/EncryptDocument serviço (que foi criado no Workbench) usando um assembly de cliente .NET que usa dados via HTTP. Para chamar o MyApplication/EncryptDocument serviço, execute as seguintes etapas:
  1. Crie o assembly do cliente .NET.
  2. Faça referência ao assembly do cliente Microsoft .NET. Crie um projeto cliente do Microsoft .NET. Faça referência ao assembly do cliente Microsoft .NET no projeto do cliente. Consulte também System.Web.Services .
  3. Usando o assembly do cliente Microsoft .NET, crie um MyApplication_EncryptDocumentService objeto chamando seu construtor padrão.
  4. Defina a propriedade MyApplication_EncryptDocumentService do objeto Credentials com um System.Net.NetworkCredential objeto. No System.Net.NetworkCredential construtor, especifique um nome de usuário para formulários AEM e a senha correspondente. Defina valores de autenticação para permitir que seu aplicativo cliente .NET troque mensagens SOAP com êxito com o AEM Forms.
  5. Crie um BLOB objeto usando seu construtor. O BLOB objeto é usado para transmitir dados ao MyApplication/EncryptDocument processo.
  6. Atribua um valor de string ao membro de BLOB dados do remoteURL objeto que especifica o local de URI de um documento PDF a ser enviado para o MyApplication/EncryptDocument serviço.
  7. Chame o MyApplication/EncryptDocument processo chamando o método do MyApplication_EncryptDocumentService objeto e transmitindo o invoke BLOB objeto. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  8. Crie um System.UriBuilder objeto usando seu construtor e transmitindo o valor do membro de BLOB dados do remoteURL objeto retornado.
  9. Converta o System.UriBuilder objeto em um System.IO.Stream objeto. (O Start rápido C# que segue esta lista ilustra como executar esta tarefa.)
  10. Crie uma matriz de bytes e preencha-a com os dados localizados no System.IO.Stream objeto.
  11. Crie um System.IO.BinaryWriter objeto chamando seu construtor e transmitindo o System.IO.FileStream objeto.
  12. Grave o conteúdo da matriz de bytes em um arquivo PDF chamando o método do System.IO.BinaryWriter objeto Write e transmitindo a matriz de bytes.

Invocar um serviço usando classes proxy Java e dados BLOB por HTTP

Você pode chamar um serviço AEM Forms usando classes proxy Java e dados BLOB por HTTP. Para chamar o MyApplication/EncryptDocument serviço usando classes proxy Java, execute as seguintes etapas:
  1. Crie classes proxy Java usando JAX-WS que consome o MyApplication/EncryptDocument serviço WSDL. Use o seguinte terminal WSDL:
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?WSDL&lc_version=9.0.1
    
    
    Para obter informações, consulte Criação de classes proxy Java usando JAX-WS .
    Substitua hiro-xp pelo endereço IP do servidor de aplicativos J2EE que hospeda o AEM Forms.
  2. Empacote as classes proxy Java criadas usando JAX-WS em um arquivo JAR.
  3. Inclua o arquivo Java proxy JAR e os arquivos JAR localizados no seguinte caminho:
    <Diretório de Instalação>\Adobe\Adobe_Experience_Manager_forms\sdk\client-libs\thirdparty
    no caminho de classe do projeto do cliente Java.
  4. Crie um MyApplicationEncryptDocumentService objeto usando seu construtor.
  5. Crie um MyApplicationEncryptDocument objeto chamando o MyApplicationEncryptDocumentService método do getEncryptDocument objeto.
  6. Defina os valores de conexão necessários para chamar o AEM Forms atribuindo valores aos seguintes membros de dados:
    • Atribua o endpoint WSDL e o tipo de codificação ao campo do javax.xml.ws.BindingProvider objeto ENDPOINT_ADDRESS_PROPERTY . Para chamar o MyApplication/EncryptDocument serviço usando a codificação BLOB sobre HTTP, especifique o seguinte valor de URL:
      https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http
    • Atribua o usuário de formulários do AEM ao javax.xml.ws.BindingProvider campo USERNAME_PROPERTY do objeto.
    • Atribua o valor da senha correspondente ao javax.xml.ws.BindingProvider campo do PASSWORD_PROPERTY objeto.
    O exemplo de código a seguir mostra esta lógica de aplicativo:
     //Set connection values required to invoke AEM Forms
     String url = "https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=http";
     String username = "administrator";
     String password = "password";
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username);
     ((BindingProvider) encryptDocClient).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password);
    
    
  7. Crie um BLOB objeto usando seu construtor.
  8. Preencha o BLOB objeto chamando seu setRemoteURL método. Passe um valor de string que especifica o local de URI de um documento PDF a ser enviado para o MyApplication/EncryptDocument serviço.
  9. Chame o MyApplication/EncryptDocument processo invocando o MyApplicationEncryptDocument método do invoke objeto e transmitindo o BLOB objeto que contém o documento PDF. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  10. Crie uma matriz de bytes para armazenar o fluxo de dados que representa o documento PDF criptografado. Chame o BLOB método do objeto getRemoteURL (use o BLOB objeto retornado pelo invoke método).
  11. Crie um java.io.File objeto usando seu construtor. Esse objeto representa o documento PDF criptografado.
  12. Crie um java.io.FileOutputStream objeto usando seu construtor e transmitindo o java.io.File objeto.
  13. Chame o java.io.FileOutputStream método do write objeto. Passe a matriz de bytes que contém o fluxo de dados que representa o documento PDF criptografado.

Invocar o AEM Forms usando DIME

Você pode chamar os serviços do AEM Forms usando SOAP com anexos. O AEM Forms é compatível com os padrões de serviço da Web MIME e DIME. O DIME permite que você envie anexos binários, como documentos PDF, juntamente com solicitações de invocação em vez de codificar o anexo. A seção Invocar formulários do AEM usando DIME discute chamar o seguinte processo de vida curta do AEM Forms chamado MyApplication/EncryptDocument usando DIME.
Quando esse processo é chamado, ele executa as seguintes ações:
  1. Obtém o documento PDF não protegido passado para o processo. Esta ação se baseia na SetValue operação. O parâmetro de entrada desse processo é uma variável de document processo chamada inDoc .
  2. Criptografa o documento PDF com uma senha. Esta ação se baseia na PasswordEncryptPDF operação. O documento PDF criptografado por senha é retornado em uma variável de processo chamada outDoc .
Esse processo não se baseia em um processo de formulários AEM existente. Para acompanhar os exemplos de código, crie um processo chamado MyApplication/EncryptDocument usando o Workbench. (Consulte Usando o Workbench .)
Invocar operações do serviço AEM Forms usando DIME está obsoleto. Recomenda-se a utilização de MTOM. (Consulte Invocar formulários AEM usando MTOM .)

Criação de um projeto .NET que usa DIME

Para criar um projeto .NET que possa chamar um serviço de Formulários usando DIME, execute as seguintes tarefas:
  • Instale os Aprimoramentos 2.0 dos Serviços Web no seu computador de desenvolvimento.
  • Em seu projeto .NET, crie uma referência da Web para o serviço FormsAEM Forms.
Instalação das melhorias de serviços da Web 2.0
Instale os Aprimoramentos 2.0 dos Serviços Web no seu computador de desenvolvimento e integre-os ao Microsoft Visual Studio .NET. Você pode baixar os Aprimoramentos de Serviços Web 2.0 do Centro de Download da Microsoft.
Nesta página da Web, procure por Aprimoramentos de serviços da Web 2.0 e baixe-os no seu computador de desenvolvimento. Este download coloca um arquivo chamado Microsoft WSE 2.0 SPI.msi em seu computador. Execute o programa de instalação e siga as instruções on-line.
Os Aprimoramentos de serviços da Web 2.0 são compatíveis com DIME. A versão compatível do Microsoft Visual Studio é 2003 ao trabalhar com os Aprimoramentos de Serviços Web 2.0. Os Aprimoramentos de serviços da Web 3.0 não são compatíveis com DIME; no entanto, ele suporta MTOM.
Criar uma referência da Web para um serviço do AEM Forms
Depois de instalar o Web Services Enhancements 2.0 no computador de desenvolvimento e criar um projeto do Microsoft .NET, crie uma referência da Web para o serviço Forms. Por exemplo, para criar uma referência da Web para o MyApplication/EncryptDocument processo e supondo que o Forms esteja instalado no computador local, especifique o seguinte URL:
     http://localhost:8080/soap/services/MyApplication/EncryptDocument?WSDL

Depois de criar uma referência da Web, os dois tipos de dados proxy a seguir estão disponíveis para você usar em seu projeto .NET: EncryptDocumentService e EncryptDocumentServiceWse . Para chamar o MyApplication/EncryptDocument processo usando DIME, use o EncryptDocumentServiceWse tipo.
Antes de criar uma referência da Web para o serviço de Formulários, certifique-se de fazer referência às melhorias de serviços da Web 2.0 no seu projeto. (Consulte "Instalando melhorias de serviços da Web 2.0".)
Referência à biblioteca WSE
  1. No menu Projeto, selecione Adicionar referência.
  2. Na caixa de diálogo Adicionar referência, selecione Microsoft.Web.Services2.dll.
  3. Selecione System.Web.Services.dll.
  4. Clique em Selecionar e em OK.
Criar uma referência da Web para um serviço do Forms
  1. No menu Projeto, selecione Adicionar referência da Web.
  2. Na caixa de diálogo URL, especifique o URL para o serviço Forms.
  3. Clique em Ir e em Adicionar referência.
Certifique-se de ativar seu projeto .NET para usar a biblioteca WSE. No Explorador de projetos, clique com o botão direito do mouse no nome do projeto e selecione Ativar WSE 2.0. Verifique se a caixa de seleção na caixa de diálogo exibida está selecionada.
Invocar um serviço usando DIME em um projeto .NET
Você pode chamar um serviço de Formulários usando DIME. Considere o MyApplication/EncryptDocument processo que aceita um documento PDF não protegido e retorna um documento PDF criptografado por senha. Para chamar o MyApplication/EncryptDocument processo usando DIME, execute as seguintes etapas:
  1. Crie um projeto do Microsoft .NET que permita chamar um serviço do Forms usando DIME. Certifique-se de incluir os Aprimoramentos de serviços da Web 2.0 e criar uma referência da Web para o serviço AEM Forms.
  2. Após definir uma referência da Web para o MyApplication/EncryptDocument processo, crie um EncryptDocumentServiceWse objeto usando seu construtor padrão.
  3. Defina o membro de EncryptDocumentServiceWse dados do Credentials objeto com um System.Net.NetworkCredential valor que especifica o nome de usuário e o valor da senha dos formulários AEM.
  4. Crie um Microsoft.Web.Services2.Dime.DimeAttachment objeto usando seu construtor e transmitindo os seguintes valores:
    • Um valor de string que especifica um valor GUID. Você pode obter um valor GUID chamando o System.Guid.NewGuid.ToString método.
    • Um valor de string que especifica o tipo de conteúdo. Como esse processo requer um documento PDF, especifique application/pdf .
    • Um valor TypeFormat lista discriminada. Especifique TypeFormat.MediaType .
    • Um valor de string que especifica o local do documento PDF a ser passado para o processo de formulários AEM.
  5. Crie um BLOB objeto usando seu construtor.
  6. Adicione o anexo DIME ao BLOB objeto atribuindo o valor do membro de Microsoft.Web.Services2.Dime.DimeAttachment dados do Id objeto ao membro de BLOB dados do attachmentID objeto.
  7. Chame o EncryptDocumentServiceWse.RequestSoapContext.Attachments.Add método e passe o Microsoft.Web.Services2.Dime.DimeAttachment objeto.
  8. Chame o MyApplication/EncryptDocument processo chamando o EncryptDocumentServiceWse método do invoke objeto e transmitindo o BLOB objeto que contém o anexo DIME. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  9. Obtenha o valor do identificador de anexo obtendo o valor do membro de BLOB dados do attachmentID objeto retornado.
  10. Iterar pelos anexos localizados em EncryptDocumentServiceWse.ResponseSoapContext.Attachments e usar o valor do identificador de anexo para obter o documento PDF criptografado.
  11. Obtenha um System.IO.Stream objeto obtendo o valor do membro de Attachment dados do Stream objeto.
  12. Crie uma matriz de bytes e passe essa matriz de bytes para o método do System.IO.Stream objeto Read . Esse método preenche a matriz de bytes com um fluxo de dados que representa o documento PDF criptografado.
  13. Crie um System.IO.FileStream objeto chamando seu construtor e transmitindo um valor de string que representa um local de arquivo PDF. Esse objeto representa o documento PDF criptografado.
  14. Crie um System.IO.BinaryWriter objeto chamando seu construtor e transmitindo o System.IO.FileStream objeto.
  15. Grave o conteúdo da matriz de bytes no arquivo PDF chamando o método do System.IO.BinaryWriter objeto Write e transmitindo a matriz de bytes.

Criando classes proxy Java do Apache Axis que usam DIME

Você pode usar a ferramenta Apache Axis WSDL2Java para converter um serviço WSDL em classes proxy Java, para que você possa chamar operações de serviço. Usando o Apache Ant, você pode gerar arquivos de biblioteca do Axis a partir de uma WSDL do serviço AEM Forms que permite chamar o serviço. (Consulte Criação de classes proxy Java usando o Apache Axis .)
A ferramenta Apache Axis WSDL2Java gera arquivos JAVA que contêm métodos usados para enviar solicitações SOAP a um serviço. As solicitações SOAP recebidas por um serviço são decodificadas pelas bibliotecas geradas pelo Axis e retornadas aos métodos e argumentos.
Para chamar o MyApplication/EncryptDocument serviço (que foi criado no Workbench) usando arquivos de biblioteca gerados pelo Axis e DIME, execute as seguintes etapas:
  1. Crie classes proxy Java que consomem o MyApplication/EncryptDocument serviço WSDL usando o Apache Axis. (Consulte Criação de classes proxy Java usando o Apache Axis .)
  2. Inclua as classes proxy Java no caminho da classe.
  3. Crie um MyApplicationEncryptDocumentServiceLocator objeto usando seu construtor.
  4. Crie um URL objeto usando seu construtor e transmitindo um valor de string que especifica a definição WSDL do serviço AEM Forms. Certifique-se de especificar ?blob=dime no final do URL do ponto de extremidade SOAP. Por exemplo, use
     https://hiro-xp:8080/soap/services/MyApplication/EncryptDocument?blob=dime.
    
    
  5. Crie um EncryptDocumentSoapBindingStub objeto chamando seu construtor e transmitindo o MyApplicationEncryptDocumentServiceLocator objeto e o URL objeto.
  6. Defina o valor de nome de usuário e senha dos formulários AEM chamando os métodos EncryptDocumentSoapBindingStub e setUsername setPassword os métodos do objeto.
     encryptionClientStub.setUsername("administrator");
     encryptionClientStub.setPassword("password");
    
    
  7. Recupere o documento PDF para enviar ao MyApplication/EncryptDocument serviço criando um java.io.File objeto. Passe um valor de string que especifica o local do documento PDF.
  8. Crie um javax.activation.DataHandler objeto usando seu construtor e transmitindo um javax.activation.FileDataSource objeto. O javax.activation.FileDataSource objeto pode ser criado usando seu construtor e transmitindo o java.io.File objeto que representa o documento PDF.
  9. Crie um org.apache.axis.attachments.AttachmentPart objeto usando seu construtor e transmitindo o javax.activation.DataHandler objeto.
  10. Anexe o anexo chamando o EncryptDocumentSoapBindingStub método do objeto addAttachment e transmitindo o org.apache.axis.attachments.AttachmentPart objeto.
  11. Crie um BLOB objeto usando seu construtor. Preencha o BLOB objeto com o valor identificador de anexo chamando o método do BLOB objeto setAttachmentID e transmitindo o valor identificador de anexo. Esse valor pode ser obtido chamando o org.apache.axis.attachments.AttachmentPart método do getContentId objeto.
  12. Chame o MyApplication/EncryptDocument processo invocando o EncryptDocumentSoapBindingStub método do invoke objeto. Passe o BLOB objeto que contém o anexo DIME. Esse processo retorna um documento PDF criptografado dentro de um BLOB objeto.
  13. Obtenha o valor do identificador de anexo chamando o método do BLOB objeto retornado getAttachmentID . Esse método retorna um valor de string que representa o valor identificador do anexo retornado.
  14. Recupere os anexos chamando o EncryptDocumentSoapBindingStub método do getAttachments objeto. Esse método retorna uma matriz de Objects que representa os anexos.
  15. Iterar pelos anexos (a Object matriz) e usar o valor do identificador de anexo para obter o documento PDF criptografado. Cada elemento é um org.apache.axis.attachments.AttachmentPart objeto.
  16. Obtenha o javax.activation.DataHandler objeto associado ao anexo chamando o org.apache.axis.attachments.AttachmentPart método do getDataHandler objeto.
  17. Obtenha um java.io.FileStream objeto chamando o javax.activation.DataHandler método do getInputStream objeto.
  18. Crie uma matriz de bytes e passe essa matriz de bytes para o método do java.io.FileStream objeto read . Esse método preenche a matriz de bytes com um fluxo de dados que representa o documento PDF criptografado.
  19. Crie um java.io.File objeto usando seu construtor. Esse objeto representa o documento PDF criptografado.
  20. Crie um java.io.FileOutputStream objeto usando seu construtor e transmitindo o java.io.File objeto.
  21. Chame o java.io.FileOutputStream método do objeto write e passe a matriz de bytes que contém o fluxo de dados que representa o documento PDF criptografado.
Consulte também:

Uso da autenticação baseada em SAML

O AEM Forms oferece suporte a vários modos de autenticação de serviço da Web ao chamar serviços. Um modo de autenticação está especificando um valor de nome de usuário e senha usando um cabeçalho de autorização básico na chamada de serviço da Web. O AEM Forms também é compatível com autenticação baseada em asserção SAML. Quando um aplicativo cliente chama um serviço AEM Forms usando um serviço Web, o aplicativo cliente pode fornecer informações de autenticação de uma das seguintes maneiras:
  • Concessão de credenciais como parte da autorização básica
  • Enviar token de nome de usuário como parte do cabeçalho WS-Security
  • Transmissão de uma asserção SAML como parte do cabeçalho WS-Security
  • Transmissão do token Kerberos como parte do cabeçalho WS-Security
O AEM Forms não oferece suporte à autenticação baseada em certificado padrão, mas oferece suporte à autenticação baseada em certificado em um formulário diferente.
Os start rápidos do serviço da Web em Programação com AEM Forms especificam os valores de nome de usuário e senha para executar a autorização.
A identidade dos usuários de formulários AEM pode ser representada por meio de uma asserção SAML assinada usando uma chave secreta. O código XML a seguir mostra um exemplo de uma asserção SAML.
 <Assertion xmlns="urn:oasis:names:tc:SAML:1.0:assertion"
     xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
     xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
     AssertionID="fd4bd0c87302780e0d9bbfa8726d5bc0" IssueInstant="2008-04-17T13:47:00.720Z" Issuer="LiveCycle"
     MajorVersion="1" MinorVersion="1">
     <Conditions NotBefore="2008-04-17T13:47:00.720Z" NotOnOrAfter="2008-04-17T15:47:00.720Z">
     </Conditions>
     <AuthenticationStatement
         AuthenticationInstant="2008-04-17T13:47:00.720Z"
         AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified">
         <Subject>
             <NameIdentifier NameQualifier="DefaultDom">administrator</NameIdentifier>
             <SubjectConfirmation>
                 <ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:sender-vouches</ConfirmationMethod>
             </SubjectConfirmation>
         </Subject>
     </AuthenticationStatement>
     <ds:Signature >
         <ds:SignedInfo>
             <ds:CanonicalizationMethod Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod>
             <ds:SignatureMethod    Algorithm="https://www.w3.org/2000/09/xmldsig#hmac-sha1"></ds:SignatureMethod>
             <ds:Reference URI="#fd4bd0c87302780e0d9bbfa8726d5bc0">
                 <ds:Transforms>
                     <ds:Transform Algorithm="https://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
                     <ds:Transform Algorithm="https://www.w3.org/2001/10/xml-exc-c14n#">
                         <ec:InclusiveNamespaces
                             PrefixList="code ds kind rw saml samlp typens #default">
                         </ec:InclusiveNamespaces>
                     </ds:Transform>
                 </ds:Transforms>
                 <ds:DigestMethod Algorithm="https://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
                 <ds:DigestValue>hVrtqjWr+VzaVUIpQx0YI9lIjaY=</ds:DigestValue>
             </ds:Reference>
         </ds:SignedInfo>
         <ds:SignatureValue>UMbBb+cUcPtcWDCIhXes4n4FxfU=</ds:SignatureValue>
     </ds:Signature>
 </Assertion>

Esta afirmação de exemplo é emitida para um usuário administrador. Esta asserção contém os seguintes itens visíveis:
  • É válido por uma determinada duração.
  • É emitido para um usuário específico.
  • Está assinado digitalmente. Então qualquer modificação feita a ela quebraria a assinatura.
  • Ele pode ser apresentado ao AEM Forms como um token da identidade do usuário semelhante ao nome de usuário e senha.
Um aplicativo cliente pode recuperar a asserção de qualquer API do AEM Forms AuthenticationManager que retorna um AuthResult objeto. É possível obter uma AuthResult instância executando um dos dois métodos a seguir:
  • Autenticação do usuário usando qualquer um dos métodos de autenticação expostos pela API do AuthenticationManager. Normalmente, se usa o nome de usuário e a senha; no entanto, você também pode usar a autenticação de certificado.
  • Usando o AuthenticationManager.getAuthResultOnBehalfOfUser método. Esse método permite que um aplicativo cliente obtenha um AuthResult objeto para qualquer usuário de formulários AEM.
um usuário de formulários AEM pode ser autenticado usando um token SAML obtido. Essa asserção SAML (fragmento xml) pode ser enviada como parte do cabeçalho WS-Security com a chamada de serviço da Web para autenticação do usuário. Geralmente, um aplicativo cliente autentica um usuário, mas não armazenou as credenciais do usuário. (Ou o usuário fez logon nesse cliente por meio de um mecanismo diferente de usar um nome de usuário e senha.) Nessa situação, o aplicativo cliente deve chamar os AEM Forms e representar um usuário específico que tem permissão para chamar os AEM Forms.
Para representar um usuário específico, chame o AuthenticationManager.getAuthResultOnBehalfOfUser método usando um serviço da Web. Este método retorna uma AuthResult instância que contém a asserção SAML para esse usuário.
Em seguida, use essa asserção SAML para chamar qualquer serviço que exija autenticação. Essa ação envolve enviar a asserção como parte do cabeçalho SOAP. Quando uma chamada de serviço da Web é feita com essa asserção, o AEM Forms identifica o usuário como aquele representado por essa asserção. Ou seja, o usuário especificado na asserção é o usuário que está chamando o serviço.

Uso de classes Apache Axis e autenticação com base em SAML

Você pode chamar um serviço AEM Forms por classes proxy Java que foram criadas usando a biblioteca Axis. (Consulte Criação de classes proxy Java usando o Apache Axis .)
Ao usar o AXIS que usa a autenticação baseada em SAML, registre o manipulador de solicitação e resposta no Axis. O Apache Axis chama o manipulador antes de enviar uma solicitação de invocação para o AEM Forms. Para registrar um manipulador, crie uma classe Java que se estenda org.apache.axis.handlers.BasicHandler .
Criar um AssertionHandler com Eixo
A classe Java a seguir, chamada AssertionHandler.java , mostra um exemplo de uma classe Java que se estende org.apache.axis.handlers.BasicHandler .
 public class AssertionHandler extends BasicHandler {
        public void invoke(MessageContext ctx) throws AxisFault {
            String assertion = (String) ctx.getProperty(LC_ASSERTION);
 
            //no assertion hence nothing to insert
            if(assertion == null) return;
 
            try {
                MessageElement samlElement = new MessageElement(convertToXML(assertion));
                SOAPHeader header = (SOAPHeader) ctx.getRequestMessage().getSOAPHeader();
                //Create the wsse:Security element which would contain the SAML element
                SOAPElement wsseHeader = header.addChildElement("Security", "wsse", WSSE_NS);
                wsseHeader.appendChild(samlElement);
                //remove the actor attribute as in LC we do not specify any actor. This would not remove the actor attribute though
                //it would only remove it from the soapenv namespace
                wsseHeader.getAttributes().removeNamedItem("actor");
            } catch (SOAPException e) {
                throw new AxisFault("Error occured while adding the assertion to the SOAP Header",e);
            }
        }
 }

Registrar o manipulador
Para registrar um manipulador no Axis, crie um arquivo client-config.wsdd. Por padrão, o Axis procura um arquivo com esse nome. O código XML a seguir é um exemplo de um arquivo client-config.wsdd. Consulte a documentação do Eixo para obter mais informações.
 <deployment xmlns="https://xml.apache.org/axis/wsdd/" xmlns:java="https://xml.apache.org/axis/wsdd/providers/java">
     <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender"/>
      <globalConfiguration >
       <requestFlow >
        <handler type="java:com.adobe.idp.um.example.AssertionHandler" />
       </requestFlow >
      </globalConfiguration >
 </deployment>
 

Chamar um serviço AEM Forms
O exemplo de código a seguir chama um serviço AEM Forms usando autenticação baseada em SAML.
 public class ImpersonationExample {
        . . .
        public void  authenticateOnBehalf(String superUsername,String password,
                String canonicalName,String domainName) throws UMException, RemoteException{
            ((org.apache.axis.client.Stub) authenticationManager).setUsername(superUsername);
            ((org.apache.axis.client.Stub) authenticationManager).setPassword(password);
 
            //Step 1 - Invoke the Auth manager api to get an assertion for the user to be impersonated
            AuthResult ar = authenticationManager.getAuthResultOnBehalfOfUser(canonicalName, domainName, null);
            String assertion = ar.getAssertion();
            //Step 2 - Setting the assertion here to be picked later by the AssertionHandler. Note that stubs are not threadSafe
            //hence should not be reused. For this simple example we have made them instance variable but care should be taken
            //regarding the thread safety
            ((javax.xml.rpc.Stub) authorizationManager)._setProperty(AssertionHandler.LC_ASSERTION, assertion);
        }
 
        public Role findRole(String roleId) throws UMException, RemoteException{
            //This api would be invoked under bob's user rights
            return authorizationManager.findRole(roleId);
        }
 
        public static void main(String[] args) throws Exception {
            ImpersonationExample ie = new ImpersonationExample("http://localhost:5555");
            //Get the SAML assertion for the user to impersonate and store it in stub
            ie.authenticateOnBehalf(
                    "administrator", //The Super user which has the required impersonation permission
                    "password", // Password of the super user as referred above
                    "bob", //Cannonical name of the user to impersonate
                    "testdomain" //Domain of the user to impersonate
                    );
 
            Role r = ie.findRole("BASIC_ROLE_ADMINISTRATOR");
            System.out.println("Role "+r.getName());
        }
 }

Uso de um assembly de cliente .NET e autenticação baseada em SAML

Você pode chamar um serviço do Forms usando um assembly de cliente .NET e autenticação baseada em SAML. Para fazer isso, você deve usar o WSE (Web Service Enhancements 3.0). Para obter informações sobre como criar um assembly de cliente .NET que usa WSE, consulte Criar um projeto .NET que usa DIME .
A seção DIME usa WSE 2.0. Para usar a autenticação baseada em SAML, siga as mesmas instruções especificadas no tópico DIME. Entretanto, substitua WSE 2.0 por WSE 3.0. Instale os Aprimoramentos do Web Services 3.0 no seu computador de desenvolvimento e integre-os ao Microsoft Visual Studio .NET. Você pode baixar os Aprimoramentos de Serviços Web 3.0 do Centro de Download da Microsoft.
A arquitetura WSE usa tipos de dados Políticas, Asserções e SecurityToken. Resumidamente, para uma chamada de serviço da Web, especifique uma política. Uma política pode ter várias asserções. Cada asserção pode conter filtros. Um filtro é chamado em determinados estágios em uma chamada de serviço da Web e, nesse momento, ele pode modificar a solicitação SOAP. Para obter detalhes completos, consulte a documentação Aprimoramentos do serviço da Web 3.0.
Criar a asserção e o filtro
O exemplo de código C# a seguir cria classes de filtro e asserção. Este exemplo de código cria um SamlAssertionOutputFilter. Esse filtro é chamado pela estrutura WSE antes de a solicitação SOAP ser enviada para o AEM Forms.
 class LCSamlPolicyAssertion : Microsoft.Web.ServicES4.Design.PolicyAssertion
 {
        public override Microsoft.Web.ServicES4.SoapFilter CreateClientOutputFilter(FilterCreationContext context)
        {
           return new SamlAssertionOutputFilter();
        }
        . . .
 }
 
 
 class SamlAssertionOutputFilter : SendSecurityFilter
 {
        public override void SecureMessage(SoapEnvelope envelope, Security security)
        {
           // Get the SamlToken from the SessionState
           SamlToken samlToken = envelope.Context.Credentials.UltimateReceiver.GetClientToken<SamlToken>();
           security.Tokens.Add(samlToken);
        }
 }

Criar o token SAML
Crie uma classe para representar a asserção SAML. A tarefa principal que essa classe executa é converter valores de dados de uma string para xml e preservar o espaço em branco. Esse xml de asserção é importado posteriormente para a solicitação SOAP.
 class SamlToken : SecurityToken
 {
        public const string SAMLAssertion = "https://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";
        private XmlElement _assertionElement;
 
        public SamlToken(string assertion)
             : base(SAMLAssertion)
        {
           XmlDocument xmlDoc = new XmlDocument();
           //The white space has to be preserved else the digital signature would get broken
           xmlDoc.PreserveWhitespace = true;
           xmlDoc.LoadXml(assertion);
           _assertionElement = xmlDoc.DocumentElement;
         }
 
         public override XmlElement GetXml(XmlDocument document)
         {
            return (XmlElement)document.ImportNode(_assertionElement, true);
         }
        . . .
 }

Chamar um serviço AEM Forms
O exemplo de código C# a seguir chama um serviço de Formulários usando autenticação com base em SAML.
 public class ImpersonationExample
 {
        . . .
        public void AuthenticateOnBehalf(string superUsername, string password, string canonicalName, string domainName)
        {
            //Create a policy for UsernamePassword Token
            Policy usernamePasswordPolicy = new Policy();
            usernamePasswordPolicy.Assertions.Add(new UsernameOverTransportAssertion());
 
            UsernameToken token = new UsernameToken(superUsername, password, PasswordOption.SendPlainText);
            authenticationManager.SetClientCredential(token);
            authenticationManager.SetPolicy(usernamePasswordPolicy);
 
            //Get the SAML assertion for impersonated user
            AuthClient.AuthenticationManagerService.AuthResult ar
                = authenticationManager.getAuthResultOnBehalfOfUser(canonicalName, domainName, null);
            System.Console.WriteLine("Received assertion " + ar.assertion);
 
            //Create a policy for inserting SAML assertion
            Policy samlPolicy = new Policy();
            samlPolicy.Assertions.Add(new LCSamlPolicyAssertion());
            authorizationManager.SetPolicy(samlPolicy);
            //Set the SAML assertion obtained previously as the token
            authorizationManager.SetClientCredential(new SamlToken(ar.assertion));
        }
 
        public Role findRole(string roleId)
        {
            return authorizationManager.findRole(roleId);
        }
 
        static void Main(string[] args)
        {
            ImpersonationExample ie = new ImpersonationExample("http://localhost:5555");
            ie.AuthenticateOnBehalf(
                 "administrator", //The Super user which has the required impersonation permission
                 "password", // Password of the super user as referred above
                 "bob", //Cannonical name of the user to impersonate
                 "testdomain" //Domain of the user to impersonate
                 );
 
         Role r = ie.findRole("BASIC_ROLE_ADMINISTRATOR");
            System.Console.WriteLine("Role "+r.name);
     }
 }