Bonjour à tous je commence tout juste a utiliser Struts et je n'arrive pas mettre à jour un fichier xml
en utilisant jdom
Voici mon erreur :
Error 500: (class: sentinelle/configxml/AjoutServerXml, method: ajoutServer signature: ()LFormServeur;) Incompatible argument to method
mon actionForm :
import java.io.File; import java.io.FileOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sentinelle.configxml.AjoutServerXml; import sentinelle.configxml.TestAjoutXml; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.output.*; public class FormActionXml extends Action{ static Element racine; static org.jdom.Document document; public ActionForward execute(ActionMapping mapping, ActionForm _form, HttpServletRequest request, HttpServletResponse response) { ActionForward retour = null; AjoutServerXml ajoutServerXml = new AjoutServerXml(); try{ if(!formServeur.getUser().equals("")){ ajoutServerXml.buildListeServer(); retour = mapping.findForward("lecture"); } else{ retour = mapping.findForward("erreur"); } } catch (Exception e) { e.printStackTrace(); //retour = mapping.findForward("erreur"); } return retour; } }
et ma classe pour contruire mon fichier xml :
package sentinelle.configxml; import java.io.*; import java.util.ArrayList; import org.jdom.*; import org.jdom.input.SAXBuilder; import org.jdom.output.*; import FormServeur; public class AjoutServerXml{ static Element racine; static org.jdom.Document document; public FormServeur buildListeServer() { //On crée une instance de SAXBuilder SAXBuilder sxb = new SAXBuilder(); try { //On crée un nouveau document JDOM avec en argument le fichier XML document = sxb.build(new File("D:\\WSAD\\ServerParameterXML.xml")); } catch(Exception e) { System.out.println("Fichier non trouver : " + e); } //On initialise un nouvel élément racine avec l'élément racine du document. racine = document.getRootElement(); return ajoutServer(); } public FormServeur ajoutServer() { Element requete = new Element("requete"); racine.addContent(requete); Attribute serveur = new Attribute("serveur",ajoutServer().getServerNom()); requete.setAttribute(serveur); /*-------------URL---------------------------*/ Element urls = new Element("urls"); Element url = new Element("url"); Attribute adresse = new Attribute("adresse",ajoutServer().getUrlNom()); url.setAttribute(adresse); url.setText(ajoutServer().getAdresseHttp()); urls.addContent(url); requete.addContent(urls); /*-------------database---------------------*/ Element database = new Element("database"); Attribute type = new Attribute("type",ajoutServer().getTypeDatabase()); database.setAttribute(type); Element driver = new Element("driver"); driver.setText(ajoutServer().getDriver()); database.addContent(driver); Element adresseServer = new Element("adresse"); adresseServer.setText(ajoutServer().getAdresseServer()); database.addContent(adresseServer); Element hostname = new Element("hostname"); driver.setText(ajoutServer().getDriver()); database.addContent(hostname); Element dbname = new Element("dbname"); dbname.setText(ajoutServer().getDbname()); database.addContent(dbname); Element user = new Element("user"); user.setText(ajoutServer().getUser()); database.addContent(user); Element login = new Element("login"); login.setText(ajoutServer().getPassword()); database.addContent(login); Element requetesql = new Element("requetesql"); requetesql.setText(ajoutServer().getRequetesql()); database.addContent(requetesql); requete.addContent(database); enregistre("D:\\WSAD\\ServerParameterXML.xml"); return ajoutServer(); } static void enregistre(String fichier) { try { XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat()); sortie.output(document, new FileOutputStream(fichier)); } catch (java.io.IOException e){} } }
Un grand besoin d'aide merci![/code]
Bonsoir,
Sans regarder ton code en détrail, je me suis d'abord demandé:
tu n'as pas peur d'un appel récursif là ?
J'ai beau changé ma classe , lorsque j'appelle la méthode de cette classe dans mon form action j'ai toujours la même erreur, tu aurais une idée?
Ben l'idée c'est qu'il ne devrait pas y avoir un appel récursif là...
Ok j'ai changé ma classe :
mais rien ny fait j'ai toujours la même erreur :?
Toujours la même erreur dis tu, alors que maintenant la méthode ajoutServeur n'a plus la même signature ? C'est très curieux...
Question bête mais qu'il faut poser, as tu bien redéployé ta nouvelle version ?
Si oui, faudrait voir ta classe FormServeur et aussi le message d'erreur à nouveau.
oui j'ai redéployé , je ne sais pas si cela n'est pas du au fait que j'ai rajouté le jdom.jar dans le web-inf alors qu'il est déja dans le projet. Et si je ne le rajoute pas, au lieu du problème de signature j'ai un message d'erreur comme quoi une classe de jdom est manquante
jdom dans le projet ne suffit pas forcément. Pour que ça suffise, il faut que l'outil de construction de projet ajoute jdom à l'archive. Dans web-inf c'est normal de l'y mettre à priori. Que ce soit manuellement ou via l'outil de construction de projet.
Ceci dit, qu'avec une signature de méthode différente tu gardes la même erreur (relative à la signature de méthode), ça me dépasse. Au risque être un peu lourdingue, je verrais bien une fausse manip dans ton déploiement, ou lors de la recompilation de la classe ou quelque chose comme ça.
Bon rien n'y fais il s'avère en fait que la méthode addContent propre à jdom entraîne l'erreur car si je l'enlève l'erreur n'est plus mais mon fichier xml n'est pas mis à jour
Mais on imagine mal que cette méthode soit bugguée
Forcément.
Une suggestion: Après avoir modifié ta classe tu n'as pas le même message d'erreur, mais presque le même. Si oui, alors on peut penser qu'une des méthodes de la classe FormServeur ne retourne pas le type qu'il faut. C'est pour ça que je te demandais de montrer son code dans un autre message.
Bonjour fredericmazue, après de longue recherche sur google, j'ai pu voir que je n'étais pas le seul à avoir ce problème de conflit avec jdom et struts et il s'avère qu'ils ont le même problème avec cette méthode. Du coup j'utilise dom sans jdom et ça fonctionne.
En tout cas merci pour ton aide