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

Bibliothèques et frameworks PHP Discussion :

[SOAP][WSDL] - Structure des données / renvois de la réponse


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 7
    Points : 11
    Points
    11
    Par défaut [SOAP][WSDL] - Structure des données / renvois de la réponse
    Bonjour à tous,

    Je suis en train de bosser sur soap (client et serveur) & wsdl, ça fonctionne mais pas dans les règles de l'art et particulièrement sur la question des données structurées.

    => Lorsque j’exécute la méthode \SoapClient::__getFunctions() sur mon instance je me retrouvais avec des informations sur les types à UNKNOWN dans les description des méthodes.
    Exemple de retour __getFunctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UNKNOWN getProducts(string $Auth_Username, string $Auth_Password, UNKNOWN $Mpns)
    Du coup j'ai bossé les données structurées du fichier wsdl pour finalement réussir à obtenir les informations sur les types de données de la méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProductStockArray getProducts(string $Auth_Username, string $Auth_Password, MpnListType $Mpns)
    Mais une chose me chagrine, mes valeurs de retour sont de simples tableaux, Ou, en bidouillant la méthode de retour, un tableau contenant un objet StdClass mais dont la structure ne reflète pas que je j'ai mis en place dans le typage/données structurées.
    Je penses donc que soit je ne réalises pas bien la structure dans le wsdl soit que ma méthode "getProducts" ne renvois pas correctement les données...
    (Pour appeler la méthode je passe en argument 3 éléments $Auth_Username, $Auth_Password et une liste $Mpns[...], mais vue le comportement de retour je pense que j'ai également mal structuré les données en entrées)


    Voici ce que j'attends en retour de ma méthode : Un tableau contenant N objets (ou un objet contenant les objets enfants)
    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
    array(3){
      [0]=> object(stdClass) (2) {
        ["mpn"]=>
        string(6) "149156"
        ["qty"]=>
        int(1)
      }
      [1]=> object(stdClass) (2) {
        ["mpn"]=>
        string(6) "149157"
        ["qty"]=>
        int(20)
      }
      [2]=> object(stdClass) (2) {
        ["mpn"]=>
        string(6) "149158"
        ["qty"]=>
        int(3)
      }
    }
    Voici les données structurées du fichier wsdl (elements message et types) :
    Code XML : 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
    //données en entrée de la methode
    <message name="getProducts">
          <part name="Auth_Username" type="xsd:string"/>
          <part name="Auth_Password" type="xsd:string"/>
          <part name="Mpns" type="xsd:MpnListType"/>
    </message>
    //données de retour de la méthode
    <message name="getProductsResponse">
          <part name="getProductsResult" type="xsd:ProductStockArray"/>
    </message>
     
    <types>
      //Structure des données de retour
      <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://md.local/soap-server/server/product/">
          <element name="ProductStock" >
             <complexType>
                <sequence minOccurs="0" maxOccurs="unbounded">
                   <element name="mpn" type="xsd:string"/>
                   <element name="qty" type="xsd:integer"/>
                </sequence>
             </complexType>
          </element>
          <complexType name="ProductStockArray">
             <complexContent>
                <restriction base="soapenc:Array">
                   <attribute ref="soapenc:arrayType" wsdl:arrayType="tns:ProductStock[]"/>
                </restriction>
             </complexContent>
          </complexType>
          <element name="OutputProduct" type="ProductStockArray"/>
      </schema>
     
      //Structure des données en entrée de la methode
      <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://md.local/soap-server/server/product/">
          <complexType name="MpnListType">
             <sequence maxOccurs="unbounded">
                <element name="mpn" type="xsd:string"/>
             </sequence>
          </complexType>
          <element name="MpnList" type="MpnListType"/>
      </schema>
    </types>

    Et voici ma méthode de classe getProducts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public function getProducts($Auth_Username, $Auth_Password,$mpns) {
        return array_filter(array_map(function($e)use($mpns){
              return in_array($e['mpn'],$mpns)?$e:null;
            }, static::$products))
        ;
      }
    Dans cette méthode j'ai bien tenté de renvoyer des objets plutôt que des tableaux de données ce qui fonctionne mais ne me permet pas d'obtenir les données structurées correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function getProducts($Auth_Username, $Auth_Password,$mpns) {
        $list = array_filter(array_map(function($e)use($mpns){
            return in_array($e['mpn'],$mpns)?new ProductStock($e['mpn'],$e['qty']):null;
          }, static::$products));
     
        return new ProductStockArray($list);
      }
    J'ai beau retourner le tout dans tout les sens je n'arrive pas a résoudre l'équation...

    D'autant que je ne vois pas l'utilité des données structurées si la réponse de la méthode n'est pas formatée tels que spécifié dans les données structurées.
    Si quelqu'un à un avis sur la question, je dois passer a côté de quelque chose.

    Puis bon si vous avez des liens intéressant ou que vous voyez des choses étranges n'hésitez pas, je me fais la main et j'ai donc dut faire des erreurs ici ou là (c'est même certain).

    Un grand merci ^^

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Janvier 2018
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Et bien c'est bon, je viens de trouver pourquoi cela ne fonctionnais pas :

    - 1 : Je ne renseignais pas les options 'classmap' dans l'instanciation des classes SoapServer et SoapClient
    - 2 : Mes classes Modèle étendaient StdClass alors que c’était inutile
    - 3 : J'ai commencé a travailler avec des objets trop complexe pour configurer/tester correctement l’environnement

    Les erreurs classique quant on se met a utiliser un nouveau jouet de manière trop complexe directement ^^

    Résultat : je me retrouve bien avec des Objets correctement instanciés, hydratés comme il se doit, ce qui me permet d'être certains que le formatage du fichier wsdl est bon pour la structure de données de retour.
    (Je me disais : quant même, c'est poussif SOAP si je ne peut pas hydrater automatiquement mes objets - bref ^^)

    Elle est pas belle la vie?

    Bon il me reste à configurer/apprendre/comprendre pas mal de petites choses sur les structures de données en wsdl mais j'y suis

    Voila Bonne journée a tous!!!

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

Discussions similaires

  1. [XL-2007] Web Service SOAP Fichier WSDL / Extraction des données dans un classeur
    Par crusaders dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/12/2014, 12h05
  2. Structurer des données dans un tableau
    Par julie75 dans le forum Débuter
    Réponses: 21
    Dernier message: 18/12/2007, 23h20
  3. Structuration des données - macro
    Par bino007 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 25/11/2007, 20h13
  4. Aide pour diagramme de structure des données
    Par DeezerD dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 04/12/2004, 19h10
  5. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15

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