Chamada de AEM Forms usando a API Java invoking-aem-forms-using-the-javaapi
Exemplos e exemplos neste documento são somente para AEM Forms no ambiente JEE.
O AEM Forms pode ser chamado usando a API Java do AEM Forms. Ao usar a API Java do AEM Forms, você pode usar a API de chamada ou as bibliotecas de cliente Java. As bibliotecas de cliente Java estão disponíveis para serviços como o serviço Rights Management. Essas APIs altamente tipificadas permitem desenvolver aplicativos Java que chamam o AEM Forms.
A API de Invocação são classes que estão no pacote com.adobe.idp.dsc
. Usando essas classes, você pode enviar uma solicitação de chamada diretamente para um serviço e lidar com uma resposta de chamada retornada. Use a API de Invocação para chamar processos de vida curta ou longa criados com o Workbench.
A maneira recomendada de chamar um serviço programaticamente é usar uma biblioteca de cliente Java que corresponda ao serviço, em vez da API de chamada. Por exemplo, para chamar o Serviço de criptografia, use a biblioteca do cliente do Serviço de criptografia. Para executar uma operação do Serviço de criptografia, chame um método que pertença ao objeto cliente do Serviço de criptografia. Você pode criptografar um documento PDF com uma senha invocando o método encryptPDFUsingPassword
do objeto EncryptionServiceClient
.
A API Java é compatível com os seguintes recursos:
- Protocolo de transporte RMI para invocação remota
- Transporte de VM para invocação local
- SOAP para invocação remota
- Autenticação diferente, como nome de usuário e senha
- Solicitações de invocação síncrona e assíncrona
Inclusão de arquivos da biblioteca Java do AEM Forms
Chamar processos de longa vida centrados no ser humano
Chamar o AEM Forms usando serviços da Web
Definindo propriedades de conexão
Passagem de dados para serviços da AEM Forms usando a API do Java
Chamar um serviço usando uma biblioteca cliente Java
Chamar um processo de vida curta usando a API de chamada
Criar uma aplicação Web Java que invoca um processo de longa vida centrado no ser humano
Inclusão de arquivos da biblioteca Java do AEM Forms including-aem-forms-java-library-files
Para chamar programaticamente um serviço AEM Forms usando a API Java, inclua os arquivos de biblioteca necessários (arquivos JAR) no classpath do projeto Java. Os arquivos JAR incluídos no classpath do aplicativo cliente dependem de vários fatores:
- O serviço AEM Forms a ser chamado. Um aplicativo cliente pode chamar um ou mais serviços.
- O modo no qual você deseja chamar um serviço AEM Forms. Você pode usar o modo EJB ou SOAP. (Consulte Definindo propriedades de conexão.)
standalone.bat -b <Server IP> -c lc_turnkey.xml
para especificar um IP de servidor para EJB- O servidor de aplicativos J2EE no qual o AEM Forms é implantado.
Arquivos JAR específicos do serviço service-specific-jar-files
A tabela a seguir lista os arquivos JAR necessários para chamar os serviços do AEM Forms.
adobe-repository-client.jar
commons-codec-1.3.jar
<diretório de instalação>/sdk/client-libs/common
<diretório de instalação>/sdk/client-libs\thirdparty
-
adobe-rightsmanagement-client.jar
-
namespace.jar
-
jaxb-api.jar
-
jaxb-impl.jar
-
jaxb-libs.jar
-
jaxb-xjc.jar
-
relaxngDatatype.jar
-
xsdlib.jar
Necessário para invocar o serviço Rights Management.
Se o AEM Forms for implantado no JBoss, inclua todos esses arquivos.
<diretório de instalação>/sdk/client-libs/common
diretório lib específico de JBoss
Modo de conexão e arquivos JAR da aplicação J2EE connection-mode-and-j2ee-application-jar-files
A tabela a seguir lista os arquivos JAR que dependem do modo de conexão e do servidor da aplicação J2EE no qual o AEM Forms é disponibilizado.
-
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
-
jaxen-1.1-beta-9.jar
-
jaxrpc.jar
-
log4j.jar
-
mail.jar
-
saaj.jar
-
wsdl4j.jar
-
xalan.jar
-
xbean.jar
- xercesImpl.jar
- commons-httpclient-3.1.jar
se o AEM Forms for implantado no JBoss Application Server, inclua esse arquivo JAR.
As classes necessárias não serão encontradas pelo carregador de classes se jboss-client.jar e os jars referenciados não forem co-localizados.
Diretório lib do cliente JBoss
Se você implantar a aplicação cliente no mesmo servidor de aplicações J2EE, não será necessário incluir esse arquivo.
Diretório de biblioteca específico do WebLogic
Se você implantar a aplicação cliente no mesmo servidor de aplicações J2EE, não será necessário incluir esse arquivo.
-
com.ibm.ws.admin.client_6.1.0.jar
-
com.ibm.ws.webservices.thinclient_6.1.0.jar
-
se o AEM Forms for implantado no WebSphere Application Server, inclua esses arquivos JAR.
-
(com.ibm.ws.webservices.thinclient_6.1.0.jar é necessário para a invocação do serviço Web).
Diretório de biblioteca específico do WebSphere ([WAS_HOME]/runtimes)
Se você disponibilizar a aplicação cliente no mesmo servidor de aplicações J2EE, não será necessário incluir esses arquivos.
Chamar cenários invoking-scenarios
A tabela a seguir especifica cenários de chamada e lista os arquivos JAR necessários para chamar o AEM Forms com êxito.
-
adobe-livecycle-client.jar
-
adobe-usermanager-client.jar
- jboss-client.jar
- adobe-forms-client.jar
- commons-httpclient-3.1.jar
serviço Forms
Serviço de extensões do Acrobat Reader DC
Serviço de assinatura
-
adobe-livecycle-client.jar
-
adobe-usermanager-client.jar
- jboss-client.jar
- commons-httpclient-3.1.jar
-
adobe-forms-client.jar
-
adobe-reader-extensions-client.jar
-
adobe-signatures-client.jar
-
adobe-livecycle-client.jar
-
adobe-usermanager-client.jar
-
wlclient.jar
-
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
-
adobe-forms-client.jar
serviço Forms
Serviço de extensões do Acrobat Reader DC
Serviço de assinatura
-
adobe-livecycle-client.jar
-
adobe-usermanager-client.jar
-
wlclient.jar
-
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
-
adobe-forms-client.jar
-
adobe-reader-extensions-client.jar
-
adobe-signatures-client.jar
Atualizando arquivos JAR upgrading-jar-files
Se você estiver atualizando do LiveCycle para o AEM Forms, é recomendável incluir os arquivos JAR do AEM Forms no caminho de classe do projeto Java. Por exemplo, se estiver usando serviços como o serviço Rights Management, você encontrará um problema de compatibilidade se não incluir arquivos JAR do AEM Forms no caminho da classe.
Supondo que você esteja atualizando para o AEM Forms. Para usar um aplicativo Java que chama o serviço Rights Management, inclua as versões AEM Forms dos seguintes arquivos JAR:
- adobe-rightsmanagement-client.jar
- adobe-livecycle-client.jar
- adobe-usermanager-client.jar
Consulte também
Chamada de AEM Forms usando a API Java
Definindo propriedades de conexão
Passagem de dados para serviços da AEM Forms usando a API do Java
Chamar um serviço usando uma biblioteca cliente Java
Definindo propriedades de conexão setting-connection-properties
Você define propriedades de conexão para chamar o AEM Forms ao usar a API Java. Ao definir as propriedades de conexão, especifique se os serviços devem ser chamados remota ou localmente e também especifique o modo de conexão e os valores de autenticação. Os valores de autenticação serão necessários se a segurança do serviço estiver habilitada. No entanto, se a segurança do serviço estiver desativada, não será necessário especificar valores de autenticação.
O modo de conexão pode ser SOAP ou EJB. O modo EJB usa o protocolo RMI/IIOP e o desempenho do modo EJB é melhor do que o desempenho do modo SOAP. O modo SOAP é usado para eliminar uma dependência do servidor de aplicativos J2EE ou quando um firewall é localizado entre o AEM Forms e o aplicativo cliente. O modo SOAP usa o protocolo https como transporte subjacente e pode se comunicar entre limites de firewall. Se nem uma dependência do servidor de aplicações J2EE nem um firewall for um problema, é recomendável usar o modo EJB.
Para chamar um serviço AEM Forms com êxito, defina as seguintes propriedades de conexão:
-
DSC_DEFAULT_EJB_ENDPOINT: Se estiver usando o modo de conexão EJB, esse valor representa a URL do servidor de aplicativos J2EE no qual o AEM Forms está implantado. Para chamar o AEM Forms remotamente, especifique o nome do servidor da aplicação J2EE no qual o AEM Forms está implantado. Se o aplicativo cliente estiver localizado no mesmo servidor de aplicativos J2EE, especifique
localhost
. Dependendo do servidor de aplicações J2EE em que o AEM Forms é disponibilizado, especifique um dos seguintes valores:- JBoss:
https://<ServerName>:8080 (default port)
- WebSphere:
iiop://<ServerName>:2809 (default port)
- WebLogic:
t3://<ServerName>:7001 (default port)
- JBoss:
-
DSC_DEFAULT_SOAP_ENDPOINT: se estiver usando o modo de conexão SOAP, esse valor representa o ponto de extremidade para onde uma solicitação de invocação é enviada. Para chamar o AEM Forms remotamente, especifique o nome do servidor da aplicação J2EE no qual o AEM Forms está implantado. Se o aplicativo cliente estiver localizado no mesmo servidor de aplicativos J2EE, você pode especificar
localhost
(por exemplo,http://localhost:8080
.)- O valor de porta
8080
é aplicável se o aplicativo J2EE for JBoss. Se o servidor de aplicativos J2EE for IBM® WebSphere®, use a porta9080
. Da mesma forma, se o servidor de aplicativos J2EE for WebLogic, use a porta7001
. (Esses valores são valores de porta padrão. Se você alterar o valor da porta, use o número da porta aplicável.)
- O valor de porta
-
DSC_TRANSPORT_PROTOCOL: se estiver usando o modo de conexão EJB, especifique
ServiceClientFactoryProperties.DSC_EJB_PROTOCOL
para esse valor. Se você estiver usando o modo de conexão SOAP, especifiqueServiceClientFactoryProperties.DSC_SOAP_PROTOCOL
. -
DSC_SERVER_TYPE: especifica o servidor de aplicativos J2EE no qual o AEM Forms é implantado. Os valores válidos são
JBoss
,WebSphere
,WebLogic
.- Se você definir esta propriedade de conexão como
WebSphere
, o valorjava.naming.factory.initial
será definido comocom.ibm.ws.naming.util.WsnInitCtxFactory
. - Se você definir esta propriedade de conexão como
WebLogic
, o valorjava.naming.factory.initial
será definido comoweblogic.jndi.WLInitialContextFactory
. - Da mesma forma, se você definir essa propriedade de conexão como
JBoss
, o valorjava.naming.factory.initial
será definido comoorg.jnp.interfaces.NamingContextFactory
. - Você pode definir a propriedade
java.naming.factory.initial
como um valor que atenda aos seus requisitos se não quiser usar os valores padrão.
note note NOTE Em vez de usar uma cadeia para definir a propriedade de conexão DSC_SERVER_TYPE
, você pode usar um membro estático da classeServiceClientFactoryProperties
. Os seguintes valores podem ser usados:ServiceClientFactoryProperties.DSC_WEBSPHERE_SERVER_TYPE
,ServiceClientFactoryProperties.DSC_WEBLOGIC_SERVER_TYPE
ouServiceClientFactoryProperties.DSC_JBOSS_SERVER_TYPE
. - Se você definir esta propriedade de conexão como
-
DSC_CREDENTIAL_USERNAME: Especifica o nome de usuário dos formulários AEM. Para que um usuário chame um serviço do AEM Forms com êxito, ele precisa da função Usuário de serviços. Um usuário também pode ter outra função que inclua a permissão Chamar serviço. Caso contrário, uma exceção é lançada quando eles tentam chamar um serviço. Se a segurança do serviço estiver desabilitada, não será necessário especificar essa propriedade de conexão.
-
DSC_CREDENTIAL_PASSWORD: Especifica o valor de senha correspondente. Se a segurança do serviço estiver desabilitada, não será necessário especificar essa propriedade de conexão.
-
DSC_REQUEST_TIMEOUT: o tempo limite de solicitação padrão para a solicitação do SOAP é de 1200000 milissegundos (20 minutos). Às vezes, uma solicitação pode exigir mais tempo para concluir a operação. Por exemplo, uma solicitação de SOAP que recupera um grande conjunto de registros pode exigir um tempo limite mais longo. Você pode usar o
ServiceClientFactoryProperties.DSC_REQUEST_TIMEOUT
para aumentar o tempo limite de chamada da solicitação para as solicitações de SOAP.observação: somente invocações baseadas em SOAP dão suporte à propriedade DSC_REQUEST_TIMEOUT.
Para definir propriedades de conexão, execute as seguintes tarefas:
-
Crie um objeto
java.util.Properties
usando seu construtor. -
Para definir a propriedade de conexão
DSC_DEFAULT_EJB_ENDPOINT
, chame o métodosetProperty
do objetojava.util.Properties
e passe os seguintes valores:- O valor de enumeração
ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT
- Um valor de string que especifica o URL do servidor da aplicação J2EE que hospeda o AEM Forms
note note NOTE Se você estiver usando o modo de conexão SOAP, especifique o valor de enumeração ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT
em vez do valor de enumeraçãoServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT
. - O valor de enumeração
-
Para definir a propriedade de conexão
DSC_TRANSPORT_PROTOCOL
, chame o métodosetProperty
do objetojava.util.Properties
e passe os seguintes valores:- O valor de enumeração
ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL
- O valor de enumeração
ServiceClientFactoryProperties.DSC_EJB_PROTOCOL
note note NOTE Se você estiver usando o modo de conexão SOAP, especifique o valor de enumeração ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL
em vez do valor de enumeraçãoServiceClientFactoryProperties.DSC_EJB_PROTOCOL
. - O valor de enumeração
-
Para definir a propriedade de conexão
DSC_SERVER_TYPE
, chame o métodosetProperty
do objetojava.util.Properties
e passe os seguintes valores:-
O valor de enumeração
ServiceClientFactoryProperties.DSC_SERVER_TYPE
-
Um valor de string que especifica o servidor da aplicação J2EE que hospeda o AEM Forms (por exemplo, se o AEM Forms for implantado no JBoss, especifique
JBoss
).- Para definir a propriedade de conexão
DSC_CREDENTIAL_USERNAME
, chame o métodosetProperty
do objetojava.util.Properties
e passe os seguintes valores:
- Para definir a propriedade de conexão
-
O valor de enumeração
ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME
-
Um valor de string que especifica o nome de usuário necessário para chamar o AEM Forms
- Para definir a propriedade de conexão
DSC_CREDENTIAL_PASSWORD
, chame o métodosetProperty
do objetojava.util.Properties
e passe os seguintes valores:
- Para definir a propriedade de conexão
-
O valor de enumeração
ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD
-
Um valor de string que especifica o valor de senha correspondente
-
Definindo o modo de conexão EJB para JBoss
O exemplo de código Java a seguir define propriedades de conexão para chamar o AEM Forms implantado em JBoss e usando o modo de conexão EJB.
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "https://<hostname>:8080");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DOCUMENT_HTTP_ENDPOINT,"https://<hostname>:8080");
Definindo o modo de conexão EJB para WebLogic
O exemplo de código Java a seguir define propriedades de conexão para chamar o AEM Forms implantado no WebLogic e usando o modo de conexão EJB.
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "t3://localhost:7001");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "WebLogic");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
Definindo o modo de conexão EJB para WebSphere
O exemplo de código Java a seguir define propriedades de conexão para chamar o AEM Forms implantado no WebSphere e usando o modo de conexão EJB.
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "iiop://localhost:2809");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "WebSphere");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
Definindo o modo de conexão SOAP
O exemplo de código Java a seguir define propriedades de conexão no modo SOAP para chamar o AEM Forms implantado no JBoss.
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "http://localhost:8080");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
Definindo propriedades de conexão quando a segurança do serviço estiver desabilitada
O exemplo de código Java a seguir define as propriedades de conexão necessárias para chamar o AEM Forms implantado no JBoss Application Server e quando a segurança do serviço está desativada.
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://localhost:1099");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
Definindo o modo de conexão SOAP com o tempo limite de solicitação personalizada
Properties ConnectionProps = new Properties();
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "http://localhost:8080");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password");
ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_REQUEST_TIMEOUT, "1800000"); // Request timeout limit 30 Minutes
Usando um objeto Context para invocar o AEM Forms
Você pode usar um objeto com.adobe.idp.Context
para invocar um serviço AEM Forms com um usuário autenticado (o objeto com.adobe.idp.Context
representa um usuário autenticado). Ao usar um objeto com.adobe.idp.Context
, não é necessário definir as propriedades DSC_CREDENTIAL_USERNAME
ou DSC_CREDENTIAL_PASSWORD
. Você pode obter um objeto com.adobe.idp.Context
ao autenticar usuários usando o método authenticate
do objeto AuthenticationManagerServiceClient
.
O método authenticate
retorna um objeto AuthResult
que contém os resultados da autenticação. Você pode criar um objeto com.adobe.idp.Context
chamando seu construtor. Em seguida, chame o método initPrincipal
do objeto com.adobe.idp.Context
e passe o objeto AuthResult
, como mostrado no código a seguir:
Context myCtx = new Context();
myCtx.initPrincipal(authResult);
Em vez de definir as propriedades DSC_CREDENTIAL_USERNAME
ou DSC_CREDENTIAL_PASSWORD
, você pode invocar o método setContext
do objeto ServiceClientFactory
e passar o objeto com.adobe.idp.Context
. Ao usar um usuário de formulários AEM para invocar um serviço, verifique se ele tem a função chamada Services User
que é necessária para invocar um serviço do AEM Forms.
O código a seguir mostra como usar um objeto com.adobe.idp.Context
nas configurações de conexão usadas para criar um objeto EncryptionServiceClient
.
//Authenticate a user and use the Context object within connection settings
// Authenticate the user
String username = "wblue";
String password = "password";
AuthResult authResult = authClient.authenticate(username, password.getBytes());
//Set a Content object that represents the authenticated user
//Use the Context object to invoke the Encryption service
Context myCtx = new Context();
myCtx.initPrincipal(authResult);
//Set connection settings
Properties connectionProps = new Properties();
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://<server>:1099");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL, ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, ServiceClientFactoryProperties.DSC_JBOSS_SERVER_TYPE);
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DOCUMENT_HTTP_ENDPOINT,"jnp://<server>:1099");
//Create a ServiceClientFactory object
ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps);
myFactory.setContext(myCtx);
//Create an EncryptionServiceClient object
EncryptionServiceClient encryptClient = new EncryptionServiceClient(myFactory);
Chamar cenários invoking_scenarios-1
Os cenários de chamada a seguir são discutidos nesta seção:
- Um aplicativo cliente em execução em sua própria máquina virtual Java (JVM) chama uma instância AEM Forms independente.
- Um aplicativo cliente em execução em sua própria JVM invoca instâncias do AEM Forms em cluster.
Aplicativo cliente que invoca uma instância autônoma do AEM Forms client-application-invoking-a-stand-alone-aem-forms-instance
O diagrama a seguir mostra uma aplicação cliente sendo executada em sua própria JVM e chamando uma instância independente do AEM Forms.
Nesse cenário, um aplicativo cliente é executado em sua própria JVM e chama os serviços da AEM Forms.
Aplicativo cliente que invoca instâncias AEM Forms clusterizadas client-application-invoking-clustered-aem-forms-instances
O diagrama a seguir mostra uma aplicação cliente sendo executada em sua própria JVM e chamando instâncias do AEM Forms em um cluster.
Esse cenário é semelhante a um aplicativo cliente que chama uma instância AEM Forms independente. No entanto, o URL do provedor é diferente. Se um aplicativo cliente quiser se conectar a um servidor de aplicativos J2EE específico, o aplicativo deverá alterar o URL para fazer referência ao servidor de aplicativos J2EE específico.
Não é recomendável fazer referência a um servidor de aplicativos J2EE específico porque a conexão entre o aplicativo cliente e o AEM Forms será encerrada se o servidor de aplicativos for interrompido. Recomenda-se que o URL do provedor faça referência a um gerenciador JNDI no nível da célula, em vez de um servidor de aplicativos J2EE específico.
Os aplicativos clientes que usam o modo de conexão SOAP podem usar a porta do balanceador de carga HTTP para o cluster. As aplicações clientes que usam o modo de conexão EJB podem se conectar à porta EJB de um servidor de aplicações J2EE específico. Esta ação lida com o Balanceamento de Carga entre nós de cluster.
WebSphere
O exemplo a seguir mostra o conteúdo de um arquivo jndi.properties usado para se conectar ao AEM Forms que é implantado no WebSphere.
java.naming.factory.initial=com.ibm.websphere.naming.
WsnInitialContextFactory
java.naming.provider.url=corbaloc::appserver1:9810,:appserver2:9810
WebLogic
O exemplo a seguir mostra o conteúdo de um arquivo jndi.properties usado para se conectar a AEM Forms que é implantado no WebLogic.
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://appserver1:8001, appserver2:8001
JBoss
O exemplo a seguir mostra o conteúdo de um arquivo jndi.properties usado para se conectar a AEM Forms que é implantado no JBoss.
java.naming.factory.initial= org.jnp.interfaces.NamingContextFactory
java.naming.provider.url= jnp://appserver1:1099, appserver2:1099,
appserver3:1099
Consulte também
Inclusão de arquivos biblioteca Java AEM Forms
Passar dados para serviços AEM Forms usando a API Java passing-data-to-aem-forms-services-using-the-java-api
As operações de serviço da AEM Forms normalmente consomem ou produzem documentos PDF. Quando você chama um serviço, às vezes é necessário passar um documento PDF (ou outros tipos de documento, como dados XML) para o serviço. Da mesma forma, às vezes é necessário manipular um documento PDF que é retornado do serviço. A classe Java que permite que você passe dados de e para serviços AEM Forms é com.adobe.idp.Document
.
Os serviços AEM Forms não aceitam um documento PDF como outros tipos de dados, como um objeto java.io.InputStream
ou uma matriz de bytes. Um objeto com.adobe.idp.Document
também pode ser usado para passar outros tipos de dados, como dados XML, para serviços.
Um objeto com.adobe.idp.Document
é um tipo serializável Java, portanto, pode ser passado por uma chamada RMI. O lado receptor pode ser colocado (mesmo host, mesmo carregador de classe), local (mesmo host, carregador de classe diferente) ou remoto (host diferente). A transmissão do conteúdo do documento é otimizada para cada caso. Por exemplo, se o remetente e o destinatário estiverem localizados no mesmo host, o conteúdo será transmitido por um sistema de arquivos local. (Em alguns casos, os documentos podem ser transmitidos na memória.)
Dependendo do tamanho do objeto com.adobe.idp.Document
, os dados são transportados dentro do objeto com.adobe.idp.Document
ou armazenados no sistema de arquivos do servidor. Quaisquer recursos de armazenamento temporário ocupados pelo objeto com.adobe.idp.Document
são removidos automaticamente após o descarte de com.adobe.idp.Document
. (Consulte Descartando objetos Document.)
Às vezes, é necessário conhecer o tipo de conteúdo de um objeto com.adobe.idp.Document
antes de passá-lo para um serviço. Por exemplo, se uma operação requer um tipo de conteúdo específico, como application/pdf
, é recomendável determinar o tipo de conteúdo. (Consulte Determinando o tipo de conteúdo de um documento.)
O objeto com.adobe.idp.Document
tenta determinar o tipo de conteúdo usando os dados fornecidos. Se o tipo de conteúdo não puder ser recuperado dos dados fornecidos (por exemplo, quando os dados tiverem sido fornecidos como uma matriz de bytes), defina o tipo de conteúdo. Para definir o tipo de conteúdo, chame o método setContentType
do objeto com.adobe.idp.Document
. (Consulte Determinando o tipo de conteúdo de um documento)
Se os arquivos auxiliares residirem no mesmo sistema de arquivos, a criação de um objeto com.adobe.idp.Document
será mais rápida. Se os arquivos auxiliares residirem em sistemas de arquivos remotos, uma operação de cópia deverá ser feita, o que afeta o desempenho.
Um aplicativo pode conter os tipos de dados com.adobe.idp.Document
e org.w3c.dom.Document
. No entanto, certifique-se de qualificar totalmente o tipo de dados org.w3c.dom.Document
. Para obter informações sobre como converter um objeto org.w3c.dom.Document
em um objeto com.adobe.idp.Document
, consulte Início Rápido (modo EJB): Pré-preenchendo o Forms com Layouts Fluxáveis usando a API Java.
com.adobe.idp.Document
, leia as informações do documento em partes de 2048 bytes ou menos. Por exemplo, o código a seguir lê as informações do documento em blocos de 2048 bytes: // Set up the chunk size to prevent a potential memory leak
int buffSize = 2048;
// Determine the total number of bytes to read
int docLength = (int) inDoc.length();
byte [] byteDoc = new byte[docLength];
// Set up the reading position
int pos = 0;
// Loop through the document information, 2048 bytes at a time
while (docLength > 0) {
// Read the next chunk of information
int toRead = Math.min(buffSize, docLength);
int bytesRead = inDoc.read(pos, byteDoc, pos, toRead);
// Handle the exception in case data retrieval failed
if (bytesRead == -1) {
inDoc.doneReading();
inDoc.dispose();
throw new RuntimeException("Data retrieval failed!");
}
// Update the reading position and number of bytes remaining
pos += bytesRead;
docLength -= bytesRead;
}
// The document information has been successfully read
inDoc.doneReading();
inDoc.dispose();
Consulte também
Criação de documentos creating-documents
Crie um objeto com.adobe.idp.Document
antes de invocar uma operação de serviço que requer um documento PDF (ou outros tipos de documento) como um valor de entrada. A classe com.adobe.idp.Document
fornece construtores que permitem criar um documento a partir dos seguintes tipos de conteúdo:
- Uma matriz de bytes
- Um objeto
com.adobe.idp.Document
existente - Um objeto
java.io.File
- Um objeto
java.io.InputStream
- Um objeto
java.net.URL
Criando um documento baseado em uma matriz de bytes creating-a-document-based-on-a-byte-array
O código de exemplo a seguir cria um objeto com.adobe.idp.Document
que é baseado em uma matriz de bytes.
Criando um objeto Document baseado em uma matriz de bytes
Document myPDFDocument = new Document(myByteArray);
Criando um documento baseado em outro documento creating-a-document-based-on-another-document
O código de exemplo a seguir cria um objeto com.adobe.idp.Document
que é baseado em outro objeto com.adobe.idp.Document
.
Criando um objeto Documento baseado em outro documento
//Create a Document object based on a byte array
InputStream is = new FileInputStream("C:\\Map.pdf");
int len = is.available();
byte [] myByteArray = new byte[len];
int i = 0;
while (i < len) {
i += is.read(myByteArray, i, len);
}
Document myPDFDocument = new Document(myByteArray);
//Create another Document object
Document anotherDocument = new Document(myPDFDocument);
Criação de um documento baseado em um arquivo creating-a-document-based-on-a-file
O código de exemplo a seguir cria um objeto com.adobe.idp.Document
que é baseado em um arquivo PDF chamado map.pdf. Esse arquivo está na raiz do disco rígido C. Este construtor tenta definir o tipo de conteúdo MIME do objeto com.adobe.idp.Document
usando a extensão de nome de arquivo.
O construtor com.adobe.idp.Document
que aceita um objeto java.io.File
também aceita um parâmetro Booleano. Ao definir este parâmetro como true
, o objeto com.adobe.idp.Document
exclui o arquivo. Esta ação significa que não é necessário remover o arquivo após passá-lo para o construtor com.adobe.idp.Document
.
Configurar este parâmetro para false
significa que você retém a propriedade deste arquivo. A definição deste parâmetro para true
é mais eficiente. O motivo é que o objeto com.adobe.idp.Document
pode mover o arquivo diretamente para a área gerenciada local em vez de copiá-lo (que é mais lento).
Criando um objeto Document baseado em um arquivo PDF
//Create a Document object based on the map.pdf source file
File mySourceMap = new File("C:\\map.pdf");
Document myPDFDocument = new Document(mySourceMap,true);
Criando um documento com base em um objeto InputStream creating-a-document-based-on-an-inputstream-object
O código Java a seguir cria um objeto com.adobe.idp.Document
que é baseado em um objeto java.io.InputStream
.
Criando um documento com base em um objeto InputStream
//Create a Document object based on an InputStream object
InputStream is = new FileInputStream("C:\\Map.pdf");
Document myPDFDocument = new Document(is);
Criar um documento com base no conteúdo acessível de um URL creating-a-document-based-on-content-accessible-from-an-url
O exemplo de código Java a seguir cria um objeto com.adobe.idp.Document
que é baseado em um arquivo PDF chamado map.pdf. Este arquivo está localizado em um aplicativo Web chamado WebApp
que está em execução em localhost
. Este construtor tenta definir o tipo de conteúdo MIME do objeto com.adobe.idp.Document
usando o tipo de conteúdo retornado com o protocolo de URL.
A URL fornecida para o objeto com.adobe.idp.Document
é sempre lida no lado onde o objeto com.adobe.idp.Document
original é criado, conforme mostrado neste exemplo:
Document doc = new Document(new java.net.URL("file:c:/temp/input.pdf"));
O arquivo c:/temp/input.pdf deve estar localizado no computador cliente (não no computador servidor). O computador cliente é onde o URL é lido e onde o com.adobe.idp.Document
objeto foi criado.
Criar um documento baseado em conteúdo acessíveis a partir de uma URL
//Create a Document object based on a java.net.URL object
URL myURL = new URL("http", "localhost", 8080,"/WebApp/map.pdf");
//Create another Document object
Document myPDFDocument = new Document(myURL);
Consulte também
Chamada de AEM Forms usando a API Java
Definindo propriedades de conexão
Manuseio de documentos retornados handling-returned-documents
Operações de serviço que retornam uma documento PDF (ou outros tipos de dados, como dados XML), à medida que um valor de saída retorna um com.adobe.idp.Document
objeto. Depois de receber um com.adobe.idp.Document
objeto, é possível converter-lo nos seguintes formatos:
- Um
java.io.File
objeto - Um
java.io.InputStream
objeto - Uma matriz de bytes
A linha de código a seguir converte um objeto com.adobe.idp.Document
em um objeto java.io.InputStream
. Suponha que myPDFDocument
represente um objeto com.adobe.idp.Document
:
java.io.InputStream resultStream = myDocument.getInputStream();
Da mesma forma, você pode copiar o conteúdo de um com.adobe.idp.Document
para um arquivo local executando as seguintes tarefas:
- Crie um objeto
java.io.File
. - Invoque o método
copyToFile
do objetocom.adobe.idp.Document
e passe o objetojava.io.File
.
O exemplo de código a seguir copia o conteúdo de um objeto com.adobe.idp.Document
para um arquivo chamado AnotherMap.pdf.
Copiando o conteúdo de um objeto de documento para um arquivo
File outFile = new File("C:\\AnotherMap.pdf");
myDocument.copyToFile (outFile);
Consulte também
Determinar o tipo de conteúdo de um documento determining-the-content-type-of-a-document
Determine o tipo MIME de um objeto com.adobe.idp.Document
invocando o método getContentType
do objeto com.adobe.idp.Document
. Este método retorna um valor de cadeia de caracteres que especifica o tipo de conteúdo do objeto com.adobe.idp.Document
. A tabela a seguir descreve os diferentes tipos de conteúdo que o AEM Forms retorna.
application/pdf
application/vnd.adobe.xdp+xml
text/xml
application/vnd.fdf
application/vnd.adobe.xfdf
application/rdf+xml
application/octet-stream
NULL
O código de exemplo a seguir determina o tipo de conteúdo de um objeto com.adobe.idp.Document
.
Determinando o tipo de conteúdo de um objeto do Documento
//Determine the content type of the Document object
String ct = myDocument.getContentType();
System.out.println("The content type of the Document object is " +ct);
Consulte também
Descartando objetos de documento disposing-document-objects
Quando você não precisar mais de um objeto Document
, é recomendável descartá-lo invocando seu método dispose
. Cada objeto Document
consome um descritor de arquivo e até 75 MB de espaço RAM na plataforma host do aplicativo. Se um objeto Document
não for descartado, o processo de coleta do Java Garage o descartará. Entretanto, ao descartá-la antes usando o método dispose
, você poderá liberar a memória ocupada pelo objeto Document
.
Consulte também
Chamada de AEM Forms usando a API Java
Inclusão de arquivos da biblioteca Java do AEM Forms
Chamar um serviço usando uma biblioteca cliente Java
Chamar um serviço usando uma biblioteca cliente Java invoking-a-service-using-a-java-client-library
As operações de serviço do AEM Forms podem ser chamadas usando uma API altamente tipada do serviço, que é conhecida como uma biblioteca de cliente Java. Uma biblioteca cliente Java é um conjunto de classes concretas que fornecem acesso aos serviços implantados no contêiner de serviço. Você instancia um objeto Java que representa o serviço a ser chamado em vez de criar um objeto InvocationRequest
usando a API de chamada. A API de chamada é usada para chamar processos, como processos de longa duração, criados no Workbench. (Consulte Chamar Processos De Longa Vida Centrados No Ser Humano.)
Para executar uma operação de serviço, chame um método que pertence ao objeto Java. Uma biblioteca cliente Java contém métodos que normalmente mapeiam de um para um com operações de serviço. Ao usar uma biblioteca cliente Java, defina as propriedades de conexão necessárias. (Consulte Definindo propriedades de conexão.)
Depois de definir as propriedades de conexão, crie um objeto ServiceClientFactory
que seja usado para instanciar um objeto Java que permita chamar um serviço. Cada serviço que tem uma biblioteca cliente Java tem um objeto cliente correspondente. Por exemplo, para invocar o serviço do Repositório, crie um objeto ResourceRepositoryClient
usando seu construtor e transmitindo o objeto ServiceClientFactory
. O objeto ServiceClientFactory
é responsável por manter as configurações de conexão necessárias para chamar os serviços AEM Forms.
Embora a obtenção de um ServiceClientFactory
seja tipicamente rápida, alguma sobrecarga é envolvida quando a fábrica é usada pela primeira vez. Esse objeto é otimizado para reutilização e, portanto, quando possível, use o mesmo objeto ServiceClientFactory
quando estiver criando vários objetos cliente Java. Ou seja, não crie um objeto ServiceClientFactory
separado para cada objeto da biblioteca do cliente que você criar.
Há uma configuração do Gerenciador de Usuários que controla o tempo de vida da declaração SAML que está dentro do objeto com.adobe.idp.Context
que afeta o objeto ServiceClientFactory
. Essa configuração controla toda a vida útil do contexto de autenticação em todo o AEM Forms, incluindo todas as chamadas executadas usando a API Java. Por padrão, o período em que um objeto ServiceCleintFactory
pode ser usado é de duas horas.
writeResource
do serviço do Repositório é invocada. Essa operação coloca um novo recurso no repositório.Você pode invocar o serviço de repositório usando um biblioteca do cliente Java e executando as seguintes etapas:
-
Inclua arquivos JAR do cliente, como o adobe-repositório-client.jar, no caminho de classe do seu projeto Java. Para obter informações sobre a localização desses arquivos, consulte Inclusão AEM Forms arquivos de biblioteca Java.
-
Defina as propriedades de conexão necessárias para executar um serviço.
-
Crie um objeto
ServiceClientFactory
invocando o métodocreateInstance
estático do objetoServiceClientFactory
e transmitindo o objetojava.util.Properties
que contém propriedades de conexão. -
Crie um objeto
ResourceRepositoryClient
usando seu construtor e transmitindo o objetoServiceClientFactory
. Use oResourceRepositoryClient
objeto para invocar as operações de serviço de repositório. -
Criar um
RepositoryInfomodelFactoryBean
objeto usando seu construtor e passarnull
. Esse objeto permite criar umResource
objeto que represente o conteúdo adicionado ao repositório. -
Criar um
Resource
objeto invocando oRepositoryInfomodelFactoryBean
método donewImage
objeto e passando os seguintes valores:- Um valor de ID exclusivo ao especificar
new Id()
. - Um valor UUID exclusivo especificando
new Lid()
. - O nome do recurso. Você pode especificar o nome do arquivo XDP.
Converter o valor de retorno em
Resource
. - Um valor de ID exclusivo ao especificar
-
Crie um objeto
ResourceContent
invocando o métodonewImage
do objetoRepositoryInfomodelFactoryBean
e convertendo o valor de retorno emResourceContent
. Esse objeto representa o conteúdo adicionado ao repositório. -
Crie um objeto
com.adobe.idp.Document
passando um objetojava.io.FileInputStream
que armazena o arquivo XDP a ser adicionado ao repositório. (Consulte Criando um documento com base em um objeto InputStream.) -
Adicione o conteúdo do objeto
com.adobe.idp.Document
ao objetoResourceContent
invocando o métodosetDataDocument
do objetoResourceContent
. Passar o objetocom.adobe.idp.Document
. -
Defina o tipo MIME do arquivo XDP a ser adicionado ao repositório, chamando o método
setMimeType
do objetoResourceContent
e transmitindoapplication/vnd.adobe.xdp+xml
. -
Adicione o conteúdo do objeto
ResourceContent
ao objetoResource
chamando o métodosetContent
do objetoResource
e transmitindo o objetoResourceContent
. -
Adicione uma descrição do recurso chamando o método
setDescription
do objetoResource
e transmitindo um valor de cadeia de caracteres que representa uma descrição do recurso. -
Adicione o design do formulário ao repositório, chamando o método
writeResource
do objetoResourceRepositoryClient
e passando os seguintes valores:- Um valor de string que especifica o caminho para a coleção de recursos que contém o novo recurso
- O objeto
Resource
que foi criado
Consulte também
Início rápido (modo EJB): Gravação de um recurso usando a API Java
Chamar um processo de vida curta usando a API de chamada invoking-a-short-lived-process-using-the-invocation-api
Você pode chamar um processo de curta duração usando a API de chamada Java. Ao invocar um processo de curta duração usando a API de Invocação, você passa os valores de parâmetro necessários usando um objeto java.util.HashMap
. Para cada parâmetro a ser transmitido para um serviço, chame o método put
do objeto java.util.HashMap
e especifique o par nome-valor necessário para que o serviço execute a operação especificada. Especifique o nome exato dos parâmetros que pertencem ao processo de vida curta.
A discussão aqui é sobre o uso da API de Invocação para invocar o seguinte processo de vida curta do AEM Forms chamado MyApplication/EncryptDocument
.
MyApplication/EncryptDocument
usando o Workbench. (Consulte Uso do Workbench.)Quando esse processo é chamado, ele executa as seguintes ações:
- Obtém o documento de PDF não seguro passado para o processo. Esta ação é baseada na operação
SetValue
. O parâmetro de entrada para este processo é uma variável de processodocument
chamadainDoc
. - Criptografa o documento PDF com uma senha. Esta ação é baseada na operação
PasswordEncryptPDF
. O documento de PDF criptografado por senha é retornado em uma variável de processo denominadaoutDoc
.
Chame o processo de curta duração MyApplication/EncryptDocument usando a API de invocação Java invoke-the-myapplication-encryptdocument-short-lived-process-using-the-java-invocation-api
Chame o processo de curta duração MyApplication/EncryptDocument
usando a API de invocação Java:
-
Inclua arquivos JAR do cliente, como adobe-livecycle-client.jar, no caminho de classe do projeto Java. (Consulte Incluindo arquivos da biblioteca AEM Forms Java.)
-
Crie um objeto
ServiceClientFactory
que contenha propriedades de conexão. (Consulte Definindo propriedades de conexão.) -
Crie um objeto
ServiceClient
usando seu construtor e transmitindo o objetoServiceClientFactory
. Um objetoServiceClient
permite invocar uma operação de serviço. Ela lida com tarefas como localização, despacho e solicitações de chamada de roteamento. -
Crie um objeto
java.util.HashMap
usando seu construtor. -
Invoque o método
put
do objetojava.util.HashMap
para que cada parâmetro de entrada passe para o processo de longa duração. Como o processo de curta duraçãoMyApplication/EncryptDocument
requer um parâmetro de entrada do tipoDocument
, é necessário invocar o métodoput
apenas uma vez, como mostrado no exemplo a seguir.code language-java //Create a Map object to store the parameter value for inDoc Map params = new HashMap(); InputStream inFile = new FileInputStream("C:\\Adobe\Loan.pdf"); Document inDoc = new Document(inFile); params.put("inDoc", inDoc);
-
Crie um objeto
InvocationRequest
invocando o métodocreateInvocationRequest
do objetoServiceClientFactory
e transmitindo os seguintes valores:- Um valor de string que especifica o nome do processo de longa duração a ser chamado. Para invocar o processo
MyApplication/EncryptDocument
, especifiqueMyApplication/EncryptDocument
. - Um valor de string que representa o nome da operação do processo. Normalmente, o nome de uma operação de processo de curta duração é
invoke
. - O objeto
java.util.HashMap
que contém os valores de parâmetro exigidos pela operação de serviço. - Um valor booliano que especifica
true
, o que cria uma solicitação síncrona (esse valor é aplicável para invocar um processo de curta duração).
- Um valor de string que especifica o nome do processo de longa duração a ser chamado. Para invocar o processo
-
Envie a solicitação de invocação para o serviço chamando o método
invoke
do objetoServiceClient
e transmitindo o objetoInvocationRequest
. O métodoinvoke
retorna um objetoInvocationReponse
.note note NOTE Um processo de longa duração pode ser invocado transmitindo o valor false
como o quarto parâmetro do métodocreateInvocationRequest
. Transmitir o valorfalse
cria uma solicitação assíncrona. -
Recupere o valor de retorno do processo chamando o método
getOutputParameter
do objetoInvocationReponse
e transmitindo um valor de cadeia de caracteres que especifica o nome do parâmetro de saída. Nesta situação, especifiqueoutDoc
(outDoc
é o nome do parâmetro de saída para o processoMyApplication/EncryptDocument
). Converta o valor de retorno emDocument
, como mostrado no exemplo a seguir.code language-java InvocationResponse response = myServiceClient.invoke(request); Document encryptDoc = (Document) response.getOutputParameter("outDoc");
-
Crie um objeto
java.io.File
e verifique se a extensão do arquivo é .pdf. -
Invoque o método
copyToFile
do objetocom.adobe.idp.Document
para copiar o conteúdo do objetocom.adobe.idp.Document
para o arquivo. Use o objetocom.adobe.idp.Document
retornado pelo métodogetOutputParameter
.
Consulte também
Início Rápido: Chamar um processo de vida curta usando a API de Chamada
Chamar processos de longa vida centrados no ser humano
Inclusão de arquivos da biblioteca Java do AEM Forms