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
方法,以密碼加密PDF檔案。
Java API支援下列功能:
另請參閱
建立調用以人為中心的長生命週期過程的Java Web應用程式
要使用Java API以寫程式方式調用AEM Forms服務,請在Java項目的類路徑中包括所需的庫檔案(JAR檔案)。 您在客戶端應用程式的類路徑中包括的JAR檔案取決於以下幾個因素:
(僅交鑰匙)使用standalone.bat -b <Server IP> -c lc_turnkey.xml
命令啟動AEM Forms伺服器,以指定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 |
調用生成3D PDF服務時需要。 |
<>安裝目錄>/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專用的lib目錄 |
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 Application Server上,請包含此JAR檔案。 如果jboss-client.jar和引用的jar不是共用的,則類載入器將找不到所需類。 |
JBoss客戶端庫目錄 如果將客戶端應用程式部署在同一個J2EE應用程式伺服器上,則無需包含此檔案。 |
wlclient.jar |
如果AEM Forms部署在BEA WebLogic Server®上,則包括此JAR檔案。 |
WebLogic特定庫目錄 如果將客戶端應用程式部署在同一個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應用程式伺服器是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
屬性設定為符合您要求的值。您可以使用ServiceClientFactoryProperties
類的靜態成員,而不使用字串來設定DSC_SERVER_TYPE
連接屬性。 可使用下列值: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 Application Server上的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
屬性。 使用AuthenticationManagerServiceClient
對象的authenticate
方法驗證用戶時,可以獲取com.adobe.idp.Context
對象。
authenticate
方法返回包含驗證結果的AuthResult
對象。 可以通過調用其建構子來建立com.adobe.idp.Context
對象。 然後調用com.adobe.idp.Context
對象的initPrincipal
方法並傳遞AuthResult
對象,如以下代碼所示:
Context myCtx = new Context();
myCtx.initPrincipal(authResult);
您可以叫用ServiceClientFactory
物件的setContext
方法並傳遞com.adobe.idp.Context
物件,而不設定DSC_CREDENTIAL_USERNAME
或DSC_CREDENTIAL_PASSWORD
屬性。 使用AEM表單使用者叫用服務時,請確定他們擁有叫用AEM Forms服務所需的角色Services User
。
下列程式碼範例說明如何在用來建立EncryptionServiceClient
物件的連線設定中使用com.adobe.idp.Context
物件。
//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
以下示例顯示用於連接到部署在WebSphere上的AEM Forms的jndi.properties檔案的內容。
java.naming.factory.initial=com.ibm.websphere.naming.
WsnInitialContextFactory
java.naming.provider.url=corbaloc::appserver1:9810,:appserver2:9810
WebLogic
以下示例顯示用於連接到部署在WebLogic上的AEM Forms的jndi.properties檔案的內容。
java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
java.naming.provider.url=t3://appserver1:8001, appserver2:8001
JBoss
以下示例顯示用於連接到部署在JBoss上的AEM Forms的jndi.properties檔案的內容。
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類別為com.adobe.idp.Document
。
AEM Forms服務不接受PDF檔案作為其他資料類型,例如java.io.InputStream
物件或位元組陣列。 com.adobe.idp.Document
物件也可用來將其他類型的資料(例如XML資料)傳遞至服務。
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
對象時防止WebLogic中的記憶體洩漏,請以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();
另請參閱
在調用需要PDF文檔(或其他文檔類型)作為輸入值的服務操作之前,建立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);
下列程式碼範例會根據名為map.pdf的PDF檔案建立com.adobe.idp.Document
物件。 此檔案位於C硬碟的根目錄中。 此建構子嘗試使用副檔名設定com.adobe.idp.Document
對象的MIME內容類型。
接受java.io.File
對象的com.adobe.idp.Document
建構子也接受布爾參數。 將此參數設定為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代碼示例建立基於java.io.InputStream
對象的com.adobe.idp.Document
對象。
根據InputStream對象建立文檔
//Create a Document object based on an InputStream object
InputStream is = new FileInputStream("C:\\Map.pdf");
Document myPDFDocument = new Document(is);
以下Java代碼示例基於名為map.pdf的PDF檔案建立com.adobe.idp.Document
對象。 此檔案位於localhost
上運行的名為WebApp
的Web應用程式中。 此建構子嘗試使用隨URL協定返回的內容類型來設定com.adobe.idp.Document
對象的MIME內容類型。
提供給com.adobe.idp.Document
對象的URL始終在建立原始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
代表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
對象的內容複製到名為OtherMap.pdf的檔案。
將文檔對象的內容複製到檔案
File outFile = new File("C:\\AnotherMap.pdf");
myDocument.copyToFile (outFile);
另請參閱
調用com.adobe.idp.Document
對象的getContentType
方法,確定com.adobe.idp.Document
對象的MIME類型。 此方法會傳回字串值,指定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來叫用,此API稱為Java用戶端程式庫。 Java客戶端庫是一組具體類,它提供對服務容器中部署的服務的訪問。 使用調用API實例化表示要調用的服務的Java對象,而不是建立InvocationRequest
對象。 叫用API可用來叫用在Workbench中建立的程式,例如長期使用的程式。 (請參閱調用以人為中心的長壽命進程。)
要執行服務操作,請調用屬於Java對象的方法。 Java用戶端程式庫包含通常會將一對一與服務操作對應的方法。 使用Java客戶端庫時,請設定所需的連接屬性。 (請參閱設定連接屬性。)
設定連接屬性後,建立ServiceClientFactory
對象,該對象用於實例化允許您調用服務的Java對象。 每個具有Java客戶端庫的服務都有相應的客戶端對象。 例如,要調用Repository服務,請使用其建構子並傳遞ServiceClientFactory
對象來建立ResourceRepositoryClient
對象。 ServiceClientFactory
物件負責維護叫用AEM Forms服務所需的連線設定。
雖然獲取ServiceClientFactory
通常速度很快,但首次使用工廠時會涉及一些開銷。 此對象已優化,以便重複使用,因此,如果可能,在建立多個Java客戶端對象時,請使用相同的ServiceClientFactory
對象。 也就是說,請勿為您建立的每個客戶端庫對象建立單獨的ServiceClientFactory
對象。
有一個「用戶管理器」設定,它控制com.adobe.idp.Context
對象內影響ServiceClientFactory
對象的SAML聲明的存留期。 此設定會控制整個AEM Forms中的所有驗證內容存留期,包括使用Java API執行的所有叫用。 預設情況下,可使用ServiceCleintFactory
對象的時段為2小時。
要說明如何使用Java API調用服務,將調用儲存庫服務的writeResource
操作。 此操作會將新資源放入儲存庫。
您可以使用Java客戶端庫並執行以下步驟來調用儲存庫服務:
在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-repository-client.jar。 有關這些檔案的位置資訊,請參閱包含AEM Forms Java庫檔案。
設定調用服務所需的連接屬性。
調用ServiceClientFactory
對象的靜態createInstance
方法並傳遞包含連接屬性的java.util.Properties
對象,建立ServiceClientFactory
對象。
使用其建構子並傳遞ServiceClientFactory
物件,以建立ResourceRepositoryClient
物件。 使用ResourceRepositoryClient
對象調用儲存庫服務操作。
使用其建構子建立RepositoryInfomodelFactoryBean
物件,並傳遞null
。 此物件可讓您建立Resource
物件,用來代表新增至存放庫的內容。
調用RepositoryInfomodelFactoryBean
對象的newImage
方法並傳遞以下值,建立Resource
對象:
new Id()
的唯一ID值。new Lid()
的唯一UUID值。將傳回值轉換為Resource
。
調用RepositoryInfomodelFactoryBean
對象的newImage
方法並將返回值轉換為ResourceContent
,建立ResourceContent
對象。 此物件代表新增至存放庫的內容。
通過傳遞java.io.FileInputStream
對象來建立com.adobe.idp.Document
對象,該對象儲存要添加到儲存庫的XDP檔案。 (請參閱根據InputStream對象建立文檔。)
調用ResourceContent
對象的setDataDocument
方法,將com.adobe.idp.Document
對象的內容添加到ResourceContent
對象。 傳遞com.adobe.idp.Document
物件。
調用ResourceContent
對象的setMimeType
方法並傳遞application/vnd.adobe.xdp+xml
,設定要添加到儲存庫的XDP檔案的MIME類型。
調用Resource
對象的setContent
方法並傳遞ResourceContent
對象,將ResourceContent
對象的內容添加到Resource
對象。
調用Resource
對象的setDescription
方法並傳遞表示資源說明的字串值,以添加資源的說明。
叫用ResourceRepositoryClient
物件的writeResource
方法並傳遞下列值,將表單設計新增至存放庫:
Resource
對象另請參閱
您可以使用Java調用API調用短期進程。 使用調用API調用短期進程時,需使用java.util.HashMap
對象傳遞所需的參數值。 對於要傳遞到服務的每個參數,調用java.util.HashMap
對象的put
方法,並指定服務所需的名稱值對,以執行指定的操作。 指定屬於短期進程的參數的確切名稱。
有關調用長壽命進程的資訊,請參見調用以人為中心的長壽命進程。
這裡討論的是使用叫用API來叫用下列名為MyApplication/EncryptDocument
的AEM Forms短期處理程式。
此程式並非以現有的AEM Forms程式為基礎。 若要遵循程式碼範例,請使用Workbench建立名為MyApplication/EncryptDocument
的程式。 (請參閱使用Workbench。)
叫用此程式時,會執行下列動作:
SetValue
操作。 此進程的輸入參數是名為inDoc
的document
進程變數。PasswordEncryptPDF
操作。 在名為outDoc
的進程變數中返回密碼加密的PDF文檔。使用Java調用API調用MyApplication/EncryptDocument
短期進程:
在您Java專案的類別路徑中加入用戶端JAR檔案,例如adobe-livecycle-client.jar。 (請參閱包含AEM Forms Java程式庫檔案。)
建立包含連接屬性的ServiceClientFactory
對象。 (請參閱設定連接屬性。)
使用其建構子並傳遞ServiceClientFactory
物件,以建立ServiceClient
物件。 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);
調用ServiceClientFactory
對象的createInvocationRequest
方法並傳遞以下值,建立InvocationRequest
對象:
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
對象的內容複製到檔案。 請確定您使用getOutputParameter
方法傳回的com.adobe.idp.Document
物件。
另請參閱