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

XML/XSL et SOAP Discussion :

[WebService] Récupérer données structurées côté client


Sujet :

XML/XSL et SOAP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut [WebService] Récupérer données structurées côté client
    Messieurs Dames, bien le bonjour.

    Avant tout, petite précision : je suis un gros newbie question WebService
    Voilà, ça, c'est fait

    Ma question est la suivante (et oui, j'ai cherché sur le forum et Google est mon ami aussi, mais je n'arrive pas à trouver ma réponse )

    Comment récupérer une donnée nommée depuis une réponse d'un service web ?

    Ca a l'air con, comme ça, mais j'explique le contexte :

    Côté serveur, c'est une application Web multicouches (mais pas sénile) avec Spring, Nhibernate, du C# et de l'ASP en masse pour taper sur une base SQL Serveur.
    J'ai mis en place un petit service qui utilise les couches métiers et une des fonctionnalités du service me renvoie une liste d'éléments structurés (un tableau de V.O., quoi).
    Tout semble être présent dans le flux xml qui en sort (la structure, les données, etc.) et les données sont correctes (c'est moi, le maillon faible).

    Côté client, je teste avec du VB6 (et oui) parce que le consommateur de service utilisera cette techno.
    Mes trois lignes d'appel au service fonctionnent très bien.
    Je me retrouve avec un tableau d'IXMLDomSelection dont les données sont cohérentes.

    Ma question :
    comment je "parse" ce tableau pour aller, par exemple, trouver la propriété "Nom" d'un individu qui se trouve dans le tableau ?

    Faut-il que je me retape la déclaration d'une structure identique à celle censée être dans le flux XML ou est-ce que je peux lui demander poliment sans rien déclarer ?

    Si je suis pas clair, n'hésitez pas à me demander des précisions et/ou exemples.

    Merci en tout cas de toute aide possible.

    G.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    La question semble assez spécialisée VB6, donc je suis pas sûr, mais en général des exemples (tronqués pour enlever tout ce qui est répétitif) ne peuvent pas faire de mal.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Bon, bah c partu pour les exemples.

    Côté serveur, méthode implémentée pour récupérer des infos sur des personnes :

    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
      [WebMethod]
        public List<PersonnesVO> GetPersonnes(string sIdentifiant) {
            IPersonnesPolicy PersonnesPolicy = ServiceFactory.getInstance<IPersonnesPolicy>();
            List<KeyValuePair<string, object>> criteresPersonnes = new List<KeyValuePair<string, object>>();
            criteresPersonnes.Add(new KeyValuePair<string, object>("Id", sIdentifiant);
            criteresPersonnes.Add(new KeyValuePair<string, object>("Supprime", false));
            IList<PersonnesVO> lesPersonnes = PersonnesPolicy.getListePersonnes(-1, -1, criteresPersonnes);
            //Sécurité
            if (lesPersonnes == null) { return null; }
            if (lesPersonnes.Count <= 0) { return null; }
     
            List<PersonnesVO> lesPersonnesARenvoyer = new List<ValueObjects.PersonnesVO>();
            foreach (PersonnesVO unePersonne in lesPersonnes) {
                lesPersonnesARenvoyer.Add(unePersonne);
            }
            return lesPersonnesARenvoyer;
        }
    Côté client (VB6, donc, mais je pense que la problématique est la même quel que soit le langage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub cmdGet_Click()
    'Déclarations
        Dim SoapObj         As New SoapClient30
        Dim lesPersonnes()   As IXMLDOMSelection
    'Initialisation
        Call SoapObj.MSSoapInit("http://192.192.192.192:666/MonAppli/WebServices/MonService.asmx?wsdl")
    'Lancement
        lesPersonnes = SoapObj.GetPersonnes(txtMatric.Text)
        Call lstPersonnes.Clear
        For Each unePersonne In lesPersonnes
            'Call lstPersonnes.AddItem(unePersonne.getProperty("Nom") & " " & unePersonne.getProperty("Prenom"))
        Next
        Set SoapObj = Nothing
    End Sub

    Le but est que l'action "getProperty("Nom")" (ou un truc dans le même principe) fonctionne. En gros, que j'aie accès à la structure des données décrites dans le flux soap (si je dis pas de conneries).


    Accessoirement, Visual Studio.net me donne comme info, quand j'utilise le service en local :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    SOAP 1.2
     
    Le texte suivant est un exemple de demande et de réponse SOAP 1.2. Les espaces réservés affichés doivent être remplacés par des valeurs réelles.
     
    POST /MonAppli/WebServices/MonService.asmx HTTP/1.1
    Host: localhost
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length
     
    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <GetPersonnes xmlns="http://gronk.org/">
          <sIdentifiant>string</sIdentifiant>
        </GetPersonnes>
      </soap12:Body>
    </soap12:Envelope>
     
    HTTP/1.1 200 OK
    Content-Type: application/soap+xml; charset=utf-8
    Content-Length: length
     
    <?xml version="1.0" encoding="utf-8"?>
    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
      <soap12:Body>
        <GetPersonnesResponse xmlns="http://gronk.org/">
          <GetPersonnesResult>
            <PersonnesVO>
              <Direction>
                <CodeDir>string</CodeDir>
    			(...)
    			</Direction>
              <Societe>
                <Site xsi:nil="true" />
                <CodeSoc>string</CodeSoc>
    			(...)
              </Societe>
              <Groupe>
                <CodeGrp>string</CodeGrp>
    			(...)
              </Groupe>
              <Departement>
                <CodeDep>string</CodeDep>
    			(...)
              </Departement>
              <CptRef>string</CptRef>
    			(...)
              <Prenom>string</Prenom>
              <Nom>string</Nom>
    			(...)
            </PersonnesVO>
          </GetPersonnesResult>
        </GetPersonnesResponse>
      </soap12:Body>
    </soap12:Envelope>

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Le problème, c'est qu'on dirait que la propriété "nom" (et prénom d'ailleurs) n'est pas serialisée coté serveur. Du moins elle est pas visible dans le XML de réponse.
    Ensuite, on voit dans la réponse SOAP que tes "personnes" appartiennent au namespace "http://gronk.org/", je sais si la lib soap de vb tiens compte des namespace, mais il faudra sans doute le spécifier coté.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par Morbo Voir le message
    Le problème, c'est qu'on dirait que la propriété "nom" (et prénom d'ailleurs) n'est pas serialisée coté serveur. Du moins elle est pas visible dans le XML de réponse.
    Bah si, tout en bas du kseumeul : <Nom>string</Nom>

    Citation Envoyé par Morbo Voir le message
    Ensuite, on voit dans la réponse SOAP que tes "personnes" appartiennent au namespace "http://gronk.org/", je sais si la lib soap de vb tiens compte des namespace, mais il faudra sans doute le spécifier coté.
    Côté client, je suppose ?
    Oui, mais ça se précise où, le namespace, côté client ? L'adresse d'interrogation lui suffit pas ?
    (J'avais bien dit newbie, hin )

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Ah oui, j'ai oublié de scroller :p.

    Sinon pour le namespace, c'est bien coté client que je pensais, mais je connais pas du tout VB, encore moins sa gestion du XML .
    Et après tout, le client à bien l'air de savoir que c'est ce namespace quand il fait sa requete, alors peut être que cette gestion est transparante à ton niveau.
    Bon, ben bonne chance .

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 107
    Points : 63
    Points
    63
    Par défaut
    hop, réponse complète rédigée là :

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

Discussions similaires

  1. [WD19] WebService, récupérer une structure
    Par MasterMbg dans le forum WinDev
    Réponses: 0
    Dernier message: 26/03/2014, 13h31
  2. Réponses: 6
    Dernier message: 21/06/2012, 17h49
  3. Réponses: 9
    Dernier message: 06/05/2010, 22h33
  4. Réponses: 1
    Dernier message: 23/04/2009, 11h05
  5. [Wamp] Récupérer la structure d'une base de données
    Par osopardo dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 22/02/2006, 23h34

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