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

Services Web Java Discussion :

Consommation d'un Web Service en utilisant JQuery


Sujet :

Services Web Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 106
    Points
    106
    Par défaut Consommation d'un Web Service en utilisant JQuery
    Bonjour
    j'ai crée un web service avec restEasy, qui retourne un des données sous format json dont voici le bout de code concernant json :
    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
    @GET
    	@Path("json/categorie/{text}")
    	@Produces("application/json")
    	public List<Categorie> listCategorieJSON(@PathParam("text") final String text){
    		Map<String, Categorie> categories = new HashMap<String, Categorie>();
     
    		Classifieur classifieur = new Classifieur();
     
    		try {
    			categories.putAll(classifieur.getCategories(text));
    		} catch (CognitiveSemanticException e) {
    			log.error("service classification off");
    		}
    		return new ArrayList<Categorie>(categories.values());
    	}
    En utilisant un navigateur, le web service retourne bien les résultats :

    http://localhost:8081/semantic/restf...e/blablablabla

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"Categorie":{"nom":"sante","probabilite":1}},{"Categorie":{"nom":"politique","probabilite":1.816754792585179E-97}},{"Categorie":........
    le problème c'est que ce web service ne renvois aucun résultats quand il est appelé avec une fonction jquery
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <script type="text/javascript" src="inc/jquery-1.6.4.js" language="JavaScript"></script>
             <script type="text/javascript">
                function getHelloWorld(message){
                    $.getJSON("http://localhost:8081/semantic/restful-services/service/json/categorie/"+message,
                        function(dataJson){
                            alert("Message extract from Json:"+dataJson);
                        }
                    );
                }
             </script>
    en utilisant firebug pour visualisé les params j'ai un statut 200 OK mais en rouge avec les entêtes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    En-têtes
    Réponse
    Content-Type	application/json
    Date	Tue, 21 Feb 2012 11:37:34 GMT
    Server	Apache-Coyote/1.1
    Transfer-Encoding	chunked
    Requête
    Accept	application/json, text/javascript, */*; q=0.01
    Accept-Encoding	gzip, deflate
    Accept-Language	fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Connection	keep-alive
    Host	localhost:8081
    Origin	null
    User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
    je pense que c'est un problème de sécurité mais je n'arrive pas a le resoudre, si vous avez des pistes je suis preneur
    Merci d'avance

  2. #2
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 89
    Points
    89
    Par défaut
    Est ce que tu obtiens un message du genre "Error Origin is null" (par exemple avec la console de développement de firefox) lors de l'appel au WS ?

    Si c'est le cas, on a contourné le problème en positionnant un Apache. Si quelqu'un a une solution plus élégante d'ailleurs, je prend!

    Il y a aussi une histoire de OPTIONS qui est appelé avant le GET/POST/DELETE/PUT lors d'un appel en jquery. Enfin ca doit être expliqué dans la spécification CORS.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 106
    Points
    106
    Par défaut
    Hello
    Merci mais pas de solution plus élégante

    Si c'est le cas, on a contourné le problème en positionnant un Apache. Si quelqu'un a une solution plus élégante d'ailleurs, je prend!


    Comment faire ?
    Merci d'avance

  4. #4
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 37
    Points : 89
    Points
    89
    Par défaut
    Il y a une communication script -> service.

    Je crois que, venant d'un script style js/jquery, les requêtes échangées ont cette tête :
    OPTIONS <serveur> : à laquelle le serveur répond les méthodes autorisées (GET, PUT, POST, DELETE)
    GET <url>

    Lors du GET, l'origine de la requête est null.

    Pour répondre à ca, on a positionné un Apache de manière à avoir la communication suivante : script -> Apache -> service.

    Le Apache rajoute des headers à la requête. Regarde du côté des headers Access-Control-*.

    Je ne suis pas vraiment sûr de moi, si tu as le temps de te pencher sur la question, la réponse m'intéresse

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Avril 2008
    Messages : 176
    Points : 106
    Points
    106
    Par défaut
    Hello
    Avec cette fonction js j'arrive a appeler le service (j'ai activé un callback)
    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
    $(document).ready(function(){
    	
    	var article = $("#content").text(); 
    	goExtract (article)
    	
    	
    	function goExtract (article)
    	{
    		$.ajaxSetup({ traditional: true });
    		
    		var uri = "http://localhost:8081/semantic/restful-services/service/json/categorie";
    		
    		$("#enginesOuputWaiter").show();	
    		$.ajax({
    			type: "GET",
    			url: uri,
    			dataType: "jsonp",
    			ContentType:'application/javascript',
    			data :{'text' : article},
    			error: function(result) {
    			 $("#enginesOuputWaiter").hide();
    				 if(result.statusText = 'success'){
    					console.log("ok");
    					console.log(result);
    				 }
    				 else {
    						$("#enginesOuput").text('Invalid query.');
    				}
    			}
    			
    		});
    			
    			  
    		
    	}
    		
    });

    en vérifiant avec firebug j'ai bien un retour du web service et des résultats, par contre j'ai un autre problème, c'est que j'arrive pas a intercepter le resultats avec javascript

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 87
    Points : 95
    Points
    95
    Par défaut
    Pour récupérer le résultat Ajax/JSON
    en plus de la propriété "error: function()..."
    il faut crée la propriété success: "function(xhr)...."
    qui recupere la retour Ajax si l'appel s'est bien passé.

    ContentType
    - c'est le serveur qui doit renvoyer "Content-type: application/json"
    - "application/javascript" n'a pas se sens : tu veux recuperer une structure de données pas du code a executer.

    DataType
    - doit etre écrit "dataType"
    - la valeur qu'il te faut c'est : "json" (cf la doc jquery)
    - si le serveur renvoit le bon content-type, jQuery le reconnait et fournit a ta fonction de "success" un objet JSON pret a l'emploi.

    Pourquoi faire une requete en JSONP(roxy) ?
    cette méthode est spécifiques aux appels hors domaine courabt (Same Origin Policy).
    Dans ton cas, l'appele st local et en GET donc nul besoin de proxy

    En esperant voir pu t'aider

Discussions similaires

  1. Appel Web Service en utilisant JQuery et PhoneGap
    Par iliass001 dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 16/10/2012, 12h13
  2. Problème sur un Web Service consommant un autre Web Service
    Par nicocomumumu dans le forum Services Web
    Réponses: 2
    Dernier message: 06/08/2009, 20h08
  3. Appel d'un Web Service WCF utilisant wsHttpBinding
    Par Thomas Lebrun dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 08/06/2009, 23h34
  4. Web services et utilisation
    Par topolino dans le forum Silverlight
    Réponses: 3
    Dernier message: 19/03/2009, 12h04
  5. Consommation d'un Web services
    Par mbinte dans le forum Services Web
    Réponses: 5
    Dernier message: 10/09/2008, 16h23

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