异步调用

某些AEM Forms服务(例如以人为中心的长期流程)需要很长时间才能完成。 这些服务可以以非阻塞方式异步调用。 (请参阅调用以人为中心的长期进程。)

通过在调用URL中将services替换为async_invoke,可以异步调用AEM Forms服务,如以下示例所示。

 http://localhost:8080/rest/async_invoke/SomeService. SomeOperation?integer_input_variable=123&string_input_variable=abc

此URL返回负责此调用的作业的标识符值(采用“文本/普通”格式)。

通过使用被替换为async_statusservices的调用URL,可以检索异步调用的状态。 URL必须包含一个job_id参数,该参数指定与此调用关联的作业的标识符值。 例如:

 http://localhost:8080/rest/async_status/SomeService.SomeOperation?job_id=2345353443366564

此URL会根据作业管理器的规范(例如,2表示正在运行,3表示已完成,4表示失败,等等)返回一个整数值(以“文本/纯”格式),用于编码作业状态。

如果作业已完成,则URL将返回与同步调用服务相同的结果。

作业完成并检索到结果后,可以使用具有services的调用URL将作业处理为async_dispose。 URL还应包含指定作业的标识符值的job_id参数。 例如:

 http://localhost:8080/rest/async_dispose/SomeService.SomeOperation?job_id=2345353443366564

如果作业处置成功,则此URL将返回空消息。

错误报告

如果由于服务器上抛出异常而无法完成同步或异步调用请求,则该异常将作为HTTP响应消息的一部分报告。 如果调用URL(或者如果异步调用,则为async_result URL)没有.xml后缀,则REST提供程序返回HTTP代码500 Internal Server Error,后跟异常消息。

如果调用URL(或者如果存在异步调用,则为async_result URL)确实具有.xml后缀,则REST提供程序返回HTTP代码200 OK,后跟一个描述异常的XML文档,格式如下。

 <exception>
       <exception_class_name>[
       <DSCError>
          <componentUID>component_UUD</componentUID>
         <errorCode>error_code</errorCode>
         <minorCode>minor_code</minorCode>
         <message>error_message</message>
       </DSCError>
 ]
       <message>exception_message</message>
     <stackTrace>exception_stack_trace</stackTrace>
       </exception_class_name>
     <exception>
       </exception>
 </exception>

DSCError元素是可选的,仅当异常是com.adobe.idp.dsc.DSCException的实例时才会出现。

安全性和身份验证

要为REST调用提供安全传输,AEM Forms管理员可以在托管AEM Forms的J2EE应用程序服务器中启用HTTPS协议。 此配置特定于J2EE应用程序服务器;它不是Forms Server配置的一部分。

注意
作为希望通过REST端点公开流程的Workbench开发人员,请记住XSS漏洞问题。 XSS漏洞可用于窃取或操纵Cookie、修改内容的呈现方式,以及危害机密信息。 如果XSS漏洞是一个问题,建议您使用其他输入和输出数据验证规则来扩展进程逻辑。

支持REST调用的AEM Forms服务

虽然建议您使用Workbench而不是直接服务来调用创建的流程,但有些一些AEM Forms服务确实支持REST调用。 建议直接调用进程而不是服务的原因是,这样可以更高效地调用进程。 请考虑以下方案。 假定您要从REST客户端创建策略。 即,您希望REST客户端定义策略名称、离线租赁期等值。

要创建策略,您必须定义复杂的数据类型,如PolicyEntry对象。 PolicyEntry对象定义与策略关联的属性,例如权限。 (请参阅创建策略。)

不要发送REST请求来创建策略(这将包括定义复杂的数据类型,如PolicyEntry对象),而应创建使用Workbench创建策略的进程。 定义进程以接受原始输入变量,如定义进程名称的字符串值或定义离线租赁期的整数。

这样,您就不必创建包含操作所需的复杂数据类型的REST调用请求。 该进程定义了复杂的数据类型,您从REST客户端执行的所有操作是调用该进程并传递原始数据类型。 有关使用REST调用进程的信息,请参阅使用REST调用MyApplication/EncryptDocument进程

以下列表列出了支持直接REST调用的AEM Forms服务。

  • Distiller服务
  • Rights Management服务
  • 生成PDF服务
  • 生成3dPDF服务
  • FormDataIntegration

REST调用示例

提供了以下REST调用示例:

  • 将布尔值传递给AEM Forms进程

  • 将日期值传递到AEM Forms进程

  • 将文档传递到AEM Forms进程

  • 将文档和文本值传递到AEM Forms进程

  • 将枚举值传递到AEM Forms进程

  • 使用REST调用MyApplication/EncryptDocument进程

  • 从Acrobat调用MyApplication/EncryptDocument进程

    每个示例都演示了向AEM Forms流程传递各种数据类型

将布尔值传递给进程

以下HTML示例将两个Boolean值传递到名为RestTest2的AEM Forms进程。 调用方法的名称为invoke,版本为1.0。请注意,使用的是HTMLPost方法。

 <html>
 <body>

 <form name="input" action="http://localhost:9080/rest/services/RestTest2/invoke/1.0" method="post">

 Boolean 1: <input type="text" name="inBooleanList" value="true">
 Boolean 2: <input type="text" name="inBooleanList" value="false">
 <input type="submit" value="Submit">

 </form>

 </body>
 </html>

将日期值传递给进程

以下HTML示例将日期值传递给名为SOAPEchoService的AEM Forms进程。 调用方法的名称为echoCalendar。 请注意,使用的是HTMLPost方法。

 <html>
 <body>

 <form name="input" action="http://localhost:9080/rest/services/SOAPEchoService/echoCalendar" method="post">

 Date: <input type="text" name="value-to-echo" value="2009-01-02T12:15:30Z">
 <input type="submit" value="Submit">

 </form>

 </body>
 </html>

将文档传递到进程

以下HTML示例调用名为MyApplication/EncryptDocument的AEM Forms进程,该进程需要PDF文档。 有关此进程的信息,请参阅使用MTOM调用AEM Forms

 <html>
 <body>

 <form name="input" action="http://localhost:9080/rest/services/MyApplication/EncryptDocument/invoke" method="post"
          enctype="multipart/form-data">

 File: <input type="file" name="value-to-echo">
 <input type="submit" value="Submit"/>

 </form>

 </body>
 </html>

将文档和文本值传递给进程

以下HTML示例调用名为RestTest3的AEM Forms进程,该进程需要文档和两个文本值。 请注意,使用的是HTMLPost方法。

 <html>
 <body>

 <form name="input" action="http://localhost:9080/rest/services/RestTest3" method="post"
          enctype="multipart/form-data">

 Doc: <input type="file" name="inDoc">
 String 1: <input type="text" name="inListOfStrings" value="hello">
 String 2: <input type="text" name="inListOfStrings" value="privet">
 <input type="submit" value="Submit"/>

 </form>

 </body>
 </html>

将枚举值传递给进程

以下HTML示例调用名为SOAPEchoService的AEM Forms进程,该进程需要枚举值。 请注意,使用的是HTMLPost方法。

 <html>
 <body>

 <form name="input" action="https://hiro-xp:8080/rest/services/SOAPEchoService/echoEnum" method="post">

 Color Enum Value: <input type="text" name="value-to-echo" value="green">
 <input type="submit" value="Submit">

 </form>

 </body>
 </html>

使用REST调用MyApplication/EncryptDocument进程

您可以使用REST调用名为​ MyApplication/EncryptDocument ​的AEM Forms短期进程。

注意
此流程并非基于现有的AEM Forms流程。 要遵循代码示例,请使用workbench创建名为MyApplication/EncryptDocument的进程。 (请参阅使用Workbench。)

调用此进程时,将执行以下操作:

  1. 获取传递到进程的不安全PDF文档。 此操作基于SetValue操作。 此进程的输入参数是名为inDocdocument进程变量。

  2. 使用密码加密PDF文档。 此操作基于PasswordEncryptPDF操作。 密码加密的PDF文档在名为outDoc的进程变量中返回。

    当使用REST请求调用此进程时,加密的PDF文档会显示在Web浏览器中。 在查看PDF文档之前,请指定密码(除非禁用了安全性)。 以下HTML代码表示对MyApplication/EncryptDocument进程的REST调用请求。

     <html>
     <body>
     <form action="https://hiro-xp:8080/rest/services/MyApplication/EncryptDocument" method="post" enctype="multipart/form-data">
          <p>Chose a PDF file (.pdf) to send to the EncryptDocument process.</p>
          <p>file:
            <input type="file" name="inDoc" />
          </p>
          <p>
            <input type="submit"/>
          </p>
     </form>
     </body>
    

从Acrobat调用MyApplication/EncryptDocument进程

您可以使用REST请求从Acrobat调用Forms进程。 例如,您可以调用​ MyApplication/EncryptDocument ​进程。 要从Acrobat调用Forms进程,请在Designer中的XDP文件上放置提交按钮。 (请参阅Designer帮助。)

在按钮的​ 提交到URL ​字段中指定用于调用进程的URL,如下图所示。

用于调用进程的完整URL为https://hiro-xp:8080/rest/services/MyApplication/EncryptDocument。

如果流程需要PDF文档作为输入值,请确保以PDF形式提交表单,如上图所示。 此外,要成功调用进程,该进程必须返回PDF文档。 否则,Acroabt无法处理返回值并出现错误。 不必指定输入进程变量的名称。 例如,MyApplication/EncryptDocument ​进程有一个名为inDoc的输入变量。 只要将表单作为PDF提交,您就不必指定inDoc。

您还可以将表单数据作为XML提交到Forms进程。要提交XML数据,请确保Submit As下拉列表指定XML。 由于流程的返回值必须是PDF文档,因此PDF文档会显示在Acrobat中。

recommendation-more-help