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

Langage PHP Discussion :

Ecrire les fonctions d'un wsdl


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut Ecrire les fonctions d'un wsdl
    Bonjour à tous,

    Je suis un développeur win32 qui découvre les joies des webservices et PHP

    Je dois écrire les fonctions PHP d'un WSDL qui a été généré par une appli tiers (en PJ).

    Voici le morceau du WSDL qui m'interesse :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    ...
          <xsd:complexType name="tAjoutEnreg">
            <xsd:sequence>
              <xsd:element name="psNomTable" type="xsd:string"/>
              <xsd:element name="psCol1" type="xsd:string"/>
              <xsd:element name="psCol2" type="xsd:string"/>
            </xsd:sequence>
          </xsd:complexType>
    ...

    J'ai commencé à écrire cela par exemple, mais j'ai une erreur PHP qui me dit d'après ce que je comprends que le type de paramètre est incorrect.



    Voici la page que les 2 pages que j'ai codé (l'une d'elle ou les 2 sont donc fausses ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $client = new SoapClient("http://127.0.0.1:81/wsTableSimple.wsdl"); 
    echo $client->AjoutEnreg("test", "1", "2"); 
    ?>
    Voici la page PHP regroupant contenant l'appel AjoutEnreg() :
    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
    <?php
     
    function AjoutEnreg($psTable, $psCol1, $psCol2 ) {
    	$message = '';
     
    	// on se connecte à MySQL
    	$db = mysql_connect('localhost', 'root', '');
    	if (!$db)
    	  {
    	  die('Could not connect: ' . mysql_error());
    	  }
    	// on sélectionne la base
    	mysql_select_db('maBase',$db);
    	$query = "INSERT INTO $psTable VALUES('$psCol1','$psCol2')";
     
    	$result = mysql_query($query);
    	if (!$result) { 
    	   $message = '#Requête invalide : ' . mysql_error() . "\n"; 
    	   $message .= 'Requête complète : ' . $query; 
    	}  
    	return $message;
    } 
     
    // Désactivation du cache WSDL
    ini_set("soap.wsdl_cache_enabled", "0");  
     
     
    // Catch l'erreur si l'instanciation la classe SoapServer
    // échoue, on retourne l'erreur
    try { 
      $server = new SoapServer('http://127.0.0.1:81/wsTableSimple.wsdl');
      // On ajoute la méthode "getResult" que le serveur va gérer
      $server->addFunction("AjoutEnreg"); 
    } catch (Exception $e) {
      echo 'erreur'.$e;
    }
     
    // Si l'appel provient d'une requête POST (Web Service)
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      // On lance le serveur SOAP
      $server->handle();
    }
    else {
      echo '<strong>This SOAP server can handle following functions : </strong>';
      echo '<ul>';
      foreach($server->getFunctions() as $func) {
        echo '<li>' , $func , '</li>';
      }
      echo '</ul>';
    }
    ?>

    Et enfin l'erreur PHP retournée :
    Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] Error cannot find parameter in C:\wamp\www\ws.php:5 Stack trace: #0 C:\wamp\www\ws.php(5): SoapClient->__call('AjoutEnreg', Array) #1 C:\wamp\www\ws.php(5): SoapClient->AjoutEnreg('test', '1', '2') #2 {main} thrown in C:\wamp\www\ws.php on line 5
    Pouvez-vous m'aider à déchiffrer ce WSDL et me dire ce qu'il attend comme paramètre ? De ce que j'imagine c'est un problème de type de données ? je lui passe une 3 chaines et lui attends un "type complex" ?


    Merci par avance.

    wsTableSimple1.zip

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je pense que ton "complexType" se traduit par un tableau ou un objet en PHP.
    Essaye avec quelque chose de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tAjoutEnreg = array('psNomTable' => 'test', 'psCol1' => '1', 'psCol2' => '2');
    $client->AjoutEnreg($tAjoutEnreg);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Merci pour cette réponse

    J'ai donc déporté l'erreur ailleurs maintenant :

    Warning: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in C:\wamp\www\ws.php:10 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://127.0.0....', 'urn:wsTableSimp...', 1, 0) #1 C:\wamp\www\ws.php(10): SoapClient->__call('AjoutEnreg', Array) #2 C:\wamp\www\ws.php(10): SoapClient->AjoutEnreg(Array) #3 {main} thrown in C:\wamp\www\ws.php on line 10
    Par contre j'ai testé 2 fois cette erreur pour être sûr, mais à chaque fois, cela me plante ma base MySql, je suis obligé de relancer le service MySql...

    Si quelqu'un a une idée, car il me semble que je teste tous les cas d'échec de fonction (voir le code sur le 1er post) et je n'ai aucun message d'erreur...

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 552
    Points : 1 193
    Points
    1 193
    Par défaut
    Bonjour à tous,

    bon en regardant les log d'Apache, en fait l'erreur est identique :

    Le fait d'écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tAjoutEnreg = array('psNomTable' => 'test', 'psCol1' => '1', 'psCol2' => '2');
    $client->AjoutEnreg($tAjoutEnreg);
    Déclenche dans le journal d'erreur d'Apache ceci :
    [Mon Dec 30 11:28:17.484192 2013] [:error] [pid 4408:tid 1480] [client 127.0.0.1:49217] PHP Warning: Missing argument 2 for AjoutEnreg() in C:\\wamp\\www\\wsTableSimple.php on line 3
    [Mon Dec 30 11:28:17.484192 2013] [:error] [pid 4408:tid 1480] [client 127.0.0.1:49217] PHP Warning: Missing argument 3 for AjoutEnreg() in C:\\wamp\\www\\wsTableSimple.php on line 3
    [Mon Dec 30 11:29:17.469192 2013] [:error] [pid 4408:tid 1472] [client 127.0.0.1:49215] PHP Warning: Uncaught SoapFault exception: [HTTP] Error Fetching http headers in C:\\wamp\\www\\ws.php:11\nStack trace:\n#0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://127.0.0....', 'urn:wsTableSimp...', 1, 0)\n#1 C:\\wamp\\www\\ws.php(11): SoapClient->__call('AjoutEnreg', Array)\n#2 C:\\wamp\\www\\ws.php(11): SoapClient->AjoutEnreg(Array)\n#3 {main}\n thrown in C:\\wamp\\www\\ws.php on line 11
    Je suis donc revenu à la case départ... qu'est-ce que ce WS attend comme argument ?

Discussions similaires

  1. doc sur les fonctions
    Par masterfab dans le forum C
    Réponses: 18
    Dernier message: 23/06/2005, 17h55
  2. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58
  3. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  4. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

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