IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

GWT rpc générer un fichier XML


Sujet :

GWT et Vaadin Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut GWT rpc générer un fichier XML
    Bonjour, j'ai un problème avec GWT que je n'arrive pas à résoudre.
    J'ai crée une classe dans le package server qui permet de générer un fichier xml correspondant aux données d'une table de la BD.Cette classe marche convenable en mode console et créée le fichier XML souhaité.
    Le problème que lorsque j'exécute cette classe avec le RPC aucun fichier n'ai généré.
    Merci pour l'aide.

  2. #2
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    salut,

    est ce que tu peut donner un peu plus de détails stp ? est ce que l'appel se passe correctement ? un petit systeme.out.println("remote method called!") suffira pour le voir..

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Pardonnez moi je n'était pas là.
    Avec le mode debug de Netbean j'ai découvert que c'était un problème de path.
    J'aimerai savoir comment référencer le répertoir public de gwt dans mon code
    j'ai essayé /public et ça ne marche pas

  4. #4
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Premièrement, si tu utilises le mode RPC de google, donnes nous la signature de ta méthode. A moins que tu ne renvois la racine du DOM de l'XML, tu n'es pas prêt de récupérer ton fichier XML.

    Si ton serveur (via une servlet) envoi un flux XML, tu ne peux pas utiliser le mode RPC mais faire classiquement avec le RequestBuilder.


    Deuxièmement, au vu de ton deuxième message, je me demande si tu n'essayes pas de générer ton fichier XML dans ton dossier public pour ensuite le charger à partir de ton code client ?

    Tu n'as pas à aller chercher un fichier dans le dossier public ! Les fichiers qui se trouvent dans ce dossier seront copiés avec les fichiers générés par GWT dans un dossier web, dossier dont le contenu sera servi par le serveur HTTP.

    Dans le cas où ta servlet fabriquerait un fichier dans ce dossier web, tu peux accéder à ce fichier avec son nom préfixé soit par GWT.getHostPageBaseURL() ou GWT.getModuleBaseURL() (je ne sais plus exactement)

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    je préfère générer le fichier XML dans répertoire public, mais je netrouve pas comment référencer ce répertoire dans le code
    La méthode RPC marche(sauf que le path est erroné) et je l'utilise pour mettre à jour le fichier XML en cas d'ajout d'enregistrement. Voici le code

    ***** fichier GenerateXMLBDImpl *******************************

    public class GenerateXMLBDImpl extends RemoteServiceServlet implements
    GenerateXMLBD {
    public void generateXMLTable(String table,String path) {
    //System.out.println("context "+getServletContext().getRealPath("public"));
    XMLBD xmlBD= new XMLBD("delegation",""+getServletContext().getRealPath("public"));

    }
    }
    *******************************************************
    getServletContext().getRealPath donne le chemin suivant :
    D:\Documents and Settings\Administrateur\Mes documents\NetBeansProjects\INBMIWebApp2\build\web\public\public_delegation_data.xml
    Lorsque j'utilise le fichier public_delegation_data.xml pour afficher le contenu, rien ne s'affiche

    **********MainEntryPoint contenant un tree pour affichage ***********
    public class MainEntryPoint implements EntryPoint {

    public static GenerateXMLBDAsync getService(){
    // Create the client proxy. Note that although you are creating the
    // service interface proper, you cast the result to the asynchronous
    // version of
    // the interface. The cast is always safe because the generated proxy
    // implements the asynchronous interface automatically.
    GenerateXMLBDAsync service = (GenerateXMLBDAsync) GWT.create(GenerateXMLBD.class);
    // Specify the URL at which our service implementation is running.
    // Note that the target URL must reside on the same domain and port from
    // which the host page was served.
    //
    ServiceDefTarget endpoint = (ServiceDefTarget) service;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "generatexmlbd";
    endpoint.setServiceEntryPoint(moduleRelativeURL);
    return service;
    }
    /** Creates a new instance of MainEntryPoint */
    public MainEntryPoint() {
    }

    /**
    * The entry point method, called automatically by loading a module
    * that declares an implementing class as an entry-point
    */
    public void onModuleLoad() {
    final Button button = new Button("Click me!");
    final AsyncCallback callback = new AsyncCallback() {
    public void onSuccess(Object result) {

    }

    public void onFailure(Throwable caught) {

    }
    };
    button.addClickListener(new ClickListener(){
    public void onClick(Widget w) {
    // Window.alert(" path gwt :"+GWT.getHostPageBaseURL());
    //Window.alert(" path gwt2 :"+GWT.getModuleBaseURL());
    getService().generateXMLTable("",GWT.getHostPageBaseURL(), callback);
    final Tree t = new Tree();
    final TreeItem gouv = new TreeItem("Kasserine");
    // récupérer le fichier xml depuis le serveur

    HTTPRequest.asyncGet("public_delegation_data.xml", new ResponseTextHandler() {

    public void onCompletion(String responseText) {
    Document xmlDoc = XMLParser.parse(responseText);
    Element root = xmlDoc.getDocumentElement();
    NodeList lignes = root.getElementsByTagName("row");
    String libDeleg;
    for (int i = 0; i < lignes.getLength(); i++) {
    Element ligne = (Element) lignes.item(i);
    Element deleg = (Element) ligne.getElementsByTagName("libedelefr").item(0);
    NodeList delegs = deleg.getChildNodes();
    libDeleg = delegs.item(0).getNodeValue();
    TreeItem item = new TreeItem(libDeleg);
    gouv.addItem(item);
    NodeList etabs = ligne.getElementsByTagName("etablissement");
    String libEtab;
    for (int j = 0; j < etabs.getLength(); j++) {
    Element etab = (Element) etabs.item(j);
    Element itemtab = (Element) etab.getElementsByTagName("libeetabar").item(0);
    NodeList etabss = itemtab.getChildNodes();
    libEtab = etabss.item(0).getNodeValue();
    TreeItem itemEtab = new TreeItem(libEtab);
    item.addItem(itemEtab);
    }
    }


    }
    });
    t.addItem(gouv);
    RootPanel.get().add(t);
    }
    });

    RootPanel.get().add(button);
    }

    }

  6. #6
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Quel est l'interet de passer le path à ton service si dans son implémentation, tu ne t'en sers pas ???

    Si tu t'obstines à vouloir mettre ton fichier généré par ta servlet dans le dossier "public" de ton projet gwt, c'est que tu n'as pas compris comment il fonctionne. Et je te souhaite bon courage.

    Bien entendu, générer l'XML par le serveur et le récupérer par le client est possible.

    Ton serveur doit générer le fichier xml dans un dossier.
    Ce dossier devra être servi par ton serveur http.
    A moins de connaitre le chemin absolu de ce dossier sur ton serveur (une fois l'application déployée), tu ne peux pas l'écrire directement.

    Ton idée de passer le path au serveur depuis le client est une bonne idée.
    Tu veux au final que ton client récupère ton fichier xml, il va donc aller le chercher dans le dossier web. Le client indique donc au serveur le path où devra se trouver ce fichier sur le serveur.
    Le serveur peut connaître le dossier web où est déployé l'application, en ajoutant ce path, il peut donc écrire le fichier XML où il est attendu.

    Pour mieux comprendre :
    Supposons que ton application gwt une fois généré se trouve dans le dossier /software/tomcat/webapps/TonAppli/ sur ton serveur.
    Ce serveur fait par exemple pointer l'url "http://tonAppli.site.com" vers ce dossier.
    Le client est affiché via http://tonAppli.site.com/TaPage.html. Il demande au serveur de lui fabriquer un fichier xml de données. Ce fichier peut se trouver à la racine ou dans un dossier. Il donne le chemin relatif en appelant le service : "generate/nomfichier.xml".
    Le serveur est capable de connaître où se trouve le dossier de l'application (/software/tomcat/webapps/TonAppli/ ) et de rajouter "generate/nomfichier.xml". Ce qui lui permet de créer le fichier.
    Le client en retour demande le fichier http://tonAppli.site.com/generate/nomfichier.xml (Le début est fourni par GWT, la fin décidée par toi)
    Le serveur http est donc capable de le délivrer.

    Remarques :
    Avec cette façon de faire, tu peux avoir les problèmes suivants :

    Si le client fait un appel asynchrone au serveur pour qu'il lui fabrique le fichier sur disque, celui-ci risque de ne pas être terminé lorsque le client y accède.
    La solution à ce problème est de faire une requête synchrone, ou d'attendre que le serveur lui indique qu'il a terminé !)

    Si tu as plusieurs clients simultanés, et que les données demandées sont différentes, tu auras des soucis. La solution peut consister à donner un nom unique au fichier pour chaque client.

    Une autre solution peut résoudre les deux problèmes soulevés (synchronisation et multiples client) en écrivant le fichier XML généré directement sur le flux de réponse et faire en sorte que le client interprète cette réponse.

Discussions similaires

  1. [PL/SQL] générer un fichier xml à partir du programme pl/sql
    Par moneyinthebank dans le forum PL/SQL
    Réponses: 2
    Dernier message: 15/06/2006, 17h09
  2. [DOMXML] Générer arborescence fichier XML
    Par gabychon dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 21/04/2006, 10h59
  3. générer un fichier XML à partir d'un prog en C
    Par filou18fr dans le forum XML/XSL et SOAP
    Réponses: 10
    Dernier message: 22/02/2006, 16h09
  4. générer un fichier xml à partir xsl ou xslt
    Par sarah1 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/05/2005, 17h57
  5. Réponses: 2
    Dernier message: 27/05/2004, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo