使用Java API调用AEM Forms invoking-aem-forms-using-the-javaapi

本文档中的示例和示例仅适用于JEE环境上的AEM Forms 。

可以使用AEM Forms Java API调用AEM Forms。 使用AEM Forms Java API时,您可以使用调用API或Java客户端库。 Java客户端库可用于Rights Management服务等服务。 这些强类型的API允许您开发调用AEM Forms的Java应用程序。

调用API是位于 com.adobe.idp.dsc 包。 使用这些类,您可以直接向服务发送调用请求,并处理返回的调用响应。 使用调用API可调用使用Workbench创建的短期或长期进程。

以编程方式调用服务的推荐方法是使用与服务相对应的Java客户端库,而不是调用API。 例如,要调用加密服务,请使用加密服务客户端库。 要执行Encryption服务操作,请调用属于Encryption服务客户端对象的方法。 PDF您可以调用 EncryptionServiceClient 对象的 encryptPDFUsingPassword 方法。

Java API支持以下功能:

  • 用于远程调用的RMI传输协议
  • 本地调用的VM传输
  • 用于远程调用的SOAP
  • 不同的身份验证,如用户名和密码
  • 同步和异步调用请求

包括AEM Forms Java库文件

调用以人为中心的长期进程

使用Web服务调用AEM Forms

设置连接属性

使用Java API将数据传递到AEM Forms服务

使用Java客户端库调用服务

使用调用API调用短期进程

创建可调用以人为中心的长期进程的Java Web应用程序

包括AEM Forms Java库文件 including-aem-forms-java-library-files

要使用Java API以编程方式调用AEM Forms服务,请在Java项目的类路径中包含所需的库文件(JAR文件)。 包含在客户端应用程序类路径中的JAR文件取决于几个因素:

  • 要调用的AEM Forms服务。 客户端应用程序可以调用一个或多个服务。
  • 要用于调用AEM Forms服务的模式。 可以使用EJB或SOAP模式。 (请参阅 设置连接属性.)
NOTE
(仅限全包式)使用命令启动AEM Forms服务器 standalone.bat -b <Server IP> -c lc_turnkey.xml 为EJB指定服务器IP
  • 部署AEM Forms的J2EE应用程序服务器。

特定于服务的JAR文件 service-specific-jar-files

下表列出了调用AEM Forms服务所需的JAR文件。

文件
描述
位置
adobe-livecycle-client.jar
必须始终包含在Java客户端应用程序的类路径中。
<安装目录>/sdk/client-libs/common
adobe-usermanager-client.jar
必须始终包含在Java客户端应用程序的类路径中。
<安装目录>/sdk/client-libs/common
adobe-utilities.jar
必须始终包含在Java客户端应用程序的类路径中。
<安装目录>/sdk//client-libs/<app server="">
adobe-applicationmanager-client-sdk.jar
调用应用程序管理器服务时需要。
<安装目录>/sdk/client-libs/common
adobe-assembler-client.jar
调用Assembler服务时需要。
<安装目录>/sdk/client-libs/common
adobe-backup-restore-client-sdk.jar
调用备份和还原服务API时需要此项。
<安装目录>/sdk/client-libs/common
adobe-barcodedforms-client.jar
调用条形码表单服务时需要。
<安装目录>/sdk/client-libs/common
adobe-convertpdf-client.jar
需要此项才能调用转换PDF服务。
<安装目录>/sdk/client-libs/common
adobe-distiller-client.jar
调用Distiller服务时需要此项。
<安装目录>/sdk/client-libs/common
adobe-docconverter-client.jar
调用DocConverter服务时需要。
<安装目录>/sdk/client-libs/common
adobe-contentservices-client.jar
需要此项才能调用文档管理服务。
<安装目录>/sdk/client-libs/common
adobe-encryption-client.jar
调用加密服务时需要。
<安装目录>/sdk/client-libs/common
adobe-forms-client.jar
调用Forms服务时需要此项。
<安装目录>/sdk/client-libs/common
adobe-formdataintegration-client.jar
需要此项才能调用表单数据集成服务。
<安装目录>/sdk/client-libs/common
adobe-generatepdf-client.jar
需要此项才能调用生成PDF服务。
<安装目录>/sdk/client-libs/common
adobe-generate3dpdf-client.jar
需要调用生成3DPDF服务。
<安装目录>/sdk/client-libs/common
adobe-jobmanager-client-sdk.jar
调用作业管理器服务时需要此项。
<安装目录>/sdk/client-libs/common
adobe-output-client.jar
调用Output服务时需要。
<安装目录>/sdk/client-libs/common
adobe-pdfutility-client.jar
调用PDF实用程序或XMP实用程序服务时需要此项。
<安装目录>/sdk/client-libs/common
adobe-reader-extensions-client.jar
调用Acrobat Reader DC扩展服务时需要此项。
<安装目录>/sdk/client-libs/common

adobe-repository-client.jar

commons-codec-1.3.jar

调用存储库服务时需要此项。

<安装目录>/sdk/client-libs/common

<安装目录>/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

调用Rights Management服务时需要。

如果AEM Forms部署在JBoss上,请包含所有这些文件。

<安装目录>/sdk/client-libs/common

特定于JBoss的库目录

adobe-signatures-client.jar
调用Signature服务时需要。
<安装目录>/sdk/client-libs/common
adobe-taskmanager-client-sdk.jar
需要此项才能调用任务管理器服务。
<安装目录>/sdk/client-libs/common
adobe-truststore-client.jar
调用信任存储区服务时需要此项。
<安装目录>/sdk/client-libs/common

连接模式和J2EE应用程序JAR文件 connection-mode-and-j2ee-application-jar-files

下表列出了与连接模式以及部署AEM Forms的J2EE应用程序服务器相关的JAR文件。

</thead align="left">

文件
描述
位置
  • 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
如果使用SOAP模式调用AEM Forms,请包含这些JAR文件。
<安装目录>/sdk/client-libs/thirdparty
jboss-client.jar

如果AEM Forms部署在JBoss应用程序服务器上,请包含此JAR文件。

如果jboss-client.jar和引用的jar不在同一位置,则类加载器将无法找到所需的类。

JBoss客户端库目录

如果将客户端应用程序部署在同一J2EE应用程序服务器上,则不需要包含此文件。

wlclient.jar
如果AEM Forms部署在BEA WebLogic Server®上,则包含此JAR文件。

特定于WebLogic的库目录

如果将客户端应用程序部署在同一J2EE应用程序服务器上,则不需要包含此文件。

  • com.ibm.ws.admin.client_6.1.0.jar

  • com.ibm.ws.webservices.thinclient_6.1.0.jar

  • 如果AEM Forms部署在WebSphere应用程序服务器上,则包含这些JAR文件。

  • (Web服务调用需要com.ibm.ws.webservices.thinclient_6.1.0.jar)。

特定于WebSphere的库目录([WAS_HOME]/runtimes)

如果将客户端应用程序部署在同一J2EE应用程序服务器上,则不必包含这些文件。

调用方案 invoking-scenarios

下表指定了调用方案,并列出了成功调用AEM Forms所需的JAR文件。

</thead align="left"> xmp-uti

服务
调用模式
J2EE应用程序服务器
必需的JAR文件
Forms服务
EJB
Jboss
  • adobe-livecycle-client.jar

  • adobe-usermanager-client.jar

  • jboss-client.jar
  • adobe-forms-client.jar
  • commons-httpclient-3.1.jar

Forms服务

Acrobat Reader DC扩展服务

签名服务

EJB
Jboss
  • 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

Forms服务
SOAP
WebLogic
  • 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

Forms服务

Acrobat Reader DC扩展服务

签名服务

SOAP
WebLogic
  • 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

升级JAR文件 upgrading-jar-files

如果从LiveCycle升级到AEM Forms,建议在Java项目的类路径中包含AEM Forms JAR文件。 例如,如果您使用的是Rights Management服务等服务,但是如果在类路径中不包含AEM Forms JAR文件,则会遇到兼容性问题。

假定您要升级到AEM Forms。 要使用调用Rights Management服务的Java应用程序,请包含以下JAR文件的AEM Forms版本:

  • adobe-rightsmanagement-client.jar
  • adobe-livecycle-client.jar
  • adobe-usermanager-client.jar

另请参阅

使用Java API调用AEM Forms

设置连接属性

使用Java API将数据传递到AEM Forms服务

使用Java客户端库调用服务

设置连接属性 setting-connection-properties

您可以设置连接属性,以便在使用Java API时调用AEM Forms。 设置连接属性时,指定是远程调用服务还是本地调用服务,并指定连接模式和身份验证值。 如果启用了服务安全,则需要身份验证值。 但是,如果禁用了服务安全性,则不必指定身份验证值。

连接模式可以是SOAP或EJB模式。 EJB模式使用RMI/IIOP协议,EJB模式的性能优于SOAP模式。 SOAP模式用于消除J2EE应用程序服务器依赖关系,或者当防火墙位于AEM Forms和客户端应用程序之间时。 SOAP模式使用https协议作为底层传输,并且可以跨防火墙边界进行通信。 如果J2EE应用程序服务器依赖关系或防火墙都不是问题,建议您使用EJB模式。

要成功调用AEM Forms服务,请设置以下连接属性:

  • DSC_DEFAULT_EJB_ENDPOINT: 如果使用EJB连接模式,此值表示部署AEM Forms的J2EE应用程序服务器的URL。 要远程调用AEM Forms,请指定部署AEM Forms的J2EE应用程序服务器名称。 如果客户端应用程序位于同一J2EE应用程序服务器上,则可以指定 localhost. 根据部署了AEM Forms的J2EE应用程序服务器,请指定以下值之一:

    • JBoss: https://<ServerName>:8080 (default port)
    • WebSphere: iiop://<ServerName>:2809 (default port)
    • WebLogic: t3://<ServerName>:7001 (default port)
  • DSC_DEFAULT_SOAP_ENDPOINT:如果您使用SOAP连接模式,此值表示调用请求所发往的端点。 要远程调用AEM Forms,请指定部署AEM Forms的J2EE应用程序服务器名称。 如果客户端应用程序位于同一J2EE应用程序服务器上,则可以指定 localhost (例如, http://localhost:8080.)

    • 端口值 8080 适用于J2EE应用程序是JBoss的情况。 如果J2EE应用程序服务器是IBM® WebSphere®,请使用端口 9080. 同样,如果J2EE应用程序服务器是WebLogic,请使用端口 7001. (这些值是默认端口值。 如果更改端口值,请使用适用的端口号。)
  • DSC_TRANSPORT_PROTOCOL:如果使用的是EJB连接模式,请指定 ServiceClientFactoryProperties.DSC_EJB_PROTOCOL 以获取该值。 如果使用的是SOAP连接模式,请指定 ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL.

  • DSC_SERVER_TYPE:指定部署AEM Forms的J2EE应用程序服务器。 有效值为 JBossWebSphereWebLogic.

    • 如果将此连接属性设置为 WebSpherejava.naming.factory.initial 值设置为 com.ibm.ws.naming.util.WsnInitCtxFactory.
    • 如果将此连接属性设置为 WebLogicjava.naming.factory.initial 值设置为 weblogic.jndi.WLInitialContextFactory.
    • 同样,如果将此连接属性设置为 JBossjava.naming.factory.initial 值设置为 org.jnp.interfaces.NamingContextFactory.
    • 您可以设置 java.naming.factory.initial 属性到的值,如果您不想使用默认值,则该值会符合您的要求。
    note note
    NOTE
    不要使用字符串来设置 DSC_SERVER_TYPE connection属性中,可以使用静态成员 ServiceClientFactoryProperties 类。 可以使用以下值: ServiceClientFactoryProperties.DSC_WEBSPHERE_SERVER_TYPEServiceClientFactoryProperties.DSC_WEBLOGIC_SERVER_TYPE,或 ServiceClientFactoryProperties.DSC_JBOSS_SERVER_TYPE.
  • DSC_CREDENTIAL_USERNAME: 指定AEM表单用户名。 用户要成功调用AEM Forms服务,需要服务用户角色。 用户还可以具有另一个包含“服务调用”权限的角色。 否则,当他们尝试调用服务时会引发异常。 如果禁用了服务安全性,则不必指定此连接属性。

  • DSC_CREDENTIAL_PASSWORD: 指定相应的密码值。 如果禁用了服务安全性,则不必指定此连接属性。

  • DSC_REQUEST_TIMEOUT: soap请求的默认请求超时限制为1200000毫秒(20分钟)。 有时,请求可能需要较长时间才能完成操作。 例如,检索大量记录的SOAP请求可能需要较长的超时限制。 您可以使用 ServiceClientFactoryProperties.DSC_REQUEST_TIMEOUT 增加SOAP请求的请求调用超时限制。

    注意:只有基于SOAP的调用才支持DSC_REQUEST_TIMEOUT属性。

要设置连接属性,请执行以下任务:

  1. 创建 java.util.Properties 对象。

  2. 要设置 DSC_DEFAULT_EJB_ENDPOINT 连接属性,调用 java.util.Properties 对象的 setProperty 方法并传递以下值:

    • ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT 枚举值
    • 一个字符串值,它指定承载AEM Forms的J2EE应用程序服务器的URL
    note note
    NOTE
    如果您使用SOAP连接模式,请指定 ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT 枚举值而不是 ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT 枚举值。
  3. 要设置 DSC_TRANSPORT_PROTOCOL 连接属性,调用 java.util.Properties 对象的 setProperty 方法并传递以下值:

    • ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL 枚举值
    • ServiceClientFactoryProperties.DSC_EJB_PROTOCOL 枚举值
    note note
    NOTE
    如果您使用SOAP连接模式,请指定 ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL枚举值而不是 ServiceClientFactoryProperties.DSC_EJB_PROTOCOL 枚举值。
  4. 要设置 DSC_SERVER_TYPE 连接属性,调用 java.util.Properties 对象的 setProperty 方法并传递以下值:

    • ServiceClientFactoryProperties.DSC_SERVER_TYPE枚举值

    • 一个字符串值,指定承载AEM Forms的J2EE应用程序服务器(例如,如果AEM Forms部署在JBoss上,请指定 JBoss)。

      1. 要设置 DSC_CREDENTIAL_USERNAME 连接属性,调用 java.util.Properties 对象的 setProperty 方法并传递以下值:
    • ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME 枚举值

    • 一个字符串值,它指定调用AEM Forms所需的用户名

      1. 要设置 DSC_CREDENTIAL_PASSWORD 连接属性,调用 java.util.Properties 对象的 setProperty 方法并传递以下值:
    • ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD 枚举值

    • 指定相应密码值的字符串值

为JBoss设置EJB连接模式

以下Java代码示例设置连接属性,以调用在JBoss上部署的AEM Forms,并使用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");

为WebLogic设置EJB连接模式

以下Java代码示例设置连接属性,以调用在WebLogic上部署的AEM Forms,并使用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");

为WebSphere设置EJB连接模式

以下Java代码示例设置连接属性,以调用在WebSphere上部署的AEM Forms,并使用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");

设置SOAP连接模式

以下Java代码示例在SOAP模式下设置连接属性,以调用在JBoss上部署的AEM Forms。

 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");
NOTE
如果选择SOAP连接模式,请确保在客户端应用程序的类路径中包含其他JAR文件。

在禁用服务安全时设置连接属性

以下Java代码示例设置调用部署在JBoss应用程序服务器上的AEM Forms以及禁用服务安全时所需的连接属性。

 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");
NOTE
所有与“使用AEM Forms编程”关联的Java快速入门均显示EJB和SOAP连接设置。

使用自定义请求超时限制设置SOAP连接模式

 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

使用上下文对象调用AEM Forms

您可以使用 com.adobe.idp.Context 对象,通过已验证的用户调用AEM Forms服务(此对象位于 com.adobe.idp.Context 对象表示经过身份验证的用户)。 使用 com.adobe.idp.Context 对象,您无需设置 DSC_CREDENTIAL_USERNAMEDSC_CREDENTIAL_PASSWORD 属性。 您可以获取 com.adobe.idp.Context 对象。 AuthenticationManagerServiceClient 对象的 authenticate 方法。

authenticate 方法返回 AuthResult 包含身份验证结果的对象。 您可以创建 com.adobe.idp.Context 对象通过调用其构造函数。 然后调用 com.adobe.idp.Context 对象的 initPrincipal 方法并传递 AuthResult 对象,如以下代码所示:

 Context myCtx = new Context();
 myCtx.initPrincipal(authResult);

不要设置 DSC_CREDENTIAL_USERNAMEDSC_CREDENTIAL_PASSWORD 属性,您可以调用 ServiceClientFactory 对象的 setContext 方法并传递 com.adobe.idp.Context 对象。 使用AEM表单用户调用服务时,请确保他们具有名为的角色 Services User 调用AEM Forms服务所需的其他资源。

以下代码示例显示了如何使用 com.adobe.idp.Context 连接设置中用于创建 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);
NOTE
有关对用户进行身份验证的完整详细信息,请参阅 验证用户.

调用方案 invoking_scenarios-1

本节将讨论以下调用方案:

  • 在其自己的Java虚拟机(JVM)中运行的客户端应用程序调用独立的AEM Forms实例。
  • 在其自己的JVM中运行的客户端应用程序调用群集的AEM Forms实例。

调用独立AEM Forms实例的客户端应用程序 client-application-invoking-a-stand-alone-aem-forms-instance

下图显示了一个客户端应用程序,该应用程序在其自己的JVM中运行并调用独立的AEM Forms实例。

在此方案中,客户端应用程序在其自己的JVM中运行并调用AEM Forms服务。

NOTE
此方案是所有快速入门所基于的调用方案。

调用群集AEM Forms实例的客户端应用程序 client-application-invoking-clustered-aem-forms-instances

下图显示了一个客户端应用程序,该应用程序在其自己的JVM中运行,并在群集中调用AEM Forms实例。

此方案类似于调用独立AEM Forms实例的客户端应用程序。 但是,提供程序URL不同。 如果客户端应用程序要连接到特定的J2EE应用程序服务器,该应用程序必须将URL更改为引用特定的J2EE应用程序服务器。

不建议引用特定的J2EE应用程序服务器,因为如果应用程序服务器停止,则客户端应用程序与AEM Forms之间的连接将终止。 建议提供程序URL引用单元格级别的JNDI管理器,而不是引用特定的J2EE应用程序服务器。

使用SOAP连接模式的客户端应用程序可以使用群集的HTTP负载平衡器端口。 使用EJB连接模式的客户机应用程序可以连接到特定J2EE应用程序服务器的EJB端口。 此操作处理群集节点之间的负载平衡。

WebSphere

以下示例显示了jndi.properties文件的内容,该文件用于连接到WebSphere上部署的AEM Forms。

 java.naming.factory.initial=com.ibm.websphere.naming.
 WsnInitialContextFactory
 java.naming.provider.url=corbaloc::appserver1:9810,:appserver2:9810

Weblogic

以下示例显示用于连接到部署在 WebLogic 上的 AEM 表单的 jndi.properties 文件的内容。

 java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
 java.naming.provider.url=t3://appserver1:8001, appserver2:8001

Jboss

以下示例显示了用于连接到部署在 JBoss 上的 AEM 表单的 jndi.properties 文件的内容。

 java.naming.factory.initial= org.jnp.interfaces.NamingContextFactory
 java.naming.provider.url= jnp://appserver1:1099, appserver2:1099,
 appserver3:1099
NOTE
请咨询您的管理员,以确定J2EE应用程序服务器名称和端口号。

另请参阅

包括 AEM 表单 Java 库文件

使用 Java API 将数据传递到 AEM Forms 服务

使用 Java 客户机库调用服务

使用 Java API 将数据传递到 AEM Forms 服务 passing-data-to-aem-forms-services-using-the-java-api

AEM Forms服务操作通常使用或生成PDF文档。 调用服务时,有时需要将PDF文档(或其他文档类型,如XML数据)传递给服务。 同样,有时也必需处理从服务返回的PDF文档。 允许您向/从AEM Forms服务传递数据的Java类是 com.adobe.idp.Document.

AEM Forms服务不接受PDF文档作为其他数据类型,例如 java.io.InputStream 对象或字节数组。 A com.adobe.idp.Document 对象还可用于向服务传递其他类型的数据,如XML数据。

A com.adobe.idp.Document 对象是Java可序列化的类型,因此可以通过RMI调用传递它。 接收端可以并置(同一主机、同一类加载器)、本地(同一主机、不同类加载器)或远程(不同主机)。 针对每种情况都优化了文档内容的传递。 例如,如果发送者和接收者位于同一台主机上,则内容将通过本地文件系统传递。 (在某些情况下,可以在内存中传递文档。)

根据 com.adobe.idp.Document 对象大小,数据将传送在 com.adobe.idp.Document 对象或存储在服务器的文件系统中。 占用的任何临时存储资源 com.adobe.idp.Document 对象将在 com.adobe.idp.Document 处置。 (请参阅 处置文档对象.)

有时,必须了解的内容类型 com.adobe.idp.Document 对象,然后才能将其传递到服务。 例如,如果操作需要特定的内容类型,例如 application/pdf,建议您确定内容类型。 (请参阅 确定文档的内容类型.)

com.adobe.idp.Document 对象尝试使用提供的数据确定内容类型。 如果无法从提供的数据中检索内容类型(例如,当提供数据作为字节数组时),请设置内容类型。 要设置内容类型,请调用 com.adobe.idp.Document 对象的 setContentType 方法。 (请参阅 确定文档的内容类型)

如果辅助文件驻留在同一文件系统上,则创建 com.adobe.idp.Document 对象更快。 如果辅助文件驻留在远程文件系统上,则必须执行拷贝操作,这会影响性能。

应用程序可以包含两者 com.adobe.idp.Documentorg.w3c.dom.Document 数据类型。 但是,请确保您完全符合 org.w3c.dom.Document 数据类型。 有关转换的信息 org.w3c.dom.Document 对象到 com.adobe.idp.Document 对象,请参见 快速入门(EJB模式):使用Java API在可流式布局中预填充Forms.

NOTE
为防止WebLogic中的内存泄漏,请使用 com.adobe.idp.Document 对象中,读取文档信息(以2048字节或更少的块为单位)。 例如,以下代码以2048字节的块读取文档信息:
        // 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();

另请参阅

使用Java API调用AEM Forms

设置连接属性

创建文档 creating-documents

创建 com.adobe.idp.Document 调用需要PDF文档(或其他文档类型)作为输入值的服务操作之前的对象。 此 com.adobe.idp.Document 类提供了构造函数,使您能够从以下内容类型创建文档:

  • 字节数组
  • 现有 com.adobe.idp.Document 对象
  • A java.io.File 对象
  • A java.io.InputStream 对象
  • A java.net.URL 对象

基于字节数组创建文档 creating-a-document-based-on-a-byte-array

以下代码示例创建 com.adobe.idp.Document 基于字节数组的对象。

创建基于字节数组的文档对象

 Document myPDFDocument = new Document(myByteArray);

基于另一文档创建文档 creating-a-document-based-on-another-document

以下代码示例创建 com.adobe.idp.Document 基于其他对象的对象 com.adobe.idp.Document 对象。

创建基于另一文档的文档对象

 //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);

基于文件创建文档 creating-a-document-based-on-a-file

以下代码示例创建 com.adobe.idp.Document 基于名为PDF文件的对象 map.pdf. 该文件位于C硬盘的根目录下。 此构造函数尝试将 com.adobe.idp.Document 对象名。

com.adobe.idp.Document 接受一个构造函数 java.io.File 对象还接受一个布尔参数。 将此参数设置为 truecom.adobe.idp.Document 对象删除文件。 此操作意味着在将文件传递到 com.adobe.idp.Document 构造函数。

将此参数设置为 false 表示您保留此文件的所有权。 将此参数设置为 true 效率更高。 原因在于 com.adobe.idp.Document 对象可以将文件直接移动到本地受管区域,而不是复制文件(速度较慢)。

创建基于PDF文件的Document对象

 //Create a Document object based on the map.pdf source file
 File mySourceMap = new File("C:\\map.pdf");
 Document myPDFDocument = new Document(mySourceMap,true);

基于InputStream对象创建文档 creating-a-document-based-on-an-inputstream-object

以下Java代码示例创建 com.adobe.idp.Document 基于 java.io.InputStream 对象。

基于InputStream对象创建文档

 //Create a Document object based on an InputStream object
 InputStream is = new FileInputStream("C:\\Map.pdf");
 Document myPDFDocument = new Document(is);

根据可从URL访问的内容创建文档 creating-a-document-based-on-content-accessible-from-an-url

以下Java代码示例创建 com.adobe.idp.Document 基于名为PDF文件的对象 map.pdf. 此文件位于名为的Web应用程序中 WebApp 运行于 localhost. 此构造函数尝试将 com.adobe.idp.Document 对象的MIME内容类型,使用随URL协议返回的内容类型。

提供给 com.adobe.idp.Document 对象始终在原始对象所在的一侧读取 com.adobe.idp.Document 创建对象,如以下示例所示:

     Document doc = new Document(new java.net.URL("file:c:/temp/input.pdf"));

c:/temp/input.pdf 文件必须位于客户端计算机上(而不是服务器计算机上)。 客户端计算机是读取 URL 和创建对象的位置 com.adobe.idp.Document

根据可通过 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);

另请参阅

使用Java API调用AEM Forms

设置连接属性

处理返回的文档 handling-returned-documents

将 PDF 文档(或其他数据类型,如 XML 数据)作为输出值的服务操作将返回一个 com.adobe.idp.Document 对象。 收到 com.adobe.idp.Document 对象后,可以将其转换为以下格式:

  • 一个 java.io.File 对象
  • 一个 java.io.InputStream 对象
  • 字节数组

以下代码行将 com.adobe.idp.Document 对象到 java.io.InputStream 对象。 假设 myPDFDocument 表示 com.adobe.idp.Document 对象:

     java.io.InputStream resultStream = myDocument.getInputStream();

同样,您可以复制 com.adobe.idp.Document 到本地文件,方法是执行以下任务:

  1. 创建 java.io.File 对象。
  2. 调用 com.adobe.idp.Document 对象的 copyToFile 方法并传递 java.io.File对象。

以下代码示例复制 com.adobe.idp.Document 对象到名为的文件 AnotherMap.pdf.

将文档对象的内容复制到文件

 File outFile = new File("C:\\AnotherMap.pdf");
 myDocument.copyToFile (outFile);

另请参阅

使用Java API调用AEM Forms

设置连接属性

确定文档的内容类型 determining-the-content-type-of-a-document

确定的MIME类型 com.adobe.idp.Document 对象,方法是调用 com.adobe.idp.Document 对象的 getContentType 方法。 此方法返回一个字符串值,该值指定 com.adobe.idp.Document 对象。 下表介绍了AEM Forms返回的各种内容类型。

MIME类型
描述
application/pdf
PDF文档
application/vnd.adobe.xdp+xml
XML数据打包(XDP) ,用于导出的XML Forms架构(XFA)表单
text/xml
书签、附件或其他XML文档
application/vnd.fdf
Forms数据格式(FDF),用于导出的Acrobat表单
application/vnd.adobe.xfdf
XML Forms数据格式(XFDF),用于导出的Acrobat表单
application/rdf+xml
丰富的数据格式和XML
application/octet-stream
通用数据格式
NULL
未指定的MIME类型

以下代码示例确定 com.adobe.idp.Document 对象。

确定文档对象的内容类型

 //Determine the content type of the Document object
 String ct = myDocument.getContentType();
 System.out.println("The content type of the Document object is " +ct);

另请参阅

使用Java API调用AEM Forms

设置连接属性

处置文档对象 disposing-document-objects

当您不再需要 Document 对象,建议您通过调用其 dispose 方法。 每个 Document 对象在应用程序的主机平台上占用一个文件描述符和高达75 MB的RAM空间。 如果 Document 对象未释放,则Java车库收集进程会将其释放。 但是,通过使用 dispose 方法,您可以释放 Document 对象。

另请参阅

使用Java API调用AEM Forms

包括AEM Forms Java库文件

使用Java客户端库调用服务

使用Java客户端库调用服务 invoking-a-service-using-a-java-client-library

AEM Forms服务操作可以通过使用服务的强类型API(称为Java客户端库)调用。 A Java客户端库 是一组具体类,用于提供对服务容器中部署的服务的访问权限。 实例化表示要调用的服务的Java对象,而不是创建 InvocationRequest 对象。 调用API用于调用进程,例如在Workbench中创建的长期进程。 (请参阅 调用以人为中心的长期进程.)

要执行服务操作,请调用属于Java对象的方法。 Java客户端库包含的方法通常使用服务操作进行一对一映射。 使用Java客户端库时,设置所需的连接属性。 (请参阅 设置连接属性.)

设置连接属性后,创建 ServiceClientFactory 用于实例化允许调用服务的Java对象的对象。 每个具有Java客户端库的服务都有一个相应的客户端对象。 例如,要调用Repository服务,请创建 ResourceRepositoryClient 对象,使用它的构造函数传递 ServiceClientFactory 对象。 此 ServiceClientFactory 对象负责维护调用AEM Forms服务所需的连接设置。

尽管获得 ServiceClientFactory 通常速度快,在首次使用工厂时会产生一些开销。 此对象针对重用进行了优化,因此,如果可能,请使用它 ServiceClientFactory 对象。 即,不要创建单独的 ServiceClientFactory 您创建的每个客户端库对象的对象。

有一个用户管理器设置可控制位于以下位置中的SAML断言的生命周期: com.adobe.idp.Context 影响 ServiceClientFactory 对象。 此设置控制整个AEM Forms中的所有身份验证上下文生命周期,包括使用Java API执行的所有调用。 默认情况下, ServiceCleintFactory 对象可使用两个小时。

NOTE
要说明如何使用Java API调用服务,存储库服务的 writeResource 操作被调用。 此操作会将新资源放入存储库中。

通过使用 Java 客户机库并执行以下步骤,可以调用存储库服务:

  1. 在 Java 项目的类路径中包含客户机 JAR 文件,如adobe-repository-client.jar。 有关这些文件的位置的信息,请参阅 包括AEM Forms Java库文件

  2. 设置调用服务所需的连接属性。

  3. 创建 ServiceClientFactory 对象,方法是调用 ServiceClientFactory 对象的静态 createInstance 方法和传递 java.util.Properties 包含连接属性的对象。

  4. 创建 ResourceRepositoryClient 对象,使用它的构造函数传递 ServiceClientFactory 对象。 ResourceRepositoryClient使用该对象调用存储库服务操作。

  5. RepositoryInfomodelFactoryBean使用对象的构造函数创建对象并传递 null.此对象允许您创建一个 Resource 对象,该对象表示添加到存储库的内容。

  6. Resource通过调用RepositoryInfomodelFactoryBean对象的方法newImage并传递以下值来创建对象:

    • 通过指定 new Id()的唯一 ID 值。
    • 通过指定唯一的UUID值 new Lid().
    • 资源的名称。 您可以指定XDP文件的文件名。

    将返回值强制转换为 Resource.

  7. 创建 ResourceContent 对象,方法是调用 RepositoryInfomodelFactoryBean 对象的 newImage 将返回值转换到的方法 ResourceContent. 此对象表示添加到存储库的内容。

  8. 创建 com.adobe.idp.Document 对象传递 java.io.FileInputStream 存储要添加到存储库的XDP文件的对象。 (请参阅 基于InputStream对象创建文档.)

  9. 添加的内容 com.adobe.idp.Document 对象 ResourceContent 对象,方法是调用 ResourceContent 对象的 setDataDocument 方法。 传递 com.adobe.idp.Document 对象。

  10. 通过调用,设置要添加到存储库的XDP文件的MIME类型 ResourceContent 对象的 setMimeType 方法和传递 application/vnd.adobe.xdp+xml.

  11. 添加的内容 ResourceContent 对象 Resource 对象,方法是调用 Resource 对象 setContent 方法和传递 ResourceContent 对象。

  12. 通过调用 Resource 对象 setDescription 方法,并传递表示资源描述的字符串值。

  13. 通过调用 ResourceRepositoryClient 对象的 writeResource 方法并传递以下值:

    • 一个字符串值,它指定包含新资源的资源集合的路径
    • Resource 已创建的对象

另请参阅

快速入门(EJB模式):使用Java API编写资源

使用Java API调用AEM Forms

包括AEM Forms Java库文件

使用调用API调用短期进程 invoking-a-short-lived-process-using-the-invocation-api

您可以使用Java调用API调用短期进程。 当您使用调用API调用短期进程时,您通过使用 java.util.HashMap 对象。 对于要传递给服务的每个参数,调用 java.util.HashMap 对象的 put 方法并指定服务执行指定操作所需的名称 — 值对。 指定属于短期进程的参数的确切名称。

NOTE
有关调用长生命周期进程的信息,请参阅 调用以人为中心的长期进程.

此处的讨论是关于使用调用API来调用以下名为的AEM Forms短期进程 MyApplication/EncryptDocument.

NOTE
此流程并非基于现有的AEM Forms流程。 要遵循代码示例,请创建一个名为的进程 MyApplication/EncryptDocument 使用Workbench。 (请参阅 使用Workbench.)

调用此进程时,将执行以下操作:

  1. 获取传递到进程的不安全PDF文档。 此操作基于 SetValue 操作。 此进程的输入参数为 document 进程变量已命名 inDoc.
  2. 使用密码加密PDF文档。 此操作基于 PasswordEncryptPDF 操作。 密码加密的PDF文档在名为的进程变量中返回 outDoc.

使用Java调用API调用MyApplication/EncryptDocument短暂进程 invoke-the-myapplication-encryptdocument-short-lived-process-using-the-java-invocation-api

调用 MyApplication/EncryptDocument 使用Java调用API的短暂进程:

  1. 将客户端JAR文件(如adobe-livecycle-client.jar)包含在Java项目的类路径中。 (请参阅 包括AEM Forms Java库文件.)

  2. 创建 ServiceClientFactory 包含连接属性的对象。 (请参阅 设置连接属性.)

  3. 创建 ServiceClient 对象,使用它的构造函数传递 ServiceClientFactory 对象。 A ServiceClient 对象允许您调用服务操作。 它处理诸如定位、分派和路由调用请求等任务。

  4. 创建 java.util.HashMap 对象。

  5. 调用 java.util.HashMap 对象的 put 方法用于将每个输入参数传递到长生命周期进程。 因为 MyApplication/EncryptDocument 短期进程需要一个类型为的输入参数 Document,您只需调用 put 方法一次,如以下示例所示。

    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);
    
  6. 创建 InvocationRequest 对象,方法是调用 ServiceClientFactory 对象的 createInvocationRequest 方法并传递以下值:

    • 一个字符串值,它指定要调用的长生命周期进程的名称。 要调用 MyApplication/EncryptDocument 进程,指定 MyApplication/EncryptDocument.
    • 表示流程操作名称的字符串值。 通常,短期进程操作的名称是 invoke.
    • java.util.HashMap 包含服务操作所需的参数值的对象。
    • 一个布尔值,它指定 true,这将创建一个同步请求(此值适用于调用短期进程)。
  7. 通过调用 ServiceClient 对象的 invoke 方法和传递 InvocationRequest 对象。 此 invoke 方法返回 InvocationReponse 对象。

    note note
    NOTE
    可以通过传递值来调用长生命周期进程 false作为 createInvocationRequest 方法。 传递值 false创建异步请求。
  8. 通过调用 InvocationReponse 对象的 getOutputParameter 方法,并传递一个指定输出参数名称的字符串值。 在这种情况下,请指定 outDoc ( outDoc 是的输出参数的名称 MyApplication/EncryptDocument 流程)。 将返回值强制转换为 Document,如以下示例所示。

    code language-java
     InvocationResponse response = myServiceClient.invoke(request);
     Document encryptDoc = (Document) response.getOutputParameter("outDoc");
    
  9. 创建 java.io.File 对象并确保文件扩展名为.pdf。

  10. 调用 com.adobe.idp.Document 对象的 copyToFile 用于复制 com.adobe.idp.Document 对象到文件。 确保您使用 com.adobe.idp.Document 返回的对象 getOutputParameter 方法。

另请参阅

快速入门:使用调用API调用短期进程

调用以人为中心的长期进程

包括AEM Forms Java库文件

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2