Votre question

[Java] Problème avec SAXBuilder

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
27 Avril 2006 10:57:15

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 :

  1. SAXBuilder sxb = new SAXBuilder();


J'ai réduit au maximum mon programme pour ne laisser plus que ça dans la classe principale du programme :

  1. public ParseurDOM()
  2. {
  3. SAXBuilder sxb = new SAXBuilder();
  4. System.out.println("Test");
  5. }


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.

Autres pages sur : java probleme saxbuilder

a b L Programmation
27 Avril 2006 13:15:24

Est-ce que tu as bien fait l'import qu'il fallait ?
Est-ce que ça marche sans passer par le PHP ?
Es-tu sûr de vouloir utiliser un parser SAX et pas un parser DOM ?
27 Avril 2006 16:10:04

En mode console tout marche parfaitement et même pour l'user www-data (celui sur lequel Apache tourne).
Pour l'utilisation du parser SAX ou DOM le problème n'est pas là j'ai essayé d'utiliser DOMBuilder de l'API JDOM et j'ai le même problème !

Voici les deux programmes que j'utilise :

- le programme java (réduit au minimum ici)

import org.jdom.*;
import org.jdom.input.*;


public class JDOM3
{
static org.jdom.Document document;
static Element racine;

public static void main(String[] args)
{
//On crée une instance de SAXBuilder
try{

SAXBuilder sxb = new SAXBuilder();
System.out.println("test");


}catch(Exception e){

e.printStackTrace();
}

}
}


- le programme php

<?php

$line = system("/usr/bin/java -cp /usr/share/java/jdom.jar JDOM3", $retval);
echo"Statut : ".$retval;

?>


- Et la librairie JDOM : http://www.jdom.org/dist/binary/jdom-1.0.zip
Il suffit de prendre l'archive jdom.jar se trouvant dans le dossier build une fois l'archive zip décompressée. Et ensuite d'ajouter au classpath jdom.jar


Si quelqu'un a le temps d'essayer sur son serveur perso, ça serait sympa pour voir si ça marche chez quelqu'un (auquel cas voir la configuration qu'il a comparé à moi) au moins que là je sais vraiment plus quoi changer.

Merci d'avance.
3 Mars 2007 21:42:35

Salut, j'ai exactement le même pblèm sauf que moi c'est avec Lucene, dès que j'instancie une classe Search sercher = new Serch(); et System.out.println("bla bla"); j'ai rien sur la page web pourtant ça marche nickel dans la console ( ce ki veut dire ke mes var d'env sont ok). SI TU TROUVES UNE SOLUTION, FAIS-MOI SIGNE car là je galère grave.

Merci d'avance.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS