AEM Forms可以使用AEM Forms Java API进行调用。 使用AEM Forms Java API时,可以使用调用API或Java客户端库。 Java客户端库可用于服务,如Rights Management服务。 通过这些强键入API,您可以开发调用AEM Forms的Java应用程序。
调用API是位于 com.adobe.idp.dsc
包。 使用这些类,您可以直接将调用请求发送到服务并处理返回的调用响应。 使用调用API来调用使用Workbench创建的短期或长期进程。
以编程方式调用服务的建议方法是使用与服务相对应的Java客户端库,而不是调用API。 例如,要调用加密服务,请使用加密服务客户端库。 要执行加密服务操作,请调用属于加密服务客户端对象的方法。 您可以通过调用 EncryptionServiceClient
对象 encryptPDFUsingPassword
方法。
Java API支持以下功能:
另请参阅
创建一个Java Web应用程序,该应用程序会调用以人为中心的长寿过程
要通过使用Java API以编程方式调用AEM Forms服务,请在Java项目的类路径中包含必需的库文件(JAR文件)。 您在客户端应用程序的类路径中包含的JAR文件取决于以下几个因素:
(仅限统包)使用命令启动AEM Forms服务器 standalone.bat -b <Server IP> -c lc_turnkey.xml
为EJB指定服务器IP。
下表列出了调用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 |
调用汇编程序服务时需要。 |
<安装目录>/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 |
调用输出服务时需要。 |
<安装目录>/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 |
|
调用Rights Management服务时需要。 如果AEM Forms已部署在JBoss上,请包含所有这些文件。 |
<安装目录>/sdk/client-libs/common JBoss特定库目录 |
adobe-signatures-client.jar |
调用签名服务时需要。 |
<安装目录>/sdk/client-libs/common |
adobe-taskmanager-client-sdk.jar |
需要调用任务管理器服务。 |
<安装目录>/sdk/client-libs/common |
adobe-truststore-client.jar |
调用信任存储服务时需要。 |
<安装目录>/sdk/client-libs/common |
下表列出了依赖于连接模式和部署了AEM Forms的J2EE应用程序服务器的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的lib目录 如果在同一J2EE应用程序服务器上部署客户端应用程序,则无需包含此文件。 |
|
|
特定于WebSphere的lib目录([WAS_HOME]/runtimes) 如果您在同一J2EE应用程序服务器上部署客户端应用程序,则不必包含这些文件。 |
下表指定调用方案,并列出成功调用AEM Forms所需的JAR文件。
服务 |
调用模式 |
J2EE应用程序服务器 |
所需的JAR文件 |
---|---|---|---|
Forms服务 |
EJB |
JBoss |
|
Forms服务 Acrobat Reader DC扩展服务 签名服务 |
EJB |
JBoss |
|
Forms服务 |
SOAP |
WebLogic |
|
Forms服务 Acrobat Reader DC扩展服务 签名服务 |
SOAP |
WebLogic |
|
如果您从LiveCycle升级到AEM Forms,建议将AEM Forms JAR文件包含在Java项目的类路径中。 例如,如果您使用的是Rights Management服务等服务,那么如果类路径中未包含AEM Forms JAR文件,则将会遇到兼容性问题。
假设您要升级到AEM Forms。 要使用调用Rights Management服务的Java应用程序,请包括以下JAR文件的AEM Forms版本:
另请参阅
使用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
. 根据部署了J2EE应用程序服务器AEM Forms的,指定以下值之一:
https://<ServerName>:8080 (default port)
iiop://<ServerName>:2809 (default port)
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应用程序服务器。 有效值为 JBoss
, WebSphere
, WebLogic
.
WebSphere
, java.naming.factory.initial
值设置为 com.ibm.ws.naming.util.WsnInitCtxFactory
.WebLogic
, java.naming.factory.initial
值设置为 weblogic.jndi.WLInitialContextFactory
.JBoss
, java.naming.factory.initial
值设置为 org.jnp.interfaces.NamingContextFactory
.java.naming.factory.initial
属性到符合您要求的值(如果您不想使用默认值)。而不是使用字符串来设置 DSC_SERVER_TYPE
连接属性,则可以使用 ServiceClientFactoryProperties
类。 可以使用以下值: ServiceClientFactoryProperties.DSC_WEBSPHERE_SERVER_TYPE
, ServiceClientFactoryProperties.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属性。
要设置连接属性,请执行以下任务:
创建 java.util.Properties
对象。
设置 DSC_DEFAULT_EJB_ENDPOINT
连接属性,调用 java.util.Properties
对象 setProperty
方法并传递以下值:
ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT
明细值如果您使用的是SOAP连接模式,请指定 ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT
枚举值,而不是 ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT
枚举值。
设置 DSC_TRANSPORT_PROTOCOL
连接属性,调用 java.util.Properties
对象 setProperty
方法并传递以下值:
ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL
明细值ServiceClientFactoryProperties.DSC_EJB_PROTOCOL
明细值如果您使用的是SOAP连接模式,请指定 ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL
枚举值,而不是 ServiceClientFactoryProperties.DSC_EJB_PROTOCOL
枚举值。
设置 DSC_SERVER_TYPE
连接属性,调用 java.util.Properties
对象 setProperty
方法并传递以下值:
的 ServiceClientFactoryProperties.DSC_SERVER_TYPE
明细值
一个字符串值,用于指定托管AEM Forms的J2EE应用程序服务器(例如,如果AEM Forms已部署在JBoss上,请指定 JBoss
)。
DSC_CREDENTIAL_USERNAME
连接属性,调用 java.util.Properties
对象 setProperty
方法并传递以下值:的 ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME
明细值
一个字符串值,用于指定调用AEM Forms所需的用户名
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");
如果选择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");
所有与使用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_USERNAME
或 DSC_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_USERNAME
或 DSC_CREDENTIAL_PASSWORD
属性,则可以调用 ServiceClientFactory
对象 setContext
方法和通过 com.adobe.idp.Context
对象。 使用AEM Forms用户调用服务时,请确保他们的角色名为 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);
有关对用户进行身份验证的完整详细信息,请参阅 验证用户.
本节将讨论以下调用方案:
下图显示了在其自身的JVM中运行并调用独立的AEM Forms实例的客户端应用程序。
在此方案中,客户端应用程序在其自身的JVM中运行并调用AEM Forms服务。
此方案是所有快速入门都基于的调用方案。
下图显示了在其自身的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
以下示例显示了jndi.properties文件的内容,该文件用于连接到部署在WebLogic上的AEM Forms。
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://appserver1:8001, appserver2:8001
JBoss
以下示例显示了jndi.properties文件的内容,该文件用于连接到部署在JBoss上的AEM Forms。
java.naming.factory.initial= org.jnp.interfaces.NamingContextFactory
java.naming.provider.url= jnp://appserver1:1099, appserver2:1099,
appserver3:1099
请咨询管理员以确定J2EE应用程序服务器名称和端口号。
另请参阅
AEM Forms服务操作通常会消耗或生成PDF文档。 调用服务时,有时需要将PDF文档(或其他文档类型,如XML数据)传递到服务。 同样,有时也需要处理从服务返回的PDF文档。 用于将数据传递到AEM Forms服务和从Java服务传递数据的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.Document
和 org.w3c.dom.Document
数据类型。 但是,请确保您完全符合 org.w3c.dom.Document
数据类型。 有关转换 org.w3c.dom.Document
对象 com.adobe.idp.Document
对象,请参阅 快速启动(EJB模式):使用Java API使用可流动布局预填充Forms.
在使用 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();
另请参阅
创建 com.adobe.idp.Document
对象。 的 com.adobe.idp.Document
类提供使您能够从以下内容类型创建文档的构造函数:
com.adobe.idp.Document
对象java.io.File
对象java.io.InputStream
对象java.net.URL
对象以下代码示例将创建 com.adobe.idp.Document
基于字节数组的对象。
创建基于字节数组的文档对象
Document myPDFDocument = new Document(myByteArray);
以下代码示例将创建 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);
以下代码示例将创建 com.adobe.idp.Document
基于名为的PDF文件的对象 map.pdf. 此文件位于C硬盘的根目录中。 此构造函数尝试设置 com.adobe.idp.Document
对象。
的 com.adobe.idp.Document
接受的构造函数 java.io.File
对象还接受布尔参数。 通过将此参数设置为 true
, com.adobe.idp.Document
对象会删除文件。 此操作意味着您将文件传递到 com.adobe.idp.Document
构造函数。
将此参数设置为 false
表示您保留此文件的所有权。 将此参数设置为 true
效率更高。 原因是 com.adobe.idp.Document
对象可以将文件直接移动到本地管理区域,而不是复制文件(速度较慢)。
创建基于文档文件的文档对象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);
以下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);
以下Java代码示例将创建 com.adobe.idp.Document
基于名为的PDF文件的对象 map.pdf. 此文件位于名为 WebApp
正在运行 localhost
. 此构造函数尝试设置 com.adobe.idp.Document
对象的MIME内容类型,使用通过URL协议返回的内容类型。
提供给的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);
另请参阅
将PDF文档(或其他数据类型,如XML数据)返回为输出值的服务操作返回 com.adobe.idp.Document
对象。 在您收到 com.adobe.idp.Document
对象时,可以将其转换为以下格式:
java.io.File
对象java.io.InputStream
对象以下代码行将 com.adobe.idp.Document
对象 java.io.InputStream
对象。 假设 myPDFDocument
表示a com.adobe.idp.Document
对象:
java.io.InputStream resultStream = myDocument.getInputStream();
同样,您可以复制 com.adobe.idp.Document
执行以下任务,以将文件复制到本地文件:
java.io.File
对象。com.adobe.idp.Document
对象 copyToFile
方法和通过 java.io.File
对象。以下代码示例复制 com.adobe.idp.Document
对象到名为的文件 AnotherMap.pdf.
将文档对象的内容复制到文件
File outFile = new File("C:\\AnotherMap.pdf");
myDocument.copyToFile (outFile);
另请参阅
确定的MIME类型 com.adobe.idp.Document
对象 com.adobe.idp.Document
对象 getContentType
方法。 此方法会返回一个字符串值,用于指定 com.adobe.idp.Document
对象。 下表介绍了AEM Forms返回的不同内容类型。
MIME类型 |
描述 |
---|---|
|
PDF文档 |
|
XML数据包(XDP),用于导出的XML Forms架构(XFA)表单 |
|
书签、附件或其他XML文档 |
|
Forms数据格式(FDF),用于导出的Acrobat表单 |
|
XML Forms数据格式(XFDF),用于导出的Acrobat表单 |
|
富数据格式和XML |
|
通用数据格式 |
|
未指定的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);
另请参阅
当您不再需要 Document
对象,建议您通过调用 dispose
方法。 每个 Document
对象会在应用程序的主机平台上使用文件描述符和多达75 MB的RAM空间。 如果 Document
对象未处理,则Java Garage收集过程会处理它。 但是,通过使用 dispose
方法,可以释放 Document
对象。
另请参阅
AEM Forms服务操作可使用服务的强类型API(称为Java客户端库)来调用。 A Java客户端库 是一组具体类,用于提供对服务容器中部署的服务的访问权限。 实例化表示要调用的服务的Java对象,而不是创建 InvocationRequest
对象。 调用API用于调用在Workbench中创建的进程,如长期使用的进程。 (请参阅 调用以人为中心的长寿过程.)
要执行服务操作,请调用属于Java对象的方法。 Java客户端库包含通常通过服务操作一对一映射的方法。 使用Java客户端库时,请设置所需的连接属性。 (请参阅 设置连接属性.)
在设置连接属性后,创建 ServiceClientFactory
用于实例化允许调用服务的Java对象的对象。 每个具有Java客户端库的服务都有一个对应的客户端对象。 例如,要调用存储库服务,请创建 ResourceRepositoryClient
对象,并使用其构造函数进行传递 ServiceClientFactory
对象。 的 ServiceClientFactory
对象负责维护调用AEM Forms服务所需的连接设置。
尽管获取 ServiceClientFactory
通常比较快,首次使用工厂时会涉及一些开销。 此对象经过优化以便重复使用,因此,在可能的情况下使用相同的对象 ServiceClientFactory
对象。 也就是说,不要创建单独的 ServiceClientFactory
对象。
有一个用户管理器设置,用于控制位于 com.adobe.idp.Context
影响 ServiceClientFactory
对象。 此设置控制整个AEM Forms中的所有身份验证上下文生命周期,包括使用Java API执行的所有调用。 默认情况下, ServiceCleintFactory
对象的使用时间为2小时。
要说明如何使用Java API(存储库服务的 writeResource
将调用操作。 此操作会将新资源放入存储库中。
您可以通过使用Java客户端库并执行以下步骤来调用存储库服务:
在Java项目的类路径中包含客户端JAR文件,如adobe-repository-client.jar。 有关这些文件位置的信息,请参阅 包括AEM Forms Java库文件.
设置调用服务所需的连接属性。
创建 ServiceClientFactory
对象 ServiceClientFactory
对象的静态 createInstance
方法和通过 java.util.Properties
包含连接属性的对象。
创建 ResourceRepositoryClient
对象,并使用其构造函数进行传递 ServiceClientFactory
对象。 使用 ResourceRepositoryClient
对象来调用存储库服务操作。
创建 RepositoryInfomodelFactoryBean
对象(使用其构造函数和传递) null
. 此对象允许您创建 Resource
表示添加到存储库的内容的对象。
创建 Resource
对象 RepositoryInfomodelFactoryBean
对象 newImage
方法和传递以下值:
new Id()
.new Lid()
.将返回值转换为 Resource
.
创建 ResourceContent
对象 RepositoryInfomodelFactoryBean
对象 newImage
将返回值转换为 ResourceContent
. 此对象表示添加到存储库的内容。
创建 com.adobe.idp.Document
对象 java.io.FileInputStream
用于存储要添加到存储库的XDP文件的对象。 (请参阅 基于InputStream对象创建文档.)
添加 com.adobe.idp.Document
对象 ResourceContent
对象 ResourceContent
对象 setDataDocument
方法。 传递 com.adobe.idp.Document
对象。
通过调用 ResourceContent
对象 setMimeType
方法和传递 application/vnd.adobe.xdp+xml
.
添加 ResourceContent
对象 Resource
对象 Resource
对象s setContent
方法和通过 ResourceContent
对象。
通过调用 Resource
对象s setDescription
方法和传递表示资源描述的字符串值。
通过调用 ResourceRepositoryClient
对象 writeResource
方法和传递以下值:
Resource
创建的对象另请参阅
您可以使用Java调用API调用生命周期较短的进程。 使用调用API调用生命周期较短的进程时,使用 java.util.HashMap
对象。 对于要传递到服务的每个参数,请调用 java.util.HashMap
对象 put
方法和指定服务执行指定操作所需的名称值对。 指定属于短期流程的参数的确切名称。
有关调用长期进程的信息,请参阅 调用以人为中心的长寿过程.
此处讨论的内容是使用调用API调用以下名为的AEM Forms短生命周期进程 MyApplication/EncryptDocument
.
此过程不基于现有的AEM Forms进程。 要遵循代码示例,请创建一个名为 MyApplication/EncryptDocument
使用Workbench。 (请参阅 使用Workbench.)
调用此过程时,会执行以下操作:
SetValue
操作。 此过程的输入参数是 document
进程变量已命名 inDoc
.PasswordEncryptPDF
操作。 密码加密的PDF文档在名为 outDoc
.调用 MyApplication/EncryptDocument
使用Java调用API的短暂进程:
在您Java项目的类路径中包含客户端JAR文件,如adobe-livecycle-client.jar。 (请参阅 包括AEM Forms Java库文件.)
创建 ServiceClientFactory
包含连接属性的对象。 (请参阅 设置连接属性.)
创建 ServiceClient
对象,并使用其构造函数进行传递 ServiceClientFactory
对象。 A ServiceClient
对象允许您调用服务操作。 它处理诸如查找、调度和路由调用请求等任务。
创建 java.util.HashMap
对象。
调用 java.util.HashMap
对象 put
方法,以将每个输入参数传递到长寿命进程。 因为 MyApplication/EncryptDocument
短暂的进程需要一个类型的输入参数 Document
,则只需调用 put
方法一次,如以下示例中所示。
//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);
创建 InvocationRequest
对象 ServiceClientFactory
对象 createInvocationRequest
方法和传递以下值:
MyApplication/EncryptDocument
进程,指定 MyApplication/EncryptDocument
.invoke
.java.util.HashMap
包含服务操作所需参数值的对象。true
,用于创建同步请求(此值适用于调用短期流程)。通过调用 ServiceClient
对象 invoke
方法和通过 InvocationRequest
对象。 的 invoke
方法返回 InvocationReponse
对象。
通过传递值,可以调用一个长期的进程 false
作为 createInvocationRequest
方法。 传递值 false
创建异步请求。
通过调用 InvocationReponse
对象 getOutputParameter
方法和传递指定输出参数名称的字符串值。 在这种情况下,请指定 outDoc
( outDoc
是 MyApplication/EncryptDocument
进程)。 将返回值转换为 Document
,如以下示例中所示。
InvocationResponse response = myServiceClient.invoke(request);
Document encryptDoc = (Document) response.getOutputParameter("outDoc");
创建 java.io.File
对象,并确保文件扩展名为.pdf。
调用 com.adobe.idp.Document
对象 copyToFile
复制内容的方法 com.adobe.idp.Document
对象。 确保使用 com.adobe.idp.Document
由返回的对象 getOutputParameter
方法。
另请参阅