Bonjour,
Mon problème est une peu particulier dans la mesure où il concerne
plusieurs domaines mais étant donné que le vrai problème semble venir
de la classe SAXBuilder de l'API JDOM je pense qu'il a sa place dans ce
forum.
J'ai donc fait un programme JAVA qui prend en entrée un fichier XML et
qui va dans un premier temps parser ce fichier, puis faire des
traitements sur les données parsées avant de finalement créer un
nouveau fichier XML résultat de ce traitement.
Ce programme fonctionne très bien dans la console. Pour l'application
que je développe j'ai besoin de passer par php sur un serveur Apache2
donc pour utiliser le programme JAVA.
J'ai donc dans mon programme PHP utilisé la fonction system("java
monProgramme donnees.xml", $retval); qui exécute la commande passée en
paramètre dans un shell. J'ai bien vérifié que l'utilisateur sur lequel
tourne le serveur Apache2 a les droits nécessaires, et que le CLASSPATH
et le PATH soient bien configurés. D'ailleurs lorsque j'éxécute mon
programme JAVA en mode console en étant loggué sous cet utilisateur
tout marche bien.
Et là, bizarrement quand j'exécute le programme, il y a un problème.
Après pas mal de temps de recherche je suis arrivé à isoler ce qui
empêchait le programme de fonctionner et apparemment cela viendrait de
la ligne suivante dans le programme JAVA :
SAXBuilder sxb = new SAXBuilder();
J'ai réduit au maximum mon programme pour ne laisser plus que ça dans la classe principale du programme :
public ParseurDOM()
{
SAXBuilder sxb = new SAXBuilder();
System.out.println("Test");
}
En exécutant le programme JAVA depuis PHP avec ça dans la classe
principale, j'ai un retour d'exécution à 1 qui indique qu'il y a une
erreur (qui ne peut donc venir que du constructeur SAXBuilder) et
l'affichage de la ligne "Test" ne se fait pas.
En enlevant l'appel au constructeur SAXBuilder(), j'ai bien l'affichage
de la ligne "Test". Le problème se situe donc dans le constructeur
SAXBuilder().
J'ai donc été voir dans les sources de JDOM dans la classe SAXBuilder
et je ne vois rien de spécial en fait. Lors de l'instanciation, il y a
juste une instanciation de la classe DefaultJDOMFactory dont le
constructeur ne fait rien !
Donc, je ne vois vraiment pas d'où ça peut venir à ce niveau là, je
pensais à un problème de localisation du driver SAX utilisé par
SAXBuilder mais même en changeant et en mettant dans le constructeur
SAXBuilder() un driver SAX valide : org.apache.xerces.parsers.SAXParser
par exemple (et en modifiant le classpath), le problème reste le même.
J'ai même tenté d'utiliser d'autres API du même genre comme DOM4J ou
autres mais ça bloque toujours au même niveau lorsque l'on crée une
instance de la classe cherchant les drivers SAX apparemment.
Quelqu'un aurait une idée de ce que je peux faire ? Peut-être modifier
des options dans Apache2 (je ne vois pas trop ce que je peux modifier
de plus en fait)? Modifier un chemin d'accès ? Ou peut être cela ne
peut pas se faire et ça ne marchera pas ?
Merci d'avance de votre aide.