使用Java API調用AEM Forms

AEM Forms可透過使用AEM FormsJava API來呼叫。 使用AEM FormsJava API時,您可以使用Invocation API或Java客戶端庫。 Java客戶端庫可用於服務,如Rights Management服務。 這些強式型別API可讓您開發叫用AEM Forms的Java應用程式。

調用API是位於com.adobe.idp.dsc包中的類。 使用這些類,您可以直接向服務發送調用請求並處理返回的調用響應。 使用「呼叫API」來叫用使用Workbench建立的短期或長期流程。

建議以程式設計方式叫用服務的方式是使用與服務對應的Java用戶端程式庫,而非叫用API。 例如,要調用加密服務,請使用加密服務客戶端庫。 要執行加密服務操作,請調用屬於加密服務客戶端對象的方法。 您可以叫用EncryptionServiceClient物件的encryptPDFUsingPassword方法,以密碼加密PDF檔案。

Java API支援下列功能:

  • 用於遠程調用的RMI傳輸協定
  • 用於本地調用的虛擬機傳輸
  • 用於遠程調用的SOAP
  • 不同的驗證,例如使用者名稱和密碼
  • 同步和非同步呼叫請求

Adobe開發人員網站

Adobe開發人員網站包含下列文章,討論如何使用Java API叫用AEM Forms服務:

使用Java servlet調用AEM Forms進程

從Java叫用AEM FormsDistillerAPI

另請參閱

包含AEM FormsJava庫檔案

調用以人為中心的長壽命進程

使用Web Services叫用AEM Forms

設定連接屬性

使用Java API將資料傳送至AEM Forms服務

使用Java客戶端庫調用服務

使用調用API調用短期進程

建立Java Web應用程式,以叫用以人為中心的長壽命程式

包含AEM FormsJava庫檔案

若要使用Java API以程式設計方式叫用AEM Forms服務,請在Java專案的類路徑中加入必要的程式庫檔案(JAR檔案)。 您在客戶端應用程式的類路徑中包含的JAR檔案取決於以下幾個因素:

  • AEM Forms的呼叫服務。 客戶端應用程式可以調用一個或多個服務。
  • 您要叫用AEM Forms服務的模式。 您可以使用EJB或SOAP模式。 (請參閱設定連接屬性。)
注意

(僅交鑰匙)使用命令standalone.bat -b <Server IP> -c lc_turnkey.xml啟動AEM Forms伺服器,以指定EJB的伺服器IP。

  • 部署AEM Forms的J2EE應用程式伺服器。

服務特定的JAR檔案

下表列出調用AEM Forms服務所需的JAR檔案。

檔案

說明

位置

adobe-livecycle-client.jar

必須一律包含在Java用戶端應用程式的類別路徑中。

<>install directory>/sdk/client-libs/common

adobe-usermanager-client.jar

必須一律包含在Java用戶端應用程式的類別路徑中。

<>install directory>/sdk/client-libs/common

adobe-utilities.jar

必須一律包含在Java用戶端應用程式的類別路徑中。

<>install directory>/sdk//client-libs/<app server="">

adobe-applicationmanager-client-sdk.jar

調用應用程式管理器服務時必需。

<>install directory>/sdk/client-libs/common

adobe-assembler-client.jar

調用Assembler服務所需。

<>install directory>/sdk/client-libs/common

adobe-backup-restore-client-sdk.jar

調用備份和還原服務API時必需。

<>install directory>/sdk/client-libs/common

adobe-barcodedforms-client.jar

呼叫條形碼表單服務所需。

<>install directory>/sdk/client-libs/common

adobe-convertpdf-client.jar

需要叫用轉換PDF服務。

<>install directory>/sdk/client-libs/common

adobe-distiller-client.jar

必須叫用Distiller服務。

<>install directory>/sdk/client-libs/common

adobe-docconverter-client.jar

調用DocConverter服務時必需。

<>install directory>/sdk/client-libs/common

adobe-contentservices-client.jar

需要叫用「檔案管理」服務。

<>install directory>/sdk/client-libs/common

adobe-encryption-client.jar

調用加密服務時必需。

<>install directory>/sdk/client-libs/common

adobe-forms-client.jar

必須叫用Forms服務。

<>install directory>/sdk/client-libs/common

adobe-formdataintegration-client.jar

需要呼叫表單資料整合服務。

<>install directory>/sdk/client-libs/common

adobe-generatepdf-client.jar

需要叫用「產生PDF」服務。

<>install directory>/sdk/client-libs/common

adobe-generate3dpdf-client.jar

需要叫用「產生3D PDF」服務。

<>install directory>/sdk/client-libs/common

adobe-jobmanager-client-sdk.jar

調用作業管理器服務時必需。

<>install directory>/sdk/client-libs/common

adobe-output-client.jar

調用輸出服務時需要。

<>install directory>/sdk/client-libs/common

adobe-pdfutility-client.jar

需要叫用PDF公用程式或公用程XMP式服務。

<>install directory>/sdk/client-libs/common

adobe-reader-extensions-client.jar

需要調用Acrobat Reader DC擴展服務。

<>install directory>/sdk/client-libs/common

adobe-repository-client.jar

commons-codec-1.3.jar

調用儲存庫服務所需。

<>install directory>/sdk/client-libs/common

<>install directory>/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上,請包括所有這些檔案。

<>install directory>/sdk/client-libs/common

JBoss專用的lib目錄

adobe-signatures-client.jar

需要叫用簽名服務。

<>install directory>/sdk/client-libs/common

adobe-taskmanager-client-sdk.jar

調用Task Manager服務時必需。

<>install directory>/sdk/client-libs/common

adobe-truststore-client.jar

需要叫用信任商店服務。

<>install directory>/sdk/client-libs/common

連接模式和J2EE應用程式JAR檔案

下表列出了取決於連接模式的JAR檔案以及部署了AEM Forms的J2EE應用程式伺服器。

</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檔案。

<>install directory>/sdk/client-libs/協力廠商

jboss-client.jar

如果AEM Forms部署在JBoss Application Server上,請包含此JAR檔案。

如果jboss-client.jar和引用的jar未共同定位,則classloader將找不到所需的類。

JBoss客戶端lib目錄

如果您將用戶端應用程式部署在相同的J2EE應用程式伺服器上,就不需要包含此檔案。

wlclient.jar

如果AEM Forms部署在BEA WebLogic Server®上,則包含此JAR檔案。

WebLogic專用的lib目錄

如果您將用戶端應用程式部署在相同的J2EE應用程式伺服器上,就不需要包含此檔案。

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

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

  • 如果AEM Forms部署在WebSphere Application Server上,請包括這些JAR檔案。

  • (com.ibm.ws.webservices.thinclient_6.1.0.jar是Web服務呼叫的必要條件)。

WebSphere專用的lib目錄([WAS_HOME]/runtimes)

如果您將用戶端應用程式部署在相同的J2EE應用程式伺服器上,就不必包含這些檔案。

調用方案

下表指定調用方案並列出成功調用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檔案

如果您要從LiveCycle升級至AEM Forms,建議您將AEM FormsJAR檔案加入Java專案的類別路徑中。 例如,如果您使用Rights Management服務等服務,如果類路徑中未包含AEM FormsJAR檔案,則會遇到相容性問題。

假設您要升級至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客戶端庫調用服務

設定連接屬性

使用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,請指定下列值之一:

    • 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)。

    • 如果J2EE應用程式是JBoss,則埠值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應用程式伺服器。有效值為JBossWebSphereWebLogic

    • 如果將此連接屬性設定為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_TYPEServiceClientFactoryProperties.DSC_WEBLOGIC_SERVER_TYPEServiceClientFactoryProperties.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的字串值
    注意

    如果您使用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枚舉值
    注意

    如果您使用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上並使用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上的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

使用Context對象調用AEM Forms

您可以使用com.adobe.idp.Context物件來與已驗證的使用者呼叫AEM Forms服務(com.adobe.idp.Context物件代表已驗證的使用者)。 使用com.adobe.idp.Context物件時,您不需要設定DSC_CREDENTIAL_USERNAMEDSC_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_USERNAMEDSC_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);
注意

有關驗證用戶的完整詳細資訊,請參閱驗證用戶

調用方案

本節將討論以下調用的情形:

  • 在其自己的Java虛擬機(JVM)中運行的客戶端應用程式調用獨立的AEM Forms實例。
  • 在其自身的JVM中運行的客戶端應用程式調用群集的AEM Forms實例。

調用獨立AEM Forms實例的客戶端應用程式

下圖顯示了在自己的JVM中運行並調用獨立的AEM Forms實例的客戶端應用程式。

在此案例中,用戶端應用程式在其JVM中執行,並叫用AEM Forms服務。

注意

此方案是所有快速啟動都基於的調用方案。

調用群集化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 FormsJava庫檔案

使用Java API將資料傳送至AEM Forms服務

使用Java客戶端庫調用服務

使用Java API將資料傳送至AEM Forms服務

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.Documentorg.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();

另請參閱

使用Java API叫用AEM Forms

設定連接屬性

建立文檔

在叫用需要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對象

 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檔案為基礎的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對象建立文檔

以下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);

根據可從URL存取的內容建立檔案

以下Java代碼示例建立基於名為​map.pdf​的PDF檔案的com.adobe.idp.Document對象。 此檔案位於名為WebApp的Web應用程式中,該Web應用程式運行在localhost上。 此建構函式會嘗試使用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);

另請參閱

使用Java API叫用AEM Forms

設定連接屬性

處理傳回的檔案

將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

設定連接屬性

確定文檔的內容類型

調用com.adobe.idp.Document物件的getContentType方法,以判斷com.adobe.idp.Document物件的MIME類型。 此方法返回一個字串值,該字串值指定com.adobe.idp.Document對象的內容類型。 下表說明AEM Forms傳回的不同內容類型。

MIME類型

說明

application/pdf

PDF檔案

application/vnd.adobe.xdp+xml

XML資料封裝(XDP),用於匯出XMLForms架構(XFA)表單

text/xml

書籤、附件或其他XML檔案

application/vnd.fdf

Forms資料格式(FDF),用於匯出Acrobat表格

application/vnd.adobe.xfdf

XMLForms資料格式(XFDF),用於匯出Acrobat表單

application/rdf+xml

多樣化資料格式與XML

application/octet-stream

通用資料格式

NULL

未指定的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);

另請參閱

使用Java API叫用AEM Forms

設定連接屬性

處理文檔對象

當您不再需要Document物件時,建議您叫用dispose方法來處理它。 每個Document物件會在應用程式的主機平台上使用檔案描述子和高達75 MB的RAM空間。 如果Document物件未放置,則Java Garage收集程式會放置它。 但是,通過使用dispose方法,可以更快地處理它,從而釋放Document對象佔用的記憶體。

另請參閱

使用Java API叫用AEM Forms

包含AEM FormsJava庫檔案

使用Java客戶端庫調用服務

使用Java客戶端庫調用服務

AEM Forms服務作業可使用服務的強式型別API來呼叫,此API稱為Java用戶端程式庫。 Java客戶端庫​是一組具體類,它提供對服務容器中部署的服務的訪問。 使用調用API實例化表示要調用的服務的Java對象,而不是建立InvocationRequest對象。 調用API用於調用在Workbench中建立的進程,如長壽命進程。 (請參閱叫用以人為中心的長壽命進程。)

要執行服務操作,請調用屬於Java對象的方法。 Java客戶端庫包含通常以服務操作一對一映射的方法。 使用Java客戶端庫時,請設定所需的連接屬性。 (請參閱設定連接屬性。)

在設定連接屬性後,建立ServiceClientFactory對象,該對象用於實例化Java對象以便調用服務。 每個具有Java客戶端庫的服務都有相應的客戶端對象。 例如,要調用儲存庫服務,請使用其建構子建立ResourceRepositoryClient對象並傳遞ServiceClientFactory對象。 ServiceClientFactory對象負責維護調用AEM Forms服務所需的連接設定。

雖然獲取ServiceClientFactory通常很快,但首次使用工廠時會涉及一些開銷。 此對象經過優化以便重複使用,因此,在建立多個Java客戶端對象時,請盡可能使用相同的ServiceClientFactory對象。 也就是說,請勿為您所建立的每個用戶端程式庫物件建立個別的ServiceClientFactory物件。

「使用者管理員」設定可控制com.adobe.idp.Context物件內影響ServiceClientFactory物件的SAML斷言的存留期。 此設定控制整個AEM Forms的所有驗證上下文期限,包括使用Java API執行的所有調用。 預設情況下,ServiceCleintFactory對象可使用的時段為2小時。

注意

要說明如何使用Java API調用服務,將調用儲存庫服務的writeResource操作。 此操作將新資源放入儲存庫。

通過使用Java客戶端庫並執行以下步驟,可以調用儲存庫服務:

  1. 在Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-repository-client.jar。 有關這些檔案位置的資訊,請參見包括AEM FormsJava庫檔案

  2. 設定調用服務所需的連接屬性。

  3. 調用ServiceClientFactory對象的靜態createInstance方法並傳遞包含連接屬性的java.util.Properties對象,以建立ServiceClientFactory對象。

  4. 使用其建構子並傳遞ServiceClientFactory對象,建立ResourceRepositoryClient對象。 使用ResourceRepositoryClient對象調用儲存庫服務操作。

  5. 使用其建構子建立RepositoryInfomodelFactoryBean對象並傳遞null。 此對象允許您建立Resource對象,該對象代表添加到儲存庫的內容。

  6. 調用RepositoryInfomodelFactoryBean對象的newImage方法並傳遞以下值,以建立Resource對象:

    • 指定new Id()以獲得唯一ID值。
    • 通過指定new Lid()的唯一UUID值。
    • 資源的名稱。 可以指定XDP檔案的檔案名。

    將返回值轉換為Resource

  7. 調用RepositoryInfomodelFactoryBean物件的newImage方法並將傳回值傳至ResourceContent,以建立ResourceContent物件。 此對象表示添加到儲存庫的內容。

  8. 通過傳遞java.io.FileInputStream對象來建立com.adobe.idp.Document對象,該對象儲存要添加到儲存庫的XDP檔案。 (請參閱根據InputStream對象建立文檔。)

  9. 調用ResourceContent物件的setDataDocument方法,將com.adobe.idp.Document物件的內容新增至ResourceContent物件。 傳遞com.adobe.idp.Document物件。

  10. 調用ResourceContent對象的setMimeType方法並傳遞application/vnd.adobe.xdp+xml,將XDP檔案的MIME類型設定為添加到儲存庫。

  11. 通過調用Resource對象「s setContent」方法並傳遞ResourceContent對象,將ResourceContent對象的內容添加到Resource對象。

  12. 通過調用Resource對象「s setDescription」方法並傳遞表示資源說明的字串值來添加資源說明。

  13. 調用ResourceRepositoryClient物件的writeResource方法並傳遞下列值,將表單設計新增至儲存庫:

    • 一個字串值,它指定包含新資源的資源集合的路徑
    • 建立的Resource對象

另請參閱

快速啟動(EJB模式):使用Java API編寫資源

使用Java API叫用AEM Forms

包含AEM FormsJava庫檔案

使用調用API調用短時間進程

您可以使用Java調用API調用短時間進程。 使用調用API調用短時間進程時,可使用java.util.HashMap對象傳遞所需參數值。 對於要傳遞至服務的每個參數,請調用java.util.HashMap物件的put方法,並指定服務所需的名稱——值對,以執行指定的操作。 指定屬於短期進程的參數的確切名稱。

注意

有關調用長壽命進程的資訊,請參見調用以人為中心的長壽命進程

這裡討論的是使用調用API調用以下名為MyApplication/EncryptDocument的AEM Forms短期進程。

注意

此程式不基於現有的AEM Forms程式。 要跟隨代碼示例,請使用Workbench建立名為MyApplication/EncryptDocument的流程。 (請參閱使用Workbench。)

調用此進程時,它執行以下操作:

  1. 取得傳遞至程式的不安全PDF檔案。 此操作基於SetValue操作。 此進程的輸入參數是名為inDocdocument進程變數。
  2. 使用密碼加密PDF檔案。 此操作基於PasswordEncryptPDF操作。 密碼加密的PDF檔案會在名為outDoc的流程變數中傳回。

使用Java調用API調用MyApplication/EncryptDocument短期進程

使用Java調用API調用MyApplication/EncryptDocument短期進程:

  1. 在您Java專案的類別路徑中包含用戶端JAR檔案,例如adobe-livecycle-client.jar。 (請參閱包含AEM FormsJava庫檔案。)

  2. 建立包含連接屬性的ServiceClientFactory對象。 (請參閱設定連接屬性。)

  3. 使用其建構子並傳遞ServiceClientFactory對象,建立ServiceClient對象。 ServiceClient物件可讓您叫用服務作業。 它可處理如定位、調度和路由調用請求等任務。

  4. 使用其建構子建立java.util.HashMap對象。

  5. 請針對每個輸入參數叫用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);
    
  6. 調用ServiceClientFactory對象的createInvocationRequest方法並傳遞以下值,以建立InvocationRequest對象:

    • 一個字串值,它指定要調用的長生命週期進程的名稱。 要調用MyApplication/EncryptDocument進程,請指定MyApplication/EncryptDocument
    • 表示流程操作名稱的字串值。 通常,短期流程操作的名稱為invoke
    • java.util.HashMap物件,其中包含服務作業所需的參數值。
    • 指定true的布林值,可建立同步請求(此值適用於叫用短時程)。
  7. 調用ServiceClient物件的invoke方法並傳遞InvocationRequest物件,將呼叫請求傳送至服務。 invoke方法返回InvocationReponse對象。

    注意

    通過將值false作為createInvocationRequest方法的第四個參數來調用長壽命進程。 傳遞值​false會建立非同步請求。

  8. 叫用InvocationReponse物件的getOutputParameter方法並傳遞指定輸出參數名稱的字串值,以擷取程式的傳回值。 在這種情況下,請指定outDocoutDocMyApplication/EncryptDocument進程的輸出參數的名稱)。 將返回值轉換為Document,如下例所示。

     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物件的內容複製至檔案。 請確定您使用getOutputParameter方法傳回的com.adobe.idp.Document物件。

另請參閱

快速入門:使用調用API調用短期進程

調用以人為中心的長壽命進程

包含AEM FormsJava庫檔案

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now