[WSAD JDOM Struts] Incompatible argument to method

totoro
[WSAD JDOM Struts] Incompatible argument to method

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]
fredericmazue

Bonsoir,

Sans regarder ton code en détrail, je me suis d'abord demandé:

Quote:
   public FormServeur ajoutServer() 
    { 
    
     Element requete = new Element("requete"); 
     racine.addContent(requete); 
    
     Attribute serveur = new Attribute("serveur",ajoutServer().getServerNom());

tu n'as pas peur d'un appel récursif là ?

totoro

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?

fredericmazue

Ben l'idée c'est qu'il ne devrait pas y avoir un appel récursif là...

totoro

Ok j'ai changé ma classe :

package sentinelle.configxml;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
 
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
 
import sentinelle.appli.FormServeur;
 
public class AjoutServerXml {
 
	static Element racine;
	static org.jdom.Document document;
	
	public void buildListeServer()
	{
    	
	SAXBuilder sxb = new SAXBuilder();
		try
		{
	 	document = sxb.build(new File("D:\\WSAD\\ServerParameterXML.xml"));	
		
	 	}
	  	catch(Exception e)
		{		
		System.out.println("Fichier non trouver : " + e);				   
		}
	  	racine = document.getRootElement();
		ajoutServer(document);	   	
		}
		
	public void ajoutServer(Document doc)
	{
	 FormServeur formServeur = new FormServeur();	
	
	 Element requete = new Element("requete");
	 racine.addContent(requete);
	
	 Attribute serveur = new Attribute("serveur",formServeur.getServerNom());
	 requete.setAttribute(serveur);
 
	 /*-------------URL---------------------------*/
	 Element urls = new Element("urls");
	  
	 Element url = new Element("url");
	 Attribute adresse = new Attribute("adresse",formServeur.getUrlNom());
	 url.setAttribute(adresse);
	 url.setText(formServeur.getAdresseHttp());
	 urls.addContent(url);
	 
	 requete.addContent(urls);
	 
	 /*-------------database---------------------*/
	 Element database = new Element("database");
	 Attribute type = new Attribute("type",formServeur.getTypeDatabase());
	 database.setAttribute(type);
	 
	 Element driver = new Element("driver");
	 driver.setText(formServeur.getDriver());
	 database.addContent(driver);
	 
	 Element adresseServer = new Element("adresse");
	 adresseServer.setText(formServeur.getAdresseServer());
	 database.addContent(adresseServer);
	 
	 Element hostname = new Element("hostname");
	 driver.setText(formServeur.getDriver());
	 database.addContent(hostname);
	 
	 
	 requete.addContent(database);
	 enregistre("D:\\WSAD\\ServerParameterXML.xml");
 
	}
 
	static void enregistre(String fichier)
	{
	   try
	   {	  
		  XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
		  sortie.output(document, new FileOutputStream(fichier));
	   }
	   catch (java.io.IOException e){}
	}
 
}

mais rien ny fait j'ai toujours la même erreur :?

fredericmazue

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.

totoro

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

fredericmazue

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.

totoro

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

fredericmazue

Quote:

il s'avère en fait que la méthode addContent propre à jdom entraîne l'erreur

Mais on imagine mal que cette méthode soit bugguée

Quote:

car si je l'enlève l'erreur n'est plus mais mon fichier xml n'est pas mis à jour

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.

totoro

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