Bonjour à tous,
J'écris actuellement une application en JEE qui permet à des utilisateurs de résoudre des exercices de manière algorithmique dans le langage de leur choix (similaire à CodinGame si vous connaissez). J'ai tout d'abord commencé avec le langage javascript : afin de comprendre un algorithme extérieur dans ce langage j'utilise l'API ScriptEngine très pratique. Grâce aux méthodes get() et put() je peux ajouter ou récupérer les variables que je souhaite dans mon programme java.
Je suis ensuite passé sur le langage PHP et j'ai vu qu'il existait l'API PHP-JavaBridge permettant a ScriptEngine de comprendre le php. J'ai donc procédé à son installation, j'ai mis les fichiers script-api, php-servlet et javabridge.jar dans le dossier lib de mon application, et je démarre Tomcat avec la commande "-Dphp.java.bridge.php_exec=<My_Path>/php-cgi.exe" afin de le relier à PHP.
J'arrive donc à instancier un engin php comme ceci :
1 2
| ScriptEngineManager factoryphp = new ScriptEngineManager();
ScriptEngine enginephp = factoryphp.getEngineByName("php"); |
Cela marche et je peux interpréter du langage php. Le problème est que je n'ai ni accès à la fonction put() ni get() qui ne marchent pas pour cet engin.
J'ai aussi cette erreur qui s'affiche :
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider php.java.script.InvocablePhpScriptEngineFactory could not be instantiated
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider php.java.script.InteractivePhpScriptEngineFactory could not be instantiated
J'aimerais bien pouvoir utiliser l'engin php-invocable qui, si j'ai bien compris, permet d'utiliser ces deux méthodes get() et put() puisque actuellement je n'arrive pas à récupérer des variables provenant de l'algorithme php.
Par exemple si je mets :
System.out.println(enginephp.eval("<?php $test=2; echo $test; ?>"));
J'obtiens bien 2 en sortie. Mais si je mets :
1 2
| enginephp.put("a", 2);
System.out.println(enginephp.eval("<?php $test=$a; echo $test; ?>")); |
je n'obtiens rien en sortie, comme si les méthodes get() et put() ne marchaient pas.
De plus, je suis dans l'incapacité de récupérer toute exception concernant l'algorithme avec un bloc try/catch sur une Exception. Même si l'algorithme contient une faute, il est compilé normalement, aucune faute n'est soulevé lors du programme mais pourtant il affiche dans ma console l'erreur de l'algorithme.
Si un expert de javabridge veut bien m'aider je suis partant ! Et si besoin de clarification sur le sujet n'hésitez pas, j'ai essayé de rester assez synthétique mais je peux apporter plus de détails concernant mes codes par exemple.
Merci d'avance
Partager