本檔案中的範例和範例僅適用於JEE環境上的AEM Forms 。
可使用AEM Forms Java API叫用AEM Forms。 使用AEM Forms Java API時,您可以使用叫用API或Java使用者端程式庫。 Java使用者端程式庫可用於Rights Management服務之類的服務。 這些強型別API可讓您開發叫用AEM Forms的Java應用程式。
Invocation API是位於 com.adobe.idp.dsc
封裝。 使用這些類別,您可以直接將叫用要求傳送給服務,並處理傳回的叫用回應。 使用叫用API來叫用使用Workbench建立的短期或長期程式。
以程式設計方式叫用服務的建議方法是使用與服務相對應的Java使用者端程式庫,而不是叫用API。 例如,若要叫用Encryption服務,請使用Encryption服務使用者端程式庫。 若要執行Encryption service作業,請叫用屬於Encryption service使用者端物件的方法。 PDF您可以叫用 EncryptionServiceClient
物件的 encryptPDFUsingPassword
方法。
Java API支援下列功能:
若要使用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 |
呼叫Application Manager服務時需要。 |
<安裝目錄>/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 |
呼叫Document Management服務時需要。 |
<安裝目錄>/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 |
|
呼叫Rights Management服務時需要。 如果AEM Forms部署在JBoss上,請包含所有這些檔案。 |
<安裝目錄>/sdk/client-libs/common JBoss特定程式庫目錄 |
adobe-signatures-client.jar |
需要才能叫用Signature service。 |
<安裝目錄>/sdk/client-libs/common |
adobe-taskmanager-client-sdk.jar |
呼叫Task Manager服務時需要。 |
<安裝目錄>/sdk/client-libs/common |
adobe-truststore-client.jar |
必須呼叫信任存放區服務。 |
<安裝目錄>/sdk/client-libs/common |
下表列出JAR檔案,這些檔案取決於連線模式以及部署AEM Forms的J2EE應用程式伺服器。
檔案 |
說明 |
位置 |
---|---|---|
|
如果使用SOAP模式叫用AEM Forms,請包含這些JAR檔案。 |
<安裝目錄>/sdk/client-libs/thirdparty |
jboss-client.jar |
如果AEM Forms部署在JBoss Application Server上,請包含此JAR檔案。 如果jboss-client.jar和參照的jar不在同一位置,Classloader將無法找到所需的類別。 |
JBoss使用者端程式庫目錄 如果您將使用者端應用程式部署在同一J2EE應用程式伺服器上,則不需要包含此檔案。 |
wlclient.jar |
如果AEM Forms部署在BEA WebLogic Server®上,則包含此JAR檔案。 |
WebLogic專用程式庫目錄 如果您將使用者端應用程式部署在同一J2EE應用程式伺服器上,則不需要包含此檔案。 |
|
|
WebSphere專用程式庫目錄([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
. 視部署AEM Forms的J2EE應用程式伺服器而定,請指定下列其中一個值:
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
connection屬性中,您可以使用 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上並使用EJB連線模式的AEM Forms。
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上並使用EJB連線模式的AEM Forms。
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上並使用EJB連線模式的AEM Forms。
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
屬性。 您可以取得 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表單使用者叫用服務時,請確定他們擁有名為的角色 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
下列範例顯示用來連線至WebSphere上所部署AEM Forms的jndi.properties檔案內容。
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類別為 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中的可流程配置.
防止使用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();
另請參閱
建立 com.adobe.idp.Document
物件,然後再叫用需要PDF檔案(或其他檔案型別)作為輸入值的服務作業。 此 com.adobe.idp.Document
class提供建構函式,可讓您從下列內容型別建立檔案:
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硬碟的根目錄。 此建構函式會嘗試設定的MIME內容型別 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通訊協定傳回的內容型別。
提供給 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
代表 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
物件。
決定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
物件,代表您建立的每個使用者端程式庫物件。
使用者管理員設定可控制位於內的SAML判斷提示的存留期 com.adobe.idp.Context
影響 ServiceClientFactory
物件。 此設定會控制整個AEM Forms的所有驗證內容存留期,包括使用Java API執行的所有叫用。 依預設,指 ServiceCleintFactory
物件可使用兩個小時。
若要說明如何使用Java API叫用服務,存放庫服務的 writeResource
已叫用作業。 此操作會將新資源放入存放庫。
您可以使用Java使用者端程式庫並執行下列步驟來叫用儲存庫服務:
在您的Java專案的類別路徑中包含使用者端JAR檔案,例如adobe-repository-client.jar。 如需有關這些檔案位置的資訊,請參閱 包含AEM Forms Java程式庫檔案.
設定呼叫服務所需的連線屬性。
建立 ServiceClientFactory
物件(透過叫用 ServiceClientFactory
物件的靜態 createInstance
方法和傳遞 java.util.Properties
包含連線屬性的物件。
建立 ResourceRepositoryClient
物件,使用它的建構函式並傳遞 ServiceClientFactory
物件。 使用 ResourceRepositoryClient
物件以叫用儲存庫服務作業。
建立 RepositoryInfomodelFactoryBean
物件(使用其建構函式和pass) 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
物件 setContent
方法和傳遞 ResourceContent
物件。
透過叫用資源來新增資源的說明 Resource
物件 setDescription
方法並傳遞代表資源說明的字串值。
透過叫用 ResourceRepositoryClient
物件的 writeResource
並傳遞下列值:
Resource
已建立的物件另請參閱
您可以使用Java Invocation 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
process)。 將傳回值轉換為 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
方法。
另請參閱