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
etorg.w3c.Element
-
Objets de collection, tels que
java.util.List
etjava.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 valeuroutput-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ètrecom.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
etWidth=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 valeurcom.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 objetscom.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.
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