Types de données pris en charge

Les types de données suivants sont pris en charge lors de l’appel des services AEM Forms à l’aide de requêtes REST :

  • Types de données primitifs de Java, tels que les chaînes et les entiers

  • Type de données com.adobe.idp.Document

  • Types de données XML tels que org.w3c.Document et org.w3c.Element

  • Objets de collection, tels que java.util.List et java.util.Map

    Ces types de données sont généralement acceptés comme valeurs d’entrée des processus créés dans Workbench.

    Si un service Forms est appelé à lʼaide de la méthode de HTTP POST, les arguments sont transmis dans le corps de la requête HTTP. Si la signature du service AEM Forms possède un paramètre d’entrée de type chaîne, le corps de la requête peut contenir la valeur texte du paramètre d’entrée. Si la signature du service définit plusieurs paramètres de chaîne, la requête peut suivre la notation HTTP application/x-www-form-urlencoded avec les noms des paramètres utilisés comme noms des champs du formulaire.

    Si un service Forms renvoie un paramètre de chaîne, le résultat est une représentation textuelle du paramètre de sortie. Si un service renvoie plusieurs paramètres de chaîne, le résultat est un document XML encodant les paramètres de sortie au format suivant :
     <result> <output-paramater1>output-parameter-value-as-string</output-paramater1> . . . <output-paramaterN>output-parameter-value-as-string</output-paramaterN> </result>

    REMARQUE
    La valeur output-paramater1 représente le nom du paramètre de sortie.

    Si un service Forms requiert un paramètre com.adobe.idp.Document, le service ne peut être appelé qu’à l’aide de la méthode HTTP POST. Si le service en nécessite un paramètre com.adobe.idp.Document, le corps de la requête HTTP devient le contenu de l’objet Document d’entrée.

    Si un service AEM Forms nécessite plusieurs paramètres d’entrée, le corps de la requête HTTP doit être un message MIME multipartie, tel que défini par la norme RFC 1867. (Les navigateurs web utilisent la norme RFC 1867 pour télécharger des fichiers sur des sites web). Chaque paramètre d’entrée doit être envoyé en tant que partie distincte du message multipartie et codé dans le format multipart/form-data. Le nom de chaque partie doit correspondre au nom du paramètre.

    Les listes et les mappages sont également utilisés comme valeurs d’entrée dans les processus AEM Forms créés dans Workbench. Par conséquent, vous pouvez utiliser ces types de données lors de la réalisation d’une requête REST. Les tableaux Java ne sont pas pris en charge, car ils ne sont pas utilisés comme valeur d’entrée dans un processus AEM Forms.

    Si un paramètre d’entrée est une liste, un client REST peut l’envoyer en spécifiant le paramètre plusieurs fois (une fois pour chaque élément de la liste). Par exemple, si A est une liste de documents, lʼentrée doit être un message multipartie composé de plusieurs parties nommées A. Dans ce cas, chaque partie nommée A devient un élément de la liste dʼentrée. Si B est une liste de chaînes, l’entrée peut être un message application/x-www-form-urlencoded composé de plusieurs champs nommés B. Dans ce cas, chaque champ de formulaire nommé B devient un élément de la liste dʼentrée.

    Si un paramètre d’entrée est un mappage et qu’il s’agit du seul paramètre d’entrée des services, alors chaque partie/champ du message d’entrée devient un enregistrement clé/valeur dans le mappage. Le nom de chaque partie/champ devient la clé de l’enregistrement. Le contenu de chaque partie/champ devient la valeur de l’enregistrement.

    Si un mappage d’entrée n’est pas le seul paramètre d’entrée des services, chaque enregistrement clé/valeur appartenant au mappage peut être envoyé à l’aide d’un paramètre nommé comme une concaténation du nom du paramètre et de la clé de l’enregistrement. Par exemple, un mappage d’entrée appelé attributes peut être envoyé avec une liste des paires clé/valeur suivantes :

    attributesColor=red

    attributesShape=box

    attributesWidth=5

    Cela se traduit par un mappage de trois enregistrements : Color=red, Shape=box et Width=5.

    Les paramètres de sortie des types liste et mappage font partie du message XML résultant. La liste de sortie est représentée en XML comme une série dʼéléments XML, un élément pour chaque élément de la liste. Chaque élément reçoit le même nom que le paramètre de la liste de sortie. Deux valeurs sont possibles pour chaque élément XML :

  • Représentation textuelle de l’élément de la liste (si la liste est composée de chaînes)

  • URL pointant vers le contenu du document (si la liste est composée dʼobjets com.adobe.idp.Document)

    L’exemple suivant est un message XML renvoyé par un service qui a un seul paramètre de sortie nommé list, qui est une liste de nombres entiers.
     <result>   <list>12345</list>   . . .   <list>67890</list>  </result>Un paramètre de mappage de sortie est représenté dans le message XML résultant comme une série d’éléments XML avec un élément pour chaque enregistrement dans le mappage. Chaque élément reçoit le même nom que la clé de l’enregistrement du mappage. La valeur de chaque élément est une représentation textuelle de la valeur de l’enregistrement du mappage (si le mappage se compose d’enregistrements avec une valeur de type chaîne) ou une URL pointant vers le contenu du document (si le mappage se compose d’enregistrements avec la valeur com.adobe.idp.Document). Consultez ci-dessous un exemple de message XML renvoyé par un service qui a un seul paramètre de sortie nommé map. Cette valeur de paramètre est un mappage constitué d’enregistrements qui associent des lettres aux objets com.adobe.idp.Document.
     <result>   http://localhost:8080/DocumentManager/docm123/4567   . . .   <Z>http://localhost:8080/DocumentManager/docm987/6543</Z>  </result>  

Appels asynchrones

Certains services AEM Forms, tels que les processus pour des intervenants humains de longue durée, prennent beaucoup de temps. Ces services peuvent être appelés de manière asynchrone et non bloquante. (Voir Appel de processus pour des intervenants humains de longue durée.)

Un service AEM Forms peut être appelé de manière asynchrone en remplaçant services par async_invoke dans l’URL d’appel, comme illustré dans l’exemple suivant.

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

Cette URL renvoie la valeur de l’identifiant (au format « text/plain ») de la tâche responsable de cet appel.

Le statut de l’appel asynchrone peut être récupéré à lʼaide dʼune URL d’appel où services est remplacé par async_status. L’URL doit contenir un paramètre job_id spécifiant la valeur d’identifiant de la tâche associée à cet appel. Par exemple :

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

Cette URL renvoie une valeur sous forme dʼentier (au format « text/plain ») codant le statut de la tâche selon la spécification du gestionnaire de tâches (par exemple, 2 signifie en cours d’exécution, 3 signifie terminé, 4 signifie échoué, etc.).

Si la tâche est terminée, l’URL renvoie le même résultat que si le service avait été appelé de manière synchrone.

Une fois la tâche terminée et le résultat récupéré, il est possible de supprimer la tâche à l’aide d’une URL d’appel où services est remplacé par async_dispose. L’URL doit également contenir un paramètre job_id spécifiant la valeur d’identifiant de la tâche. Par exemple :

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

Si la suppression de la tâche est réussie, cette URL renvoie un message vide.

Rapport d’erreurs

Si une demande d’appel synchrone ou asynchrone ne peut pas être effectuée en raison d’une exception générée sur le serveur, lʼexception est signalée dans le message de réponse HTTP. Si l’URL d’appel (ou lʼURL async_result dans le cas d’un appel asynchrone) ne comporte pas de suffixe .xml, le fournisseur REST renvoie le code HTTP 500 Internal Server Error suivi d’un message d’exception.

Si l’URL d’appel (ou lʼURL async_result dans le cas d’un appel asynchrone) comporte un suffixe .xml, le fournisseur REST renvoie le code HTTP 200 OK suivi d’un document XML décrivant l’exception au format suivant.

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

Lʼélément DSCError est facultatif et présent uniquement si l’exception est une instance de com.adobe.idp.dsc.DSCException.

Sécurité et authentification

Pour assurer une transmission sécurisée des appels REST, un administrateur ou une administratrice AEM Forms peuvent activer le protocole HTTPS sur le serveur d’applications J2EE hébergeant AEM Forms. Cette configuration est spécifique au serveur d’applications J2EE ; elle ne fait pas partie de la configuration du serveur Forms.

REMARQUE
En tant que développeur Workbench souhaitant exposer ses processus via un point d’entrée REST, gardez à l’esprit le problème de la vulnérabilité XSS. Les vulnérabilités XSS peuvent être exploitées pour voler ou manipuler des cookies, modifier la présentation du contenu et compromettre des informations confidentielles. Il est recommandé d’étendre la logique de processus avec les règles supplémentaires de validation des données d’entrée et de sortie pour éviter les problèmes de vulnérabilité XSS.

Services AEM Forms qui prennent en charge les appels REST

Bien qu’il soit recommandé d’appeler directement les processus créés à l’aide de Workbench plutôt que les services, certains services AEM Forms prennent en charge les appels REST. La raison pour laquelle il est recommandé d’appeler un processus plutôt qu’un service directement est qu’il est plus efficace d’appeler un processus. Considérez le scénario suivant. Supposons que vous souhaitiez créer une politique à partir d’un client REST. En d’autres termes, vous souhaitez que le client REST définisse des valeurs telles que le nom de la politique et la période d’ouverture hors ligne.

Pour créer une politique, vous devez définir des types de données complexes tels que l’objet PolicyEntry. Un objet PolicyEntry définit des attributs tels que les autorisations associées à la politique. (Voir Créer des politiques).

Au lieu d’envoyer une requête REST pour créer une politique (ce qui impliquerait de définir des types de données complexes tels qu’un objet PolicyEntry), créez un processus qui crée une politique à l’aide de Workbench. Définissez le processus pour qu’il accepte des variables d’entrée primitives telles qu’une valeur de chaîne qui définit le nom du processus ou un entier qui définit la période d’ouverture hors ligne.

De cette façon, vous n’avez pas à créer de requête d’appel REST qui inclut les types de données complexes requis par l’opération. Le processus définit les types de données complexes et tout ce que vous faites à partir du client REST est d’appeler le processus et de transmettre les types de données primitifs. Pour plus d’informations sur l’appel d’un processus à l’aide de REST, voir Appel du processus MyApplication/EncryptDocument à l’aide de REST.

Les listes suivantes spécifient les services AEM Forms qui prennent en charge les appels REST directs.

  • Service Distiller
  • Service Rights Management
  • Service GeneratePDF
  • Service Generate3dPDF
  • FormDataIntegration