使用Java API叫用AEM Forms invoking-aem-forms-using-the-javaapi

本檔案中的範例和範例僅適用於JEE環境上的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傳輸通訊協定
  • 本機呼叫的VM傳輸
  • 用於遠端呼叫的SOAP
  • 不同的驗證,例如使用者名稱和密碼
  • 同步和非同步呼叫要求

包含AEM Forms Java程式庫檔案

叫用以人為中心的長期流程

使用網站服務叫用AEM Forms

設定連線屬性

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

使用Java使用者端程式庫叫用服務

使用叫用API叫用短期程式

建立可叫用以人為中心的長期流程的Java網頁應用程式

包含AEM Forms Java程式庫檔案 including-aem-forms-java-library-files

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

  • 要呼叫的AEM Forms服務。 使用者端應用程式可以叫用一或多個服務。
  • 您要叫用AEM Forms服務的模式。 您可以使用EJB或SOAP模式。 (請參閱設定連線屬性。)
NOTE
(僅全包式)使用命令standalone.bat -b <Server IP> -c lc_turnkey.xml啟動AEM Forms伺服器,以指定EJB的伺服器IP
  • 部署AEM Forms的J2EE應用程式伺服器。

服務特定的JAR檔案 service-specific-jar-files

下表列出呼叫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/<應用程式伺服器>
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

  • 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上,請包含所有這些檔案。

<安裝目錄>/sdk/client-libs/common

JBoss專屬程式庫目錄

adobe-signatures-client.jar
需要才能叫用簽名服務。
<安裝目錄>/sdk/client-libs/common
adobe-taskmanager-client-sdk.jar
呼叫Task Manager服務時需要。
<安裝目錄>/sdk/client-libs/common
adobe-truststore-client.jar
必須呼叫信任存放區服務。
<安裝目錄>/sdk/client-libs/common

連線模式和J2EE應用程式JAR檔案 connection-mode-and-j2ee-application-jar-files

下表列出的JAR檔案,視連線模式以及部署AEM Forms的J2EE應用程式伺服器而定。

檔案
說明
位置
  • 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檔案。
<安裝目錄>/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應用程式伺服器上,則不需要包含此檔案。

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

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

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

  • (Web服務呼叫需要com.ibm.ws.webservices.thinclient_6.1.0.jar)。

WebSphere特定的lib目錄([WAS_HOME]/runtime)

如果您將使用者端應用程式部署在同一J2EE應用程式伺服器上,則不需要包含這些檔案。

叫用案例 invoking-scenarios

下表指定叫用案例,並列出成功叫用AEM Forms所需的JAR檔案。

服務
叫用模式
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檔案 upgrading-jar-files

如果您從LiveCycle升級為AEM Forms,建議您在Java專案的類別路徑中包含AEM Forms JAR檔案。 例如,如果您使用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使用者端程式庫叫用服務

設定連線屬性 setting-connection-properties

使用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應用程式伺服器而定,請指定下列其中一個值:

    • 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屬性設定為符合您要求的值。
    note note
    NOTE
    您可以使用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
    note note
    NOTE
    如果您使用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列舉值
    note note
    NOTE
    如果您使用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上的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");
NOTE
如果您選取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");
NOTE
與「使用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物件。 接著叫用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);
NOTE
如需有關驗證使用者的完整詳細資訊,請參閱驗證使用者

叫用案例 invoking_scenarios-1

本節將討論下列叫用案例:

  • 在其自己的Java虛擬機器器(JVM)中執行的使用者端應用程式會叫用獨立的AEM Forms執行個體。
  • 在其自己的JVM中執行的使用者端應用程式會叫用叢集化AEM Forms執行個體。

叫用獨立AEM Forms執行個體的使用者端應用程式 client-application-invoking-a-stand-alone-aem-forms-instance

下圖顯示在其自己JVM中執行並叫用獨立AEM Forms執行個體的使用者端應用程式。

在此案例中,使用者端應用程式在其自己的JVM中執行,並叫用AEM Forms服務。

NOTE
此案例是所有快速入門所依據的叫用案例。

叫用叢集AEM Forms執行個體的使用者端應用程式 client-application-invoking-clustered-aem-forms-instances

下圖顯示在其自己的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
NOTE
請洽詢您的管理員,以確定J2EE應用程式伺服器名稱和連線埠號碼。

另請參閱

包括 AEM Forms Java 資料庫 檔案

使用 Java API 將數據傳遞至 AEM Forms 服務

使用 Java 客戶機資料庫叫用服務

使用 Java API 將數據傳遞至 AEM Forms 服務 passing-data-to-aem-forms-services-using-the-java-api

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的可流程配置

NOTE
若要防止使用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

設定連線屬性

建立檔案 creating-documents

啟動需要PDF檔案(或其他檔案型別)作為輸入值的服務作業之前,請先建立com.adobe.idp.Document物件。 com.adobe.idp.Document類別提供的建構函式可讓您從下列內容型別建立檔案:

  • 位元組陣列
  • 現有的com.adobe.idp.Document物件
  • java.io.File物件
  • java.io.InputStream物件
  • java.net.URL物件

根據位元組陣列建立檔案 creating-a-document-based-on-a-byte-array

下列程式碼範例會建立以位元組陣列為基礎的com.adobe.idp.Document物件。

建立以位元組陣列為基礎的Document物件

 Document myPDFDocument = new Document(myByteArray);

根據其他檔案建立檔案 creating-a-document-based-on-another-document

下列程式碼範例會建立以其他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);

根據檔案建立檔案 creating-a-document-based-on-a-file

下列程式碼範例會建立以名為​ map.pdf ​的PDF檔案為基礎的com.adobe.idp.Document物件。 此檔案位於C硬碟的根目錄。 此建構函式會嘗試使用副檔名來設定com.adobe.idp.Document物件的MIME內容型別。

接受java.io.File物件的com.adobe.idp.Document建構函式也接受布林引數。 透過將此引數設定為truecom.adobe.idp.Document物件會刪除檔案。 此動作表示您將檔案傳遞至com.adobe.idp.Document建構函式後,不必移除檔案。

將此引數設定為false表示您保留此檔案的所有權。 將此引數設定為true會更有效率。 原因在於com.adobe.idp.Document物件可以直接將檔案移至本機Managed區域,而非複製檔案(速度較慢)。

建立以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物件建立檔案 creating-a-document-based-on-an-inputstream-object

下列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存取的內容建立檔案 creating-a-document-based-on-content-accessible-from-an-url

以下Java程式碼範例會根據名為​ map.pdf ​的PDF檔案來建立com.adobe.idp.Document物件。 此檔案位於名為WebApp的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

設定連線屬性

處理傳回的檔案 handling-returned-documents

返回 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

設定連線屬性

決定檔案的內容型別 determining-the-content-type-of-a-document

呼叫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 Forms架構(XFA)表單
text/xml
書籤、附件或其他XML檔案
application/vnd.fdf
Forms資料格式(FDF),用於轉存的Acrobat表單
application/vnd.adobe.xfdf
XML Forms資料格式(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

設定連線屬性

處置檔案物件 disposing-document-objects

當您不再需要Document物件時,建議您叫用其dispose方法來處置它。 每個Document物件會佔用一個檔案描述元,以及應用程式主機平台上最多75 MB的RAM空間。 如果未處置Document物件,則Java Garage收集程式會將其處置。 不過,使用dispose方法儘快處置它,您就可以釋放Document物件所佔用的記憶體。

另請參閱

使用Java API叫用AEM Forms

包含AEM Forms Java程式庫檔案

使用Java使用者端程式庫叫用服務

使用Java使用者端程式庫叫用服務 invoking-a-service-using-a-java-client-library

AEM Forms服務作業可使用服務的強型別API (稱為Java使用者端程式庫)來叫用。 Java使用者端程式庫 ​是一組提供存取服務容器中部署之服務的具體類別。 您將Java物件例項化,該物件代表要叫用的服務,而不是使用叫用API建立InvocationRequest物件。 「叫用API」可用來叫用在Workbench中建立的程式,例如長期程式。 (請參閱叫用以人為中心的長期流程。)

若要執行服務作業,請叫用屬於Java物件的方法。 Java使用者端程式庫所包含的方法,通常會將服務操作對應到一。 使用Java使用者端程式庫時,請設定必要的連線屬性。 (請參閱設定連線屬性。)

在您設定連線屬性之後,請建立ServiceClientFactory物件,用來具現化Java物件,讓您叫用服務。 每個具有Java使用者端程式庫的服務都有對應的使用者端物件。 例如,若要叫用存放庫服務,請使用它的建構函式並傳遞ServiceClientFactory物件來建立ResourceRepositoryClient物件。 ServiceClientFactory物件負責維護呼叫AEM Forms服務所需的連線設定。

雖然取得ServiceClientFactory通常很快,但在第一次使用工廠時會產生一些額外負荷。 此物件已針對重複使用而最佳化,因此,當您建立多個Java使用者端物件時,請儘可能使用相同的ServiceClientFactory物件。 也就是說,請勿為您建立的每個使用者端程式庫物件建立個別的ServiceClientFactory物件。

有一個使用者管理員設定可控制影響ServiceClientFactory物件的com.adobe.idp.Context物件內SAML宣告的存留期。 此設定會控制整個AEM Forms的所有驗證內容存留期,包括使用Java API執行的所有叫用。 根據預設,可以使用ServiceCleintFactory物件的時段為兩個小時。

NOTE
若要說明如何使用Java API來叫用服務,會叫用儲存庫服務的writeResource作業。 此操作會將新資源放入存放庫中。

您可以使用 Java 客戶機資料庫並執行以下步驟來呼叫儲存庫服務:

  1. 將用戶端 JAR 檔案 (例如 adobe-存放庫-client.jar) 包含在 Java 專案的類別路徑中。 有關這些檔的位置的資訊,請參閱 包括AEM Forms Java 資料庫檔

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

  3. 呼叫ServiceClientFactory物件的靜態createInstance方法,並傳遞包含連線屬性的java.util.Properties物件,以建立ServiceClientFactory物件。

  4. 使用它的建構函式並傳遞ServiceClientFactory物件來建立ResourceRepositoryClient物件。 使用該 ResourceRepositoryClient 物件來調用存儲庫服務操作。

  5. RepositoryInfomodelFactoryBean使用物件的建構函數建立物件並傳遞 null.此物件允許您創建一個 Resource 表示添加到存放庫內容的物件。

  6. Resource通過調用RepositoryInfomodelFactoryBean物件的方法newImage並傳遞以下值來建立物件:

    • 唯一 ID 值,方法是指定 new Id().
    • 藉由指定new Lid()來指定唯一的UUID值。
    • 資源的名稱。 您可以指定XDP檔案的檔案名稱。

    將傳回值轉換為Resource

  7. 呼叫RepositoryInfomodelFactoryBean物件的newImage方法,並將傳回值轉型為ResourceContent,以建立ResourceContent物件。 此物件代表新增至存放庫的內容。

  8. 傳遞儲存XDP檔案以新增至儲存庫的java.io.FileInputStream物件,以建立com.adobe.idp.Document物件。 (請參閱根據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物件的setContent方法並傳遞ResourceContent物件,將ResourceContent物件的內容新增至Resource物件。

  12. 叫用Resource物件的setDescription方法並傳遞代表資源說明的字串值,以新增資源的說明。

  13. 叫用ResourceRepositoryClient物件的writeResource方法並傳遞下列值,以將表單設計加入儲存庫:

    • 字串值,指定包含新資源的資源集合的路徑
    • 已建立的Resource物件

另請參閱

快速入門(EJB模式):使用Java API寫入資源

使用Java API叫用AEM Forms

包含AEM Forms Java程式庫檔案

使用叫用API叫用短期程式 invoking-a-short-lived-process-using-the-invocation-api

您可以使用Java叫用API來叫用短期流程。 當您使用叫用API叫用短期處理程式時,您會使用java.util.HashMap物件傳遞必要的引數值。 對於要傳遞給服務的每個引數,請叫用java.util.HashMap物件的put方法,並指定服務執行指定作業所需的名稱 — 值組。 指定屬於短期處理序之引數的確切名稱。

NOTE
如需有關叫用長效處理序的資訊,請參閱叫用以人為中心的長效處理序

此處的討論內容是關於使用引動API來叫用下列名為MyApplication/EncryptDocument的AEM Forms短期處理序。

NOTE
此程式並非以現有AEM Forms程式為基礎。 若要跟隨程式碼範例,請使用Workbench建立名為MyApplication/EncryptDocument的程式。 (請參閱使用Workbench。)

叫用此程式時,會執行下列動作:

  1. 取得傳遞至程式的不安全PDF檔案。 此動作是以SetValue作業為基礎。 此處理序的輸入引數是名為inDocdocument處理序變數。
  2. 使用密碼加密PDF檔案。 此動作是以PasswordEncryptPDF作業為基礎。 密碼加密的PDF檔案傳回名為outDoc的程式變數。

使用Java叫用API叫用MyApplication/EncryptDocument短期程式 invoke-the-myapplication-encryptdocument-short-lived-process-using-the-java-invocation-api

使用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方法一次,如下列範例所示。

    code language-java
     //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物件。

    note note
    NOTE
    可透過傳遞值false作為createInvocationRequest方法的第四個引數來叫用長期處理序。 傳遞值​false會建立非同步要求。
  8. 叫用InvocationReponse物件的getOutputParameter方法,並傳遞指定輸出引數名稱的字串值,以擷取處理序的傳回值。 在此情況下,請指定outDocoutDocMyApplication/EncryptDocument處理序的輸出引數名稱)。 將傳回值轉換為Document,如下列範例所示。

    code language-java
     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程式庫檔案

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2