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 débutant : erreur de fichier : ATTENTION: No file found for: /test/hello


Sujet :

GWT et Vaadin Java

  1. #1
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut GWT débutant : erreur de fichier : ATTENTION: No file found for: /test/hello
    Salut à tous, je fais mes tous premiers pas avec GWT et j'essaye de faire un service qui affiche "helloworld" dans la console.

    Voici la structure de mon projet :

    Pour cela, j'ai les classes suivantes :
    package client :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    package com.test.client;
     
    import com.google.gwt.user.client.rpc.RemoteService;
     
    public interface MonService extends RemoteService {
    	public String hello() ;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package com.test.client;
     
    import com.google.gwt.user.client.rpc.AsyncCallback;
     
    public interface MonServiceAsync {
     
    	void hello(AsyncCallback<String> callback);
     
    }
    coté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    package com.test.server;
     
    import com.google.gwt.user.server.rpc.RemoteServiceServlet;
    import com.test.client.MonService;
     
    public class MonServiceImpl extends RemoteServiceServlet implements MonService {
     
        @Override
        public String hello() {
            return ("hello world ! ");
        }
     
    }
    ma classe qui implémente entry point :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package com.test.client;
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.client.rpc.ServiceDefTarget;
     
     
    public class Test implements EntryPoint {
        //Pour instancier le service
        private final MonServiceAsync service = GWT.create(MonService.class);
     
        public void onModuleLoad() 
        {
            //Voilà le service est mappé avec le serveur, on peut effectuer l’appel à la méthode.
            ((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () + "hello");
     
            appelServiceHelloTest() ;
        }
     
        //
        public void appelServiceHelloTest()
        {
            service.hello(new AsyncCallback<String>() {
                public void onFailure(Throwable caught) {
                    System.out.println("echec");
                }
     
                public void onSuccess(String result) {
                    System.out.println("succes" + result);
                }
            });
        }
     
    }
    et mon fichier test.gwt.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
    <module rename-to='test'>
      <!-- Inherit the core Web Toolkit stuff.                        -->
      <inherits name='com.google.gwt.user.User'/>
     
     <servlet path="/hello" class="com.test.server.MonServiceImpl" />
     
      <!-- Inherit the default GWT style sheet.  You can change       -->
      <!-- the theme of your GWT application by uncommenting          -->
      <!-- any one of the following lines.                            -->
      <inherits name='com.google.gwt.user.theme.standard.Standard'/>
      <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
      <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
     
      <!-- Other module inherits                                      -->
     
      <!-- Specify the app entry point class.                         -->
      <entry-point class='com.test.client.Test'/>
     
      <!-- Specify the paths for translatable code                    -->
      <source path='client'/>
      <source path='shared'/>
     
    </module>
    J'obtiens l'erreur suivante :
    11 oct. 2010 21:15:40 com.google.appengine.tools.development.LocalResourceFileServlet doGet
    ATTENTION: No file found for: /test/hello


    J'ai du mal à voir ce que je pourrai mettre, je vois bien que mon chemin est faux, mais pourtant. je pensais qu'en mettant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <servlet path="/hello" class="com.test.server.MonServiceImpl" />
    le mapping du service entre le serveur et le client était ok et que je pouvais l'appeler comme cela dans mon programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            ((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () + "hello");
    Si quelqu'un a une idée, merci d'avance, les débuts sont toujours laborieux ...

    merci d'avance

  2. #2
    Membre confirmé
    Avatar de link256
    Profil pro
    Développeur Java
    Inscrit en
    Février 2003
    Messages
    596
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2003
    Messages : 596
    Points : 642
    Points
    642
    Par défaut
    Salut,

    Je te conseillerais de créer une application GWT par défaut soit avec le plugin GWT d'Éclipse ou via une commande maven, ce qui correspondra à ce que tu recherche à faire et de comparer le code généré a celui de ton application ce qui devrait te permettre de trouver l'origine de ton problème.

  3. #3
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    Je viens de recréer un projet avec eclipse,
    j'ai recréé la même structure que le projet google (je n ai pas touché au fichier .gwt.xml) etc'est la méthode onFailure qui est éxécutée et non OnSucess .... pourquoi ?
    Je pensais que mon appel de service était ok ...

    http://127.0.0.1:8888/test2/
    echec

    l'appel de mon service est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        public void onModuleLoad() 
        {
            //Voilà le service est mappé avec le serveur, on peut effectuer l’appel à la méthode.
            ((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () );
     
            System.out.println(GWT.getModuleBaseURL ());
     
            appelServiceHelloTest() ;
        }
     
        //
        public void appelServiceHelloTest()
        {
            service.hello(new AsyncCallback<String>() {
                public void onFailure(Throwable caught) {
                    System.out.println("echec");
                }
     
                public void onSuccess(String result) {
                    System.out.println("succes" + result);
                }
            });
        }
    je ne comprends vraiment pas ...
    merci d'avance,
    ben

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 165
    Points : 248
    Points
    248
    Par défaut
    Si System.out.println("echec"); s’exécute cela signifie que l'appel au serveur s'effectue correctement mais que le traitement sur le serveur lance une exception, normalement tu as un log dans la console gwt.

  5. #5
    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
    Points : 4 265
    Points
    4 265
    Par défaut
    En utilisant l'annotation, c'est plus simple pour les chemins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // Annotation dans ton service
    @RemoteServiceRelativePath("RelativePathServlet")
    public interface RpcService extends RemoteService
     
    // Utilisation
    private static final RpcServiceAsync rpcService = GWT.create(GxtRpcService.class);
     
    public void onModuleLoad() 
    {
        rpcService.taMethode();
    }
     
    // module
    <module rename-to="NomModule">
     
    // web.xml
      <servlet>
        <servlet-name>bindName</servlet-name>
        <servlet-class>com.company.RpcServletImpl</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>bindName</servlet-name>
        <url-pattern>/NomModule/RelativePathServlet</url-pattern>
      </servlet-mapping>

  6. #6
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut
    salut benwit, merci pour ta réponse,
    j'ai appliqué tes suggestions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package test2.client;
     
    import com.google.gwt.user.client.rpc.RemoteService;
    import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
     
    @RemoteServiceRelativePath("RelativePathServlet")
    public interface MonService extends RemoteService {
     
        public String hello() ;
     
    }
    Test2.gwt.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="UTF-8"?>
    <module rename-to="NomModule">
      <!-- Inherit the core Web Toolkit stuff.                        -->
      <inherits name='com.google.gwt.user.User'/>
     
      <!-- Inherit the default GWT style sheet.  You can change       -->
      <!-- the theme of your GWT application by uncommenting          -->
      <!-- any one of the following lines.                            -->
      <inherits name='com.google.gwt.user.theme.standard.Standard'/>
      <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
      <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
     
      <!-- Other module inherits                                      -->
     
      <!-- Specify the app entry point class.                         -->
      <entry-point class='test2.client.Test2'/>
     
      <!-- Specify the paths for translatable code                    -->
      <source path='client'/>
      <source path='shared'/>
     
    </module>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class Test2 implements EntryPoint {
     
        private final GreetingServiceAsync greetingService = GWT
                .create(GreetingService.class);
     
        private final MonServiceAsync service = GWT.create(MonService.class) ; 
     
        /**
         * This is the entry point method.
         */
        public void onModuleLoad() 
        {
            //Voilà le service est mappé avec le serveur, on peut effectuer l’appel à la méthode.
            // ((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () +"test2");
     
            System.out.println(GWT.getModuleBaseURL ());
     
            service.hello(new AsyncCallback<String>() {
                public void onFailure(Throwable caught) {
                    System.out.println("echec");
                }
     
                public void onSuccess(String result) {
                    System.out.println("succes" + result);
                }
            });
     
        }
     
    }
    web.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
     
    <web-app>
     
      <!-- Servlets -->
      <servlet>
        <servlet-name>monServlet</servlet-name>
        <servlet-class>test2.server.MonServiceImpl</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>monServlet</servlet-name>
        <url-pattern>/test2/monServlet</url-pattern>
      </servlet-mapping>
     
      <!-- Default page to serve -->
      <welcome-file-list>
        <welcome-file>Test2.html</welcome-file>
      </welcome-file-list>
     
    </web-app>
    Mais j'obtiens les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    20:23:12.904 [ERROR] [test2] Unable to find 'test2.gwt.xml' on your classpath; could be a typo, or maybe you forgot to include a classpath entry for source?
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    20:23:12.917 [ERROR] [test2] Failed to load module 'test2' from user agent 'Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.2.10) Gecko/20100915 Ubuntu/10.04 (lucid) Firefox/3.6.10' at localhost:42110

    voici la structure de mon projet sous eclipse :


    Uploaded with ImageShack.us

    merci d'avance ...
    benilto

  7. #7
    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
    Points : 4 265
    Points
    4 265
    Par défaut Il faut transposer mon exemple à ton cas
    Pour "RelativePathServlet" et "NomModule", tu peux mettre les chaînes de caractères que tu veux mais il faut les remplacer partout où elles apparaissent dans mon exemple sinon comment veux tu que les liens soient fait ?

    Reprenons ton exemple.
    Dans ton web.xml, ton NomModule, c'est "test2" et ton RelativePathServlet, c'est "monServlet"
    Tu ne touches donc pas à ton web.xml.
    Tu ne touches pas non plus à ton Test2.java.

    Dans Test2.gwt.xml, tu mets le nom de ton module, soit :
    <module rename-to="test2">

    Dans MonService.java, tu mets ton chemin relatif dans l'annotation, soit :
    @RemoteServiceRelativePath("monServlet")

  8. #8
    Membre confirmé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Points : 486
    Points
    486
    Par défaut merci, ça tourne
    merci, merci et encore merci, je débute en GWT et je vais étudier de façon plus précise le rôle des différentes directives, telles que : @RemoteServiceRelativePath("monServlet"), la configuration des fichiers web.xml et test2.gwt.xml...

    Je suis conscient que mon post n'était pas forcément d'une pertinence énorme !!

    En tous cas, merci pour ta patience et tes réponses précises, je remets mon code avec les modifs fonctionnelles, si ça peut aider un futur débutant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package test2.client;
     
    import com.google.gwt.user.client.rpc.RemoteService;
    import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
     
    @RemoteServiceRelativePath("monServlet")
    public interface MonService extends RemoteService {
     
        public String hello() ;
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    package test2.client;
     
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
     
    import com.google.gwt.user.client.rpc.AsyncCallback;
    import com.google.gwt.user.client.rpc.ServiceDefTarget;
     
     
    public class Test2 implements EntryPoint {
     
        private final GreetingServiceAsync greetingService = GWT
                .create(GreetingService.class);
     
        private final MonServiceAsync service = GWT.create(MonService.class) ; 
     
        /**
         * This is the entry point method.
         */
        public void onModuleLoad() 
        {
            //Voilà le service est mappé avec le serveur, on peut effectuer l’appel à la méthode.
            // ((ServiceDefTarget) service).setServiceEntryPoint (GWT.getModuleBaseURL () +"test2");
     
            System.out.println(GWT.getModuleBaseURL ());
     
            service.hello(new AsyncCallback<String>() {
                public void onFailure(Throwable caught) {
                    System.out.println("echec");
                }
     
                public void onSuccess(String result) {
                    System.out.println("succes" + result);
                }
            });
     
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="UTF-8"?>
    <module rename-to="test2">
      <!-- Inherit the core Web Toolkit stuff.                        -->
      <inherits name='com.google.gwt.user.User'/>
     
      <!-- Inherit the default GWT style sheet.  You can change       -->
      <!-- the theme of your GWT application by uncommenting          -->
      <!-- any one of the following lines.                            -->
      <inherits name='com.google.gwt.user.theme.standard.Standard'/>
      <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
      <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
     
      <!-- Other module inherits                                      -->
     
      <!-- Specify the app entry point class.                         -->
      <entry-point class='test2.client.Test2'/>
     
      <!-- Specify the paths for translatable code                    -->
      <source path='client'/>
      <source path='shared'/>
     
    </module>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE web-app
        PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
     
    <web-app>
     
      <!-- Servlets -->
      <servlet>
        <servlet-name>monServlet</servlet-name>
        <servlet-class>test2.server.MonServiceImpl</servlet-class>
      </servlet>
     
      <servlet-mapping>
        <servlet-name>monServlet</servlet-name>
        <url-pattern>/test2/monServlet</url-pattern>
      </servlet-mapping>
     
      <!-- Default page to serve -->
      <welcome-file-list>
        <welcome-file>Test2.html</welcome-file>
      </welcome-file-list>
     
    </web-app>
    encore une fois, merci à toi.
    à bientôt,
    benilto

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Erreur "No qualifying bean of type found for dependency"
    Par shark59 dans le forum Spring
    Réponses: 5
    Dernier message: 04/06/2018, 00h55
  2. Réponses: 3
    Dernier message: 27/05/2012, 13h25
  3. gettext : No translation file found for domain using custom locale folder
    Par martin-damien dans le forum Général Python
    Réponses: 4
    Dernier message: 02/10/2010, 09h52
  4. Réponses: 2
    Dernier message: 04/03/2009, 20h37
  5. ora-00205 - erreur fichier de control files
    Par pascale86 dans le forum Oracle
    Réponses: 15
    Dernier message: 17/01/2006, 09h28

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