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 :

Mon WebService n'est pas interopérable


Sujet :

Services Web Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut Mon WebService n'est pas interopérable
    J'ai développé un WebService très simple en utilisant la spécification JAX-WS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @WebService(name="Hello")
    public class HelloWS {
     
    	@WebMethod
    	public @WebResult String hello(@WebParam(name="who") String who) {
    		return "Bonjour " + who + " !";
    	}
     
    }
    Bien sûr j'ai généré les classes tie avec wsgen puis j'ai testé le WebService avec un client Java et ça fonctionne correctement.

    Le problème, c'est que j'ai voulu tester l'interopérabilité de mon service en développant un client PHP. Et là voici la sortie que j'obtiens :
    Je ne sais pas si le problème viens du client PHP ou si ça vient du côté serveur. Pouvez-vous me dire si vous avez déjà rencontré ce genre de problème ou si vous voyez une erreur dans mon code ?

  2. #2
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Bonjour,

    J'ai le sentiment que le nom donné par le client au paramètre passé au service web ne correspond pas au nom attendu par ce dernier, à savoir who, c'est pourquoi le service web interprète la valeur de who à null. C'est un cas que j'ai déjà rencontré en nommant mal un paramètre dans une application cliente d'un service web.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    Le nommage des paramètres me semble effectivement poser un problème. Normalement, le fichier WSDL devrait comporter une déclaration de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <message name="helloRequest">
    	<part name="who" type="xsd:string"/>
    </message>
    Or, voici ce que contient le WSDL généré par le serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <message name="hello">
    	<part name="parameters" element="tns:hello"></part>
    </message>
    La déclaration des paramètres de la méthode hello ne reprend pas le nom (who) que j'ai déclaré avec l'annotation WebParam. Comment cela se fait-il ?

  4. #4
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Je pense que tu dois utiliser un binding SOAP de type document literal wrapped : tous les paramètres d'entrée de chaque opération de ton service web sont regroupés dans un type complexe intermédiaire (wrapping) de même nom que l'opération invoquée.

    Ainsi, je vois que tu dois faire appel à une opération hello, tu peux donc retrouver les paramètres d'entrée de cette opération dans la balise <types> de ton contrat WSDL, vraisemblablement quelquechose de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsd:element name="hello">
       <xsd:complexType>
          <xsd:sequence>
             <xsd:element name="who" type="xsd:string" />
          </xsd:sequence>
       </xsd:complexType>
    </xsd:element>

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    L'ennui, c'est que ce n'est pas moi qui génère le WSDL, je ne connais pas suffisamment ce format de fichier. J'utilise le WSDL généré automatiquement par le serveur d'application à l'adresse http://localhost:8080/ws/hello?wsdl.

  6. #6
    Membre expérimenté
    Inscrit en
    Juin 2008
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 207
    Par défaut
    Je pense que le mieux pour que tu trouves de l'aide serait de poster ton fichier WSDL et le code de ton client PHP, non pas ici, mais plutôt dans la partie Services Web de la section PHP du forum.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 802
    Par défaut
    C'est ce que j'ai fait, mais je n'obtiens pas de réponse pour l'instant, c'est pour ça que je poste également ici.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/09/2006, 14h50
  2. [C# 2.0] Pourquoi mon DataAdapter n'est pas instancié ?
    Par FraktaL dans le forum Services Web
    Réponses: 2
    Dernier message: 04/07/2006, 00h04
  3. Mon code n'est pas interprété !
    Par korriganez dans le forum Langage
    Réponses: 3
    Dernier message: 31/05/2006, 15h46
  4. Mon clonage n'est pas correct ?
    Par elitost dans le forum Langage
    Réponses: 6
    Dernier message: 21/03/2006, 14h38
  5. Mon timer n'est pas prioritaire !!
    Par Hectorz dans le forum MFC
    Réponses: 9
    Dernier message: 09/02/2005, 12h57

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