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 :

[Web Service] Déclaration d'un tableau dans WSDL


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [Web Service] Déclaration d'un tableau dans WSDL
    Salut tout les monde je suis débutant dans l’utilisation des web services et j ai un projet que je dois réaliser avec, alors pour commencer j ai trouvé un exemple sur le net que j’ai essayé et ça marche très bien, l exemple consiste à l’appel d’une fonction sur le serveur cette fonction retourne un string mais quand je modifie la fonction pour qu’il retourne un array je trouve des difficultés à récupérer cette variable, mon code est le suivant :
    ====================================================
    Serveur.php :
    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
     
    <?php
    // Pour supprimer le cache du web-service
    ini_set('soap.wsdl_cache_enabled', 0);
    // Pour définir le temp maximal d'éxecution de notre web-service
    ini_set('default_socket_timeout', 180);
    // Nom de notre web-service
    class Server {
         // Le service QuelJour que l'on a définit dans notre format wsdl
        function QuelJour($parm) {
            $aJour[1] = 'Lundi';
         $aJour[2] = 'Mardi';
         $aJour[3] = 'Mercredi';
         $aJour[4] = 'Jeudi';
         $aJour[5] = 'Vendredi';
         $aJour[6] = 'Samedi';
         $aJour[0] = 'Dimanche';
         Return  $aJour[date("w",strtotime($parm))];
       }
         }
    // On tente d'instancier la classe soapServer
    // Si cela s'avère impossible, on affiche une erreur
    try {
        $server = new SoapServer('monFormat.wsdl',  array('trace' => 1,'encoding'    => 'ISO-8859-1'));
       // On définit la classe qui va gérer les requêtes SOAP (pour nous c'est la class Server)
        $server -> setclass('Server');
        $server->setPersistence(SOAP_PERSISTENCE_REQUEST);
    } catch (Exception $e) {
        echo 'erreur'.$e;
    }
    // Si l'appel provient d'un Web-Service
    }
    ?>
    ======================================================
    Le fichier WSDL :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.example.org/MonFormat/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MonFormat" targetNamespace="http://www.example.org/MonFormat/">
    <wsdl:types>
    <xsd:schema targetNamespace="http://www.example.org/MonFormat/">
    <xsd:element name="QuelJour">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="in" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="QuelJourResponse">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="out" type="xsd:array"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    </wsdl:types>
     
     
     
    <wsdl:message name="QuelJourRequest">
    <wsdl:part name="parameters" type="xsd:string"/>
    </wsdl:message>
    <wsdl:message name="QuelJourResponse">
    <wsdl:part name="parameters" type="xsd:array"/>
    </wsdl:message>
    <wsdl:portType name="MonFormat">
    <wsdl:operation name="QuelJour">
    <wsdl:input message="tns:QuelJourRequest"/>
    <wsdl:output message="tns:QuelJourResponse"/>
    </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="MonFormatSOAP" type="tns:MonFormat">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="QuelJour">
    <soap:operation soapAction="http://www.example.org/MonFormat/QuelJour"/>
    <wsdl:input>
    <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
    <soap:body use="literal"/>
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="MonFormat">
    <wsdl:port binding="tns:MonFormatSOAP" name="monFormatSOAP">
    <soap:address location="http://localhost/MonWebService1/serveur.php"/>
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>
    =========================================================
    Client.php
    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
     
     
    <?php
    // Pour supprimer le cache du web-service
    ini_set('soap.wsdl_cache_enabled', 0); 
    // Nouveau Client SOAP
    try {
        // Nouvelle instance de la classe soapClient
       $client = new SoapClient('http://localhost/MonWebService1/monFormat.wsdl', array('trace' => 1));
       $parm = date('Y-m-d');
       // Appel de la méthode QuelJour du service web
       try{
        $oReturn =  $client -> __soapCall('QuelJour', array('string' =>$parm));
        } catch (SoapFault $fault) {
            trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
        }
            // affiche le résultat
        var_dump($oReturn);
    } catch (SoapFault $fault) {
        echo 'erreur : '.$fault;
    }
    ?>
    =========================================================
    Lors de l’exécution de client.php on a sur notre navigateur un résultat similaire à celui la :
    string(8) "Dimanche"

    Maintenant si la fonction retourne par exemple le tableau $Ajour quelles modifications je dois faire sur le fichier WSDL et comment récupérer les éléments de tableau dans client.php, j'ai essayé de changer string par array dans wsdl et d'afficher var_dump($oReturn[1]); au lieu de var_dump($oReturn); mais j'avais un erreur de ce type:

    Fatal error: Cannot use object of type stdClass as array in C:\wamp\www\MonWebService1\client.php on line 17


    Pourriez-vous m'aider ?

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Solution
    C'est dommage que aucun membre m'a répondu mais pas grave j'ai trouvé la solution tout seul , tout simplement le problème viens de fichier WSDL car il ne connait pas directement le type array il faut le déclarer dans une balise a part puis on l'utilise et ça marche nickel si quelqu’un a le même problème et il veut plus d'explication je suis la bonne courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    je bloque sur le meme probleme peux tu donner plus d'explication stp

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Même problème...
    Citation Envoyé par UNIX107 Voir le message
    C'est dommage que aucun membre m'a répondu mais pas grave j'ai trouvé la solution tout seul , tout simplement le problème viens de fichier WSDL car il ne connait pas directement le type array il faut le déclarer dans une balise a part puis on l'utilise et ça marche nickel si quelqu’un a le même problème et il veut plus d'explication je suis la bonne courage

    Salut UNIX107,

    J'ai le même problème, pourrais-tu me donner ta solution stp ?

    Merci, A bientôt

Discussions similaires

  1. [Web Service][SOAP] Récupérer un tableau d%u2019un service web SOAP ?
    Par lehic dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 04/05/2012, 02h37
  2. [Web Service][SOAP] Espace de nom dans l'entête SOAP
    Par fragmonster dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/01/2008, 11h11
  3. [Web Service][SOAP] Définition délai timeout dans client SOAP
    Par kaboume dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/01/2008, 10h02
  4. [Tableaux] Déclaration d'un tableau dans une classe
    Par rochenico dans le forum Langage
    Réponses: 4
    Dernier message: 22/12/2006, 11h29
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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