Erreur lors de l'essai de l'exemple rest-api-example

1
+1
-1

Bonjour.

J'essaie actuellement de me servir des api rest en java. Pour cela j'ai voulu débuter en essayant l'exemple que vous fournissez : http://documentation.bonitasoft.com/create-your-first-project-web-rest-a...

J'ai récupéré les sources depuis github. Mon serveur tomcat tourne sur mon pc (j'ai bien accès au portal web). Lorsque que j'essaie de lancer le main de la classe App.java, j'ai le droit à une erreur :

Deploying process 'My first process'...
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: Failed : HTTP error code : 500 : Erreur Interne de Servlet
        at org.bonitasoft.example.App.deployProcess(App.java:365)
        at org.bonitasoft.example.App.start(App.java:142)
        at org.bonitasoft.example.App.main(App.java:114)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:483)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.lang.RuntimeException: Failed : HTTP error code : 500 : Erreur Interne de Servlet
        at org.bonitasoft.example.App.ensureStatusOk(App.java:245)
        at org.bonitasoft.example.App.extractProcessId(App.java:473)
        at org.bonitasoft.example.App.installProcessFromUploadedBar(App.java:468)
        at org.bonitasoft.example.App.deployProcess(App.java:357)
        ... 7 more

L'unique chose que j'ai modifié dans les sources c'est l'URI de Bonita (qui tourne sur le port 8081 de mon pc). L'appel à l'api de login fonctionne bien. Par contre c'est au moment de déployer le process que sa plante.

Avez vous une idée de ce qui peut provoquer ce problème ?

Merci d'avance. Yannick

Comments

Submitted by big73 on Tue, 05/19/2015 - 11:27

Bonjour Yannick,

J'ai exactement le même souci que vous actuellement, avez-vous résolu le problème et si oui, pouvez-vous me dire comment s'il vous plaît ?

Très cordialement.

Submitted by yannick.lombardi on Tue, 05/19/2015 - 11:36

Bonjour.

Dans mon cas, l'erreur venait du fait que l'api pour déployer un processus n'existait pas dans la version de Bonita que j'avais (Community 6.3.7). Comme indiqué dans la documentation, ce n'est pas accessible pour la version Community. Il faut posséder une licence. http://documentation.bonitasoft.com/rest-api-overview

Submitted by Sean McP on Tue, 05/19/2015 - 12:14

But reading here:

http://documentation.bonitasoft.com/create-your-first-project-web-rest-api-and-maven#deploy

says that deploy is part of 6.3.x

Is this a documentation Error in the previous Link?

regards

Submitted by big73 on Tue, 05/19/2015 - 12:24

@Yannick Ce que vous dites est intéressant et d'ailleurs je vois que les versions qui peuvent y prétendre sont différentes pour les versions 6.5 6.4 et 6.3

Pour la 6.5 et la 6.4 seuls Teamwork, Efficiency et Performance peuvent en bénéficier. Pour la 6.3 ce sont d'après la doc toutes les versions... même community et donc vous n'auriez pas du avoir ce problème. lien vers la 6.3

Submitted by yannick.lombardi on Tue, 05/19/2015 - 13:49

Pour la version 6.3, il existe bien des api REST, mais pas toutes. Il est vrai que d'après le lien qu'à posté Sean, ça devrait fonctionner. J'ai réussi à faire fonctionner plusieurs api REST sur la version 6.3. Le login fonctionne, le listing des processus, des utilisateurs et d'autres api fonctionnent. Par contre celle qui permet d'installer un processus ou de lancer un processus ne fonctionnent pas. Ou en tout cas, elles ne fonctionnent pas comme les autres puisque je n'ai jamais réussi à les utiliser.

3 answers

1
-1
-1
This one is the BEST answer!

L'erreur venait du fait que l'api pour déployer un processus n'existait pas dans la version de Bonita que j'avais (Community 6.3.7). Comme indiqué dans la documentation, ce n'est pas accessible pour la version Community. Il faut posséder une licence. http://documentation.bonitasoft.com/rest-api-overview

1
0
-1

Bonjour, D'après ce que je comprend, il y a deux problèmes: 1. le fichier n'est pas présent dans le répertoire temporaire quand on appelle l'API process. Peut-être l'API est appelée deux fois avec le même nom de fichier ? Dans ce cas, le fichier ne serait plus là car il a déjà été consommé une fois. 2. la version de bonita avec laquelle le .bar a été créé ne correspond pas à la version de bonita sur laquelle l'appel à l'API est fait. Il faut le re-générer avec le studio. Je suggère de d'abord régler ce problème avant d'aller plus loin.

Comments

Submitted by yannick.lombardi on Wed, 05/20/2015 - 11:12
  1. Le fichier est bien présent dans le répertoire temporaire. J'ai vérifier ce répertoire. L'api n'est appelé qu'une seule fois. Le programme plante dès le premier appel.

  2. Le fichier bar est généré par le programme. Il utilise les classes BusinessArchiveBuilder et ProcessDefinitionBuilder. Je n'ai trouvé aucune information quant à la version de Bonita qui est utilisé pour créer le fichier.

J'ai aussi vérifié dans le fichier POM, la version du jar de Bonita correspond bien à celle de mon studio.

Submitted by anthony.birembaut on Wed, 05/20/2015 - 12:11

Je ne sais pas si c'est le forum, mais les \t dans le path ont l'air d’être remplacés par des tab. ça vaut peut être le coup de mettre un fichier dans le repertoire tmp à la main et de passer sont URL en dur dans le code pour voir si ça n'est pas un problème de format d'URL ou d'encoding. Pour le problème de version, je suggère de comparer le process-design.xml du .bar avec celui d'un .bar généré par le studio pour voir quelle est la différence.

Submitted by yannick.lombardi on Wed, 05/20/2015 - 14:16

Ca ne vient pas du forum, c'est déjà comme ça dans les logs.

Je viens d'essayer en mettant un bar généré depuis le studio. J'ai exactement le même problème dans les logs. Les \t sont remplacés.

C'est surement un bug qu'il y avait dans cette version de l'api. Il a peut être été corrigé dans les nouvelles api.

EDIT : J'ai aussi comparé le bar généré depuis le studio et celui généré depuis le programme. L'unique différence est dans le Process Definition qui est à 6.3 dans le bar du studio et 6.0 dans le bar du programme. Je n'ai pas la moindre idée de ce qu'il faut modifier dans le programme pour lui indiquer dans quelle version il doit générer le fichier bar.

Submitted by anthony.birembaut on Wed, 05/20/2015 - 14:59

A part si il y a un bonita-client-6.0.x.jar ou bonita-common-6.0.x.jar qui traîne dans le classpath en plus des 6.3.7, je ne vois pas... Pour le problème de File not found, il faudrait comparer (avec firebug ou autre) avec la requête faite par le portail quand on deploie un processus pour voir ce qui diffère.

Submitted by yannick.lombardi on Wed, 05/20/2015 - 16:03

Bien vu. Bien que j'avais modifié le fichier pom, les dépendences n'avaient pas été mise à jour et ça pointait encore vers la version 6.0. C'est corrigé et maintenant le bar généré par le programme est à la bonne version.

Par contre le problème des \t persiste.

1
0
-1

Bonjour, L'API pour déployer un processus est bien disponible en version communautaire. Vous pouvez essayer de déployer votre processus via l'interface du portail pour vérifier que le problème ne vient du fichier .bar que vous essayez de déployer. Vous pouvez aussi consulter les log dans le répertoire log/ du bundle tomcat (fichiers bonita*.log)

Comments

Submitted by yannick.lombardi on Wed, 05/20/2015 - 09:52

Bonjour. Je viens de retester et j'ai plusieurs erreurs.

Lors du déploiement du processus, j'ai les logs suivant (avec plein de caractères bizarres) :

2015-05-20 09:14:38 org.bonitasoft.web.toolkit.server.servlet.ToolkitHttpServlet
GRAVE: java.io.FileNotFoundException: the file does not exists: D:\BonitaBPMCommunity-6.3.7\workspace   omcatonita\client      enants\1        mp      mp_1874263626879510207.bar
org.bonitasoft.web.toolkit.client.common.exception.api.APIException: java.io.FileNotFoundException: the file does not exists: D:\BonitaBPMCommunity-6.3.7\workspace     omcatonita\client      enants\1        mp      mp_1874263626879510207.bar
        at org.bonitasoft.web.rest.server.datastore.bpm.process.ProcessDatastore.readBusinessArchive(ProcessDatastore.java:102)
        at org.bonitasoft.web.rest.server.datastore.bpm.process.ProcessDatastore.add(ProcessDatastore.java:75)
        at org.bonitasoft.web.rest.server.api.bpm.process.APIProcess.add(APIProcess.java:80)
        at org.bonitasoft.web.rest.server.api.bpm.process.APIProcess.add(APIProcess.java:46)
        at org.bonitasoft.web.rest.server.framework.API.runAdd(API.java:157)
        at org.bonitasoft.web.rest.server.framework.APIServletCall.doPost(APIServletCall.java:188)
        at org.bonitasoft.web.toolkit.server.servlet.ToolkitHttpServlet.doPost(ToolkitHttpServlet.java:188)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
        at org.bonitasoft.web.toolkit.server.servlet.ToolkitHttpServlet.service(ToolkitHttpServlet.java:75)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
        at org.bonitasoft.web.toolkit.server.servlet.ToolkitHttpServlet.service(ToolkitHttpServlet.java:226)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.bonitasoft.console.common.server.login.filter.AbstractAuthorizationFilter.doFilter(AbstractAuthorizationFilter.java:60)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.bonitasoft.console.common.server.login.filter.AbstractAuthorizationFilter.doFilter(AbstractAuthorizationFilter.java:60)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.bonitasoft.console.security.SessionFixationValve.invoke(SessionFixationValve.java:77)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: the file does not exists: D:\BonitaBPMCommunity-6.3.7\workspace       omcatonita\client      enants\1        mp      mp_1874263626879510207.bar
        at org.bonitasoft.engine.bpm.bar.BusinessArchiveFactory.readBusinessArchive(BusinessArchiveFactory.java:90)
        at org.bonitasoft.web.rest.server.datastore.bpm.process.ProcessDatastore.readBusinessArchive(ProcessDatastore.java:100)
        ... 29 more

Le lien vers le fichier semble avoir un soucis. Pourtant j'ai vérifié la requete Post qui est envoyé et le lien y est correct.

J'ai ensuite essayé de voir si le fichier existe bien, ce qui est le cas. Et j'ai tenté de l'installer directement dans le portail. Là j'ai cette erreur :

org.bonitasoft.engine.bpm.bar.InvalidBusinessArchiveFormatException: Wrong version of your process definition, 6.http://www.bonitasoft.org/ns/process/client/6.0 namespace is not compatible with your current version. Use the studio to update it.
Submitted by big73 on Tue, 05/26/2015 - 12:56

Je viens de tester aujourd'hui avec le fichier xml de l'organisation généré par le studio et même le fichier du mapping des acteurs et toujours la même exception :

Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeExceptio
n: Failed : HTTP error code : 500 : Erreur Interne de Servlet
        at org.bonitasoft.example.App.importOrganizationFromFile(App.java:275)
        at org.bonitasoft.example.App.importOrganization(App.java:251)
        at org.bonitasoft.example.App.start(App.java:134)
        at org.bonitasoft.example.App.main(App.java:114)
Caused by: java.lang.RuntimeException: Failed : HTTP error code : 500 : Erreur I
nterne de Servlet
        at org.bonitasoft.example.App.ensureStatusOk(App.java:244)
        at org.bonitasoft.example.App.consumeResponse(App.java:215)
        at org.bonitasoft.example.App.importOrganizationFromFile(App.java:269)
        ... 3 more

c'est la méthode executePostRequest(String apiURI, UrlEncodedFormEntity entity) à la ligne 269 qui lève cette exception. Ici par contre le second paramètre qui est transmis est un String :

String payloadAsString = "{\"organizationDataUpload\":\"" + uploadedFilePath + "\"}";

Avez-vous résolu ce problème ?

Submitted by yannick.lombardi on Tue, 05/26/2015 - 13:46

Je n'ai pas résolu ce problème, j'ai commenté l'appel à la méthode importOrganization.

Submitted by big73 on Fri, 05/29/2015 - 15:55

Bonjour tout le monde,

Alors je viens de tester avec la version de Bonita 6.4.2 et ça plutôt l'air de marcher correctement avec des requêtes très basiques qui retournent du JSON genre combien de processus activés, les utilisateurs etc...

Mais maintenant j'aimerais instancier un nouveau cas de processus et je vois que l'API REST propose la méthode suivante :

public int startACase(long processDefinitionId)

Et ce long justement est généré avec une autre méthode (il faut créer un fichier bar) sauf que moi je n'ai pas besoin de ce fichier car l'application est déjà déployé dans le bundle Tomcat. Par contre je ne sais pas comment générer ce long pour ensuite le transmettre à la méthode startACase(long id..).

Et donc naturellement ma question est : comment généré ce long ? ou accessoirement comment instancier un nouveau cas de processus si on peut faire autrement ?

Merci d'avance la communauté !

Submitted by yannick.lombardi on Fri, 05/29/2015 - 17:19

Je pense que cette question mérite la création d'un nouveau sujet étant donné qu'elle s'éloigne pas mal de la question d'origine. Je ne peux par contre pas y apporter de réponse.

Submitted by big73 on Sat, 05/30/2015 - 09:38

Salut Yannick

Oui je me posais la question aussi de crée un autre sujet et c'est ce que je vais faire.

Encore merci pour ta participation tout au long du fil et merci à tout le monde !

Notifications