使用Java API叫用AEM Forms

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支援下列功能:

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

Adobe開發人員網站

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

使用Java servlet來叫用AEM Forms程式

從Java叫用AEM Forms Distiller API

另請參閱

包含AEM Forms Java程式庫檔案

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

使用Web Services叫用AEM Forms

設定連接屬性

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

使用Java客戶端庫調用服務

使用調用API調用短期進程

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

包含AEM Forms Java程式庫檔案

若要使用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檔案

表單服務

EJB

JBoss

  • adobe-livecycle-client.jar

  • adobe-usermanager-client.jar

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

表單服務

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

表單服務

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

表單服務

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 Forms JAR檔案加入Java專案的類別路徑中。 例如,如果您使用Rights Management服務等服務,如果您的類別路徑中未包含AEM Forms JAR檔案,就會遇到相容性問題。

假設您要升級至AEM Forms。 若要使用叫用Rights Management服務的Java應用程式,請包含下列JAR檔案的AEM Forms版本:

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

另請參閱

使用Java API叫用AEM Forms

設定連接屬性

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

使用Java客戶端庫調用服務

設定連接屬性

使用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上的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_USERNAMEDSC_CREDENTIAL_PASSWORD屬性。 使用AuthenticationManagerServiceClient物件的authenticate方法,在驗證使用者時,可取得com.adobe.idp.Context物件。

authenticate方法返回包含驗證結果的AuthResult對象。 通過調用com.adobe.idp.Context對象的建構子,可以建立<a0/>對象。 然後呼叫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 Forms使用者叫用服務時,請確定他們的角色名為Services User,此角色是呼叫AEM Forms服務所必需的。

以下代碼示例說明如何在用於建立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 Forms Java程式庫檔案

使用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預先填入可排程的版面。

注意

為避免使用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),用於匯出的XML表單架構(XFA)表單

text/xml

書籤、附件或其他XML檔案

application/vnd.fdf

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

application/vnd.adobe.xfdf

XML表單資料格式(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 Forms Java程式庫檔案

使用Java客戶端庫調用服務

使用Java客戶端庫調用服務

AEM Forms服務作業可使用服務的強式型別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 Forms Java程式庫檔案

  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 Forms Java程式庫檔案

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

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

注意

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

這裡討論的是使用Invocation 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 Forms Java程式庫檔案)。

  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 Forms Java程式庫檔案

本頁內容