API URL et XML - W4 Product Documentation
Transcription
API URL et XML - W4 Product Documentation
Note technique W4 Engine API URL et XML Sommaire Cette note technique décrit les mécanismes d'invocation de W4 via un flux http et ou un flux XML. 1 Fonctionnement 3 2 Syntaxe des appels 5 3 Spécificités du servlet W4 15 4 Utilisation de l'interpréteur XML 19 Référence : W4TN_URL_XML_010_FR Note technique W4 Engine API URL et XML © 1996 - 2007 W4. Tous droits réservés. L'acquisition du présent document confère un droit d'utilisation incessible, non exclusif et personnel et non un droit de propriété. L'utilisation, la copie, la reproduction et la distribution du présent document sont permises à condition : 1. que la mention de droits d'auteur ci-dessus figure sur toutes les copies et que cette mention de droits d'auteur et la présente mention d'autorisation apparaissent conjointement ; 2. que le présent document ne soit utilisé qu'à des fins d'information et non commerciales ; 3. que le présent document ne soit modifié de quelque manière que ce soit. Tous les produits et marques cités sont la propriété de leurs titulaires respectifs. Les informations contenues dans ce document pourront faire l’objet de modifications sans préavis. 1 Fonctionnement Le servlet n'est pas l'équivalent du CGI dans la mesure où il n'est pas associé à un template W4 mais à une Java Server Page. Il n'est pas possible de remplacer le CGI par le servlet. Comme on peut le voir sur le schéma ci-dessous, le servlet W4 et l'interpréteur XML reposent sur le même moteur, défini dans la classe TWFunmarshaller. Fonctionnement du servlet Le servlet est appelé via une URL Fonctionnement de l'interpréteur XML Création d'une instance de la classe TWFxmlRequest à partir d'un flux XML Il reçoit dans ses paramètres d'entrée, la requête http Il transforme cette requête en une TWFhttpRequest (package fr.w4.marshal) Le flux XML est automatiquement lu et transformé en une table de paramètres Appel du TWFunmarshaller en lui passant la requête Le TWFunmarshaller lit la requête et appelle le moteur W4 Il retourne une table de résultats (TWFresponse). Les résultats des invocations sont des objets Java Le servlet positionne l'attribut "context" de la ServletRequest avec la liste de résultats Il 'forward' la requête vers le modèle JSP spécifié La principale différence entre le servlet et l'interpréteur XML est que le servlet va publier la liste de résultats obtenus après les appels au moteur W4 dans une JSP tandis que l'interpréteur XML renvoie directement cette liste de résultats. W4 BPM Suite NOTE TECHNIQUE API URL et XML 4 Syntaxe des appels 2 Les APIs URL et XML se fondent sur la syntaxe des commandes Java de W4 Engine. Pour plus de détails, veuillez consulter le document suivant : 3 Javadoc 2.1 Le principe : comment traduire une API Java en une API URL ou XML Il suffit de s'appuyer sur la signature de la méthode que l'on souhaite invoquer. Par exemple, si l'on souhaite invoquer l'API wfProcessTask de la classe TWFtaskRef : Syntaxe Java TWFtaskRef tasKRef = new TWFtaskRef(); taskRef.setId(1200); taskRef.wfProcessTask(); Syntaxe URL inv1=taskRef.processTask&inv1.taskRef.id=1200 Syntaxe XML <xml version="1.0"> <WFMESSAGE> <TASKREF> <ID>1200</ID> <TASKREFMETHOD> <PROCESSTASK/> </TASKREFMETHOD> </TASKREF> </WFMESSAGE> Quel que soit le langage utilisé, on remarque que l'on procède aux opérations suivantes : Instanciation de l'objet taskRef 5 Mise à jour de son champ id Invocation de la méthode processTask NOTE TECHNIQUE Syntaxe des appels Seule la façon de procéder diffère selon le langage utilisé. En XML, l'instanciation se fait en spécifiant le tag <TASKREF> tandis qu'en APIs URL, elle s'effectue lorsque l'on précise inv1=taskRef.processTask. Quant à la mise à jour du champ "id", en XML, elle se fait en écrivant <ID>1200</ID> et, en APIs URL, en écrivant inv1.taskRef.id=1200. L'appel de la méthode processTask diffère en XML et en APIs URL puisqu'en XML, il faut spécifier <TASKREFMETHOD> <PROCESSTASK/> </TASKREFMETHOD> tandis qu'en APIs URL, elle est faite automatiquement (parce qu'a été précisé inv1=taskRef.processTask) après la re-construction de l'objet. Principe en API XML <xml version="1.0"> <WFMESSAGE> <OBJECT_NAME> <FIELD_NAME>value</FIELD_NAME> <FIELD_NAME>value</FIELD_NAME> <OBJECT_NAMEMETHOD> <METHOD_NAME> <ARG_NAME>value</ARG_NAME> <ARG_NAME>value</ARG_NAME> </METHOD_NAME> </OBJECT_NAMEMETHOD> </OBJECT_NAME> </WFMESSAGE> Principe en API URL inv1=<OBJECT_NAME>.<METHOD_NAME> &inv1.<OBJECT_NAME.<FIELD_NAME>=<value>&inv1.<METHOD_NAME>.<ARG_NAME>=<v alue> En APIs URL et XML, il faut enlever les lettres TWF (ou TWFT) du nom de l'objet et ne pas écrire les lettres wf au début du nom des méthodes. Exemple d'invocation de la méthode wfCreateActor de l'objet TWFactor Création d'un acteur en XML <xml version="1.0"> <WFMESSAGE> <ACTOR> <STR>test</STR> <EMAIL>[email protected]</EMAIL> <LASTNAME>My LastName</LASTNAME> <FIRSTNAME>My FirstName</FIRSTNAME> W4 BPM Suite NOTE TECHNIQUE API URL et XML 6 <MANAGERREF> <ID>1</ID> </MANAGERREF> <ACTORMETHOD> <CREATEACTOR> <password> <STR>MyPassword</STR> </password> </CREATEACTOR> </ACTORMETHOD> </ACTOR> </WFMESSAGE> Création d'un acteur via URL INV1=ACTOR.CREATEACTOR&inv1.ACTOR.STR=test&[email protected] m &INV1.ACTOR.LASTNAME=My LastName&INV1.ACTOR.FIRSTNAME=My FirstName &INV1.ACTOR.MANAGERREF.ID=1&INV1.CREATEACTOR.PASSWORD.STR=MyPassword 2.2 Les exceptions : la recherche, les variables et les collections d'objets La recherche (packages fr.w4.buildtime.basic, fr.w4.*.dynamic et fr.w4.search) Pour une description du service de recherche et de son utilisation générale en Java, reportezvous au document suivant : 3 Note technique - Développer une application web W4 Engine en Java (section Les collections) Il s'agit ici d'apprendre à invoquer la méthode wfSearch<Object> des collections des packages "dynamic" (exemple : TWFTtask, TWFTworkcase, TWFTactor, TWFTrole, etc). Signature générique de la méthode search wfSearch<Object>(TWFT<Object>Selection tSelection, sortBy, TWFsortMode sortMode, short maxElem) TWF<Object>SortBy L'invocation de cette méthode suppose donc de savoir décrire en XML ou en URL les classes utilisées en arguments. 7 NOTE TECHNIQUE Syntaxe des appels Ecriture des TWFTselection (package fr.w4.search) Pour ajouter un critère de sélection, il faut spécifier son nom, son type et valeur. TWFT<Object>Selection tSelection en XML: <CRITERIA_NAME> <OBJECTNAME_METHOD> <SEARCHOBJECT> <WF_CRIT_NAME> <WF_OPERATOR> <TYPE>value</TYPE> </WF_OPERATOR> </WF_CRIT_NAME> </SEARCHOBJECT> </OBJECTNAME_METHOD> TWFT<Object>Selection tSelection en URL <input type="text" name="inv1.search<Object>.WF_CRIT_<NAME>.WF_<OPERATOR>.<TYPE>" value=""> Pour connaître la liste des critères possibles, référez-vous à la documentation Java du package fr.w4.search. la liste des opérateurs possibles, référez-vous à la documentation Java de la classe fr.w4.buildtime.basic.TWFoperator. la liste des types possibles est la suivante : "string", "integer", "date", "docId", "id". Pour un exemple d'utilisation, consultez la page du tutorial "Gestion des messages téléphoniques" nommée Templates/search.jsp. Les variables Les classes pour manipuler les variables workflow sont les suivantes : fr.w4.buildtime.basic.TWFdata : représente une donnée (java.lang.String ou int ou fr.w4.basic.TWFdocId ou fr.w4.basic.TWFdate) workflow. fr.w4.buildtime.basic.TWFTdata : collection de données. fr.w4.runtime.dynamic.TWFrawVariable : variable (composée d'un nom et d'un TWFTdata) d'une tâche ou d'un dossier. fr.w4.runtime.dynamic.TWFTrawVariable : collection de variables de tâche ou de dossier. Ces classes sont "complexes" dans la mesure où un TWFTrawVariable est composé d'un TWFrawVariable, lui-même composé de TWFTdata qui regroupe des TWFdata. C'est à cause de ces multiples niveaux d'emboîtement que la syntaxe XML et en URL a été simplifiée. W4 BPM Suite NOTE TECHNIQUE API URL et XML 8 Pour comprendre l'invocation des APIs utilisant les variables, vous trouverez ci-dessous les syntaxes Java, XML et URL de la méthode wfEndTask de la classe TWFtaskRef qui a la signature suivante : void wfEndTask(TWFname outValue, TWFTrawVariable tVariable). Syntaxe Java : terminaison d'une tâche TWFtaskRef tasKRef = new TWFtaskRef(); taskRef.setId(1200); /* Création de la collection de variables passée en sortie de la tâche */ TWFTrawVariable tTaskVar = new TWFTrawVariable(); /* Ajout de la variable "string_mono" avec la valeur "string monovaluée" */ tTask.setRaw("string_mono",new TWFdata("string mono-valuée")); /* Ajout de la variable "string_multi" avec les valeurs "string1","string2" et "string3" */ tTask.setRaw("string_multi",new TWFTdata( new String[] {"string1","string2","string3"} ) ); /* Ajout de la variable "date_mono" avec la valeur "1/1/2001" */ tTask.setRaw("date_mono",new TWFdata(new TWFdate(1,1,2001,0,0,0) )); /* Ajout de la variable "date_multi" avec les valeurs "1/1/2001" et "2/2/2002" */ TWFTdata tDateMulti = new TWFTdata(); tDateMulti.add(new TWFdate(1,1,2001,0,0,0)); tDateMulti.add(new TWFdate(2,2,2002,0,0,0)); tTask.setRaw("date_multi",tDateMulti); /* Terminaison de la tâche avec passage en sortie de la collection de variables */ taskRef.wfEndTask(new TWFname("outValue de la tâche"),tTaskVar); Syntaxe XML : terminaison d'une tâche <?xml version="1.0" encoding="ISO-8859-1"?> <WFMESSAGE> <TASKREF> <ID>1200</ID> <TASKREFMETHOD> <ENDTASK> <TVARIABLE> <string_mono> <STRING>string mono-valuée</STRING> </string_mono> <string_multi> <STRING>string1</STRING> <STRING>string2</STRING> 9 NOTE TECHNIQUE Syntaxe des appels <STRING>string3</STRING> </string_multi> <date_mono> <DATE> <DAY>1</DAY> <MONTH>1</MONTH> <YEAR>2001</YEAR> </DATE> </date_mono> <date_multi> <date index="1"> <DAY>1</DAY> <MONTH>1</MONTH> <YEAR>2001</YEAR> </date> <date index="2"> <DAY>2</DAY> <MONTH>2</MONTH> <YEAR>2002</YEAR> </date> </date_multi> </TVARIABLE> <OUTVALUE> <STR>outValue de la tâche</STR> </OUTVALUE> </ENDTASK> </TASKREFMETHOD> </TASKREF> </WFMESSAGE> L Remarque En API URL et XML, tVariable (création de variable sans respect de la casse) peut être substitué par tcsVariable (création de variable avec respect de la casse). Syntaxe URL : terminaison d'une tâche <FORM METHOD="POST" ACTION="/servlet/fr.w4.http.W4Servlet"> <INPUT TYPE="hidden" NAME="inv1" VALUE="taskRef.endTask"> <INPUT TYPE="hidden" NAME="inv1.taskRef.id" VALUE="1200"> <!-- Ajout de la variable "string_mono" avec la valeur "string monovaluée" --> <INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_mono.string" value="string mono-valuée"> <!-- Ajout de la variable "string_multi" avec les valeurs "string1","string2" et "string3" --> <INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string" value="string1"> <INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string" value="string2"> <INPUT TYPE="text" NAME="inv1.endTask.tvariable.string_multi.string" value="string3"> W4 BPM Suite NOTE TECHNIQUE API URL et XML 10 <!-- Ajout de la variable "date_mono" avec la valeur "1/1/2001" --> <input size="5" type="text" name="inv1.endTask.tVariable.date_mono.date.day" value="1"> <input size="5" type="text" name="inv1.endTask.tVariable.date_mono.date.month" value="1"> <input size="5" type="text" name="inv1.endTask.tVariable.date_mono.date.year" value="2001"> <!-- Ajout de la variable "date_multi" avec les valeurs "1/1/2001" et "2/2/2002" --> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.1.day" value="1"> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.1.month" value="1"> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.1.year" value="2001"> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.2.day" value="2"> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.2.month" value="2"> <input size="5" type="text" name="inv1.endTask.tVariable.date_multi.2.year" value="2002"> </FORM> L Remarques En API URL et XML, tVariable (création de variable sans respect de la casse) peut être substitué par tcsVariable (création de variable avec respect de la casse). Dans cet exemple, il est intéressant de noter l'utilisation des variables multi-valuées de type date. Les collections d'objets L'utilisation des collections d'objets dans les APIs URL et XML ne soulève pas de difficultés particulières. La syntaxe pour utiliser une collection est la suivante : Syntaxe URL inv1=TOBJECT_NAME.METHOD_NAME &inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value1 &inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value2 &inv1.TOBJECT_NAME.OBJECT_NAME.FIELD_NAME=value3 ou inv1=TOBJECT_NAME.METHOD_NAME &inv1.TOBJECT_NAME.1.FIELD_NAME=value &inv1.TOBJECT_NAME.2.FIELD_NAME=value2 &inv1.TOBJECT_NAME.3.FIELD_NAME=value3 11 NOTE TECHNIQUE Syntaxe des appels Syntaxe XML <WFMESSAGE> <TOBJECT_NAME> <OBJECT_NAME index="1"> <FIELD_NAME>value1</FIELD_NAME> </OBJECT_NAME> <OBJECT_NAME index="2"> <FIELD_NAME>value2</FIELD_NAME> </OBJECT_NAME> <OBJECT_NAME index="3"> <FIELD_NAME>value3</FIELD_NAME> </OBJECT_NAME> </TOBJECT_NAME> </WFMESSAGE> 2.3 Chaînage des appels Le chaînage consiste à appeler plusieurs APIs successivement. Par exemple, invoquer l'API wfNewCaseWithInitiator (création, démarrage d'un dossier), qui renvoie la première tâche de ce dossier, et effectuer cette première tâche (wfProcessTask). Cela suppose non seulement d'être en mesure d'appeler successivement ces 2 APIs, mais aussi d'utiliser dans le deuxième appel (wfProcessTask) le résultat renvoyé par la première API. Le chaînage diffère quelque peu entre les APIs XML et URL. Chaînage des appels avec les APIs URL Comme expliqué ci-dessus, un appel URL a cette syntaxe : inv1=<OBJECT_NAME>.<METHOD_NAME>&inv1.<OBJECT_NAME.<FIELD_NAME>=<value>& inv1. <METHOD_NAME>.<ARG_NAME>=<value> Le mot clé inv1 spécifie qu'il s'agit de "l'invocation numéro 1". Le servlet de W4 accepte un nombre illimité (sous réserve des capacités mémoire de la machine utilisée) d'invocations. Pour chaîner n appels, il suffit donc d'écrire les commandes selon le format suivant : inv1=<OBJECT_NAME>.<METHOD_NAME>&inv1.<OBJECT_NAME.<FIELD_NAME>=<value>& inv1. <METHOD_NAME>.<ARG_NAME>=<value>& inv2=<OBJECT_NAME>.<METHOD_NAME>&inv2.<OBJECT_NAME.<FIELD_NAME>=<value>& inv2. <METHOD_NAME>.<ARG_NAME>=<value> W4 BPM Suite NOTE TECHNIQUE API URL et XML 12 ... invN=<OBJECT_NAME>.<METHOD_NAME>&invN.<OBJECT_NAME.<FIELD_NAME>=<value>& invN. <METHOD_NAME>.<ARG_NAME>=<value> Attention ! Contrairement au CGI de W4, les paramètres ne sont pas partagés entre les invocations. Attention ! Contrairement au CGI de W4, la numérotation des invocations doit être continue. En d'autres termes, il n'est pas possible de chaîner les commandes suivantes : inv1=taskRef.processTask&inv4=taskRef.setTaskVariable. Seule l'invocation numéro 1 sera exécutée. Pour récupérer le résultat d'une commande précédente, il faut utiliser le mot-clé @invN. L'exemple ci-dessous montre la récupération du résultat de la première commande newCaseWithInitiator (une instance de la classe TWFtask) et l'appel sur cet objet résultat de la méthode processTask. L'exemple ci-dessous démontre également qu'il est possible de récupérer la valeur d'un champ de l'objet résultat. En l'espèce, @inv1.activitySubProcedure contient le nom de l'activité associée à cette tâche. Il serait également possible d'écrire @inv1.actorRef.str pour récupérer le nom de connexion de l'acteur qui a cette tâche en charge. Il est à noter que si une API ne renvoie pas de résultat, comme l'API wfProcessTask, c'est l'objet contenant la méthode qui est stocké dans la table de résultats. Dans le cas de l'API wfProcessTask, il s'agira d'une instance de la classe TWFtaskRef (ou TWFtask). wfNewCaseWithInitiator suivi de wfProcessTask inv1=RuntimeFactory.newCaseWithInitiator&inv1.newCaseWithInitiator.prefi xCaseName.str=test &inv1.newCaseWithInitiator.makesUniqueName=true&inv1.newCaseWithInitiato r.procedure.str=W4_MSGTel &inv1.newCaseWithInitiator.initiator.id=2200 &[email protected]&[email protected] Chaînage des appels avec les APIs XML Le fonctionnement du chaînage avec les APIs XML est similaire à celui des APIs URL. Seule la façon d'écrire ces appels diffère. Voici l'exemple utilisé ci-dessus traduit en XML : wfNewCaseWithInitiator suivi de wfProcessTask <xml version="1.0"> <WFMESSAGE> <RUNTIMEFACTORY> 13 NOTE TECHNIQUE Syntaxe des appels <RUNTIMEFACTORYMETHOD> <NEWCASEWITHINITIATOR> <PREFIXCASENAME> <STR>test</STR> </PREFIXCASENAME> <MAKESUNIQUENAME>true</MAKESUNIQUENAME> <PROCEDURE> <STR>W4_MsgTel</STR> </PROCEDURE> <INITIATOR> <ID>2200</ID> </INITIATOR> </NEWCASEWITHINITIATOR> </RUNTIMEFACTORYMETHOD> </RUNTIMEFACTORY> <INV1> <INV1METHOD> <PROCESSTASK/> </INV1METHOD> </INV1> </WFMESSAGE> W4 BPM Suite NOTE TECHNIQUE API URL et XML 14 Spécificités du servlet W4 3 3.1 La gestion du contexte utilisateur : la classe fr.w4.http.TWFhttpContext C'est la classe fr.w4.http.TWFhttpContext qui a en charge la gestion du contexte utilisateur. Cette classe hérite de la classe fr.w4.session.TWFsessionContext. Pour plus de détails sur cette classe, reportez-vous au document suivant : 3 Note technique - Développer une application web W4 Engine en Java Les éléments du contexte utilisateur sont les suivants : id : identifiant de l'acteur connecté lid : identifiant de connexion de l'acteur connecté lg : langue de l'acteur connecté srv : nom du serveur W4 utilisé (optionnel si le servlet est exécuté sur la même machine que le serveur W4) wfs : nom de l'instance du serveur W4 utilisé sesType : driver utilisé JNI (par défaut) ou RMI Outre ces éléments, le TWFhttpContext contient la liste de résultats obtenue par le servlet. Pour récupérer cette liste, il faut appeler la méthode getLastCommandResult. Cette méthode renvoie une instance de la classe fr.w4.marshal.TWFresponse. Le contexte utilisateur est transmis par le servlet à la JSP en enrichissant la requête http. Le servlet W4 enrichit les attributs de la requête http avec un objet portant le nom de "context". La récupération du contexte utilisateur dans la JSP se fait alors comme suit : Récupération du contexte utilisateur dans une JSP <% /* récupération du contexte */ TWFhttpContext context = (TWFhttpContext)request.getAttribute("context"); /* récupération des résultats des ordres passés par le servlet sur le moteur W4 */ TWFresponse w4Response = context.getLastCommandResult(); /* récupération du résultat de la méthode 'searchTask' */ TWFTtask tTask = w4Response.resultOf("searchTask"); %> 15 NOTE TECHNIQUE Spécificités du servlet W4 Attention ! Les nouvelles applications ne doivent pas utiliser la méthode w4Response.resultAt(0) Une fois le contexte récupéré dans la JSP, il faudra à nouveau le transmettre à la servlet lors du prochain appel. Le servlet W4 ne s'appuyant pas sur les mécanismes de session http, la transmission s'effectue en écrivant : Transmission du contexte de la JSP vers le Servlet <-- Transmission dans un formulaire --> <FORM METHOD="POST" ACTION="/servlet/fr.w4.http.W4Servlet?<%=context.writeCtx()%>..." </FORM> <-- Transmission dans un hyperlien --> <A HREF="/servlet/fr.w4.http.W4Servlet?<%=context.writeCtx()%>...">Lien hypertexte</A> 3.2 L'utilisation des Java Server Pages (JSP) Pour spécifier la JSP à laquelle le servlet doit transférer les résultats, il faut utiliser le motclé : activity : si le formulaire à afficher est celui d'une activité (le servlet appellera un template stocké dans le répertoire Activities), template : dans tous les autres cas. error : pour préciser la page à afficher si une erreur survient. Pour comprendre le mécanisme de "forward", il faut se référer à l'organisation d'un projet JSP-W4. Exemple d'arborescence : W4 BPM Suite NOTE TECHNIQUE API URL et XML 16 La servlet est, en quelque sorte, stockée dans le répertoire WEB-INF (si le moteur de servlet "TOMCAT" est utilisé). Pour appeler un template stocké dans le répertoire Public, il faudra donc écrire template=Public/index.jsp, par exemple. 3.3 Paramètres d'initialisation Le servlet a les paramètres d'initialisation suivants : trace.mode : Active ou désactive le mode trace (valeurs possibles : true|false) log.directory : Précise le répertoire où générer les logs (nom des fichiers log System<PID>.log, nom des fichiers trace System<PID>.tra). Par défaut, la sortie se fait sur System.out. activity.directory : Spécifie le répertoire où se trouvent les formulaires des activités. login.confirm : chemin relatif vers la page de ré-activation de la session (ex : Templates/loginConfirm.jsp). Si ce paramètre n'est pas renseigné, cette 3.4 fonctionnalité est désactivée. crypto.mode : active ou désactive le cryptage des sessions (valeur par défaut est false). crypto.pwd : mot de passe utilisé pour le cryptage. SSO.enabled : active le mode "SSO de confiance" (valeurs possibles : true|false, défaut : false) SSO.httpFieldName : nom du champ dans l'entête HTTP contenant le login W4 (valide uniquement quand SSO.enabled=true). Cryptage des URLs Le cryptage des URLs utilise le Java Cryptography Extension 1.2.1 (JCE). L'algorithme utilisé est le PBEWithMD5AndDES. Il s'agit d'un cryptage fondé à la fois sur un mot de passe et sur MD5 et DES. Si vous utilisez un JDK1.4, cette installation est inutile puisque cette version du JDK intègre le JCE1.2.1. Vérifier que votre JDK peut utiliser le JCE1.2.1 Télécharger le JCE 1.2.1 depuis l'adresse suivante : 3 http://java.sun.com/products/jce/index-121.html 'Dézipper' l'archive jce-1_2_1.zip Copier dans le répertoire JDK_HOME/jre/lib/ext, les fichiers suivants : JCE- 1_2_1/lib/jce1_2_1.jar, JCE-1_2_1/lib/local_policy.jar, JCE1_2_1/lib/sunjce_provider.jar et JCE-1_2_1/lib/US_export_policy.jar Attention, la transmission du contexte cryptée à des fonctions JavaScript nécessite d'utiliser, dans certains navigateurs, le code suivant : Transmission du contexte à des fonctions JavaScript <% String ctx = context.writeCtx(); String encCtx = java.net.URLEncoder.encode(ctx); 17 NOTE TECHNIQUE Spécificités du servlet W4 %> <a href="javascript:openWindow('<%=encCtx%>')">lien</a> W4 BPM Suite NOTE TECHNIQUE API URL et XML 18 4 Utilisation de l'interpréteur XML Attention ! Pour pouvoir utiliser l'interpréteur XML, il faut vous procurer les librairies Java suivantes : jaxp.jar 3 http://java.sun.com/ xalan.jar et xerces.jar 3 http://xml.apache.org/ Vous devez ensuite mettre à jour votre variable d'environnement CLASSPATH. L'interpréteur XML s'utilise de façon programmatique en Java. Ci-dessous un exemple d'utilisation : Appel de l'interpréteur XML import import import import import import import import import fr.w4.TWFexception; fr.w4.basic.*; fr.w4.runtime.ref.*; fr.w4.runtime.dynamic.*; fr.w4.buildtime.basic.*; fr.w4.buildtime.ref.*; fr.w4.buildtime.dynamic.*; fr.w4.session.*; fr.w4.marshal.*; import java.io.*; /** * This class calls the w4's xml interpreter */ public class TWFxmlTest { /** * main method * @param argv : array of string (argv[0] contains the name of the xml file to interpret */ public static void main(String[] argv) { if(argv.length != 1) { System.err.println("Bad usage"); System.err.println("Usage is :\njava TWFxmlTest endTask.xml"); System.exit(-1); } 19 NOTE TECHNIQUE Utilisation de l'interpréteur XML TWFsession w4Session = null; try { w4Session = new TWFnativeSession(); w4Session.setServerName("myW4Server"); w4Session.setInstanceName("w4adm"); /* open a channel to W4 */ w4Session.openConnection(); /* login */ w4Session.login("w4adm","w4adm"); /* create an XML request */ TWFxmlRequest xmlRequest = new TWFxmlRequest(new File(argv[0])); /* instantiate a TWFunmarshaller using the w4Session and the xmlRequest */ TWFunmarshaller unmarshaller = new TWFunmarshaller(w4Session, xmlRequest); /* execute the xmlRequest and get back a TWFresponse object containing the result list */ TWFresponse response = unmarshall.exec(); /* go through the result list */ java.util.Enumeration enum = response.elements(); while(enum.hasMoreElements()) { Object obj = enum.nextElement(); System.out.println(obj.toString()); } /* logout */ w4Session.logout(); } catch(Exception e) { e.printStackTrace(e); } catch(Throwable t) { System.err.println(t.getLocalizedMessage()); } /* be sure to close the channel using the finally clause */ finally { if(w4Session != null && w4Session.getSessionHandle() > 0) { try { w4Session.closeConnection(); } catch(Throwable t) { System.err.println(t.getLocalizedMessage()); W4 BPM Suite NOTE TECHNIQUE API URL et XML 20 } } } } } Compiler ce code avec la commande : javac -classpath .;c:\javalib\wfjlib.jar;c:\javalib\xalan.jar;c:\javalib\xerces.jar;c:\ja valib\jaxp.jar; Pour interpréter le fichier XML c:\test\endTask.xml, utiliser la commande suivante : java : -classpath .;c:\javalib\wfjlib.jar;c:\javalib\xalan.jar;c:\javalib\xerces.jar;c:\ja valib\jaxp.jar TWFxmlTest c:/temp/test.xml 21 NOTE TECHNIQUE Utilisation de l'interpréteur XML Note technique W4 Engine API URL et XML Pour toute remarque ou suggestion concernant ce document, vous pouvez contacter le support technique W4, en précisant la référence W4TN_URL_XML_010_FR : par le service de traitement des dossiers Supportflow sur MyW4.com, à l’adresse suivante : http://support.myw4.com par courrier électronique : [email protected] par téléphone : 33 (0) 820 320 762