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] Fatal error sur un client SOAP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut [Web Service] Fatal error sur un client SOAP
    Bonjour,

    Je dois utiliser un webservice dont on m'a fourni l'url WSDL.

    Ce web service doit prendre en entrée un chaîne de caractères et me renvoyer également une chaîne de caractères en sortie.

    J'ai réussi bien à lister les fonctions et les types du webservice mais des que j'utilise la fonction __soapCall pour appeler une méthode j'ai une fatal error.

    voici le code que j'utilise :

    Le 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
    23
    24
    25
    26
    <?php
    // Pour supprimer le cache du web-service
    ini_set('soap.wsdl_cache_enabled', 0);
     
    //Exemple d'input 
    $inputxml='<?xml version="1.0" encoding="UTF-8"?><inputs><input><hasid>33040</hasid></input></inputs>';
     
    // Nouvelle instance de la classe soapClient
    $client = new SoapClient('http://********/services/dispatch?wsdl' );
     
     
    $functions = $client->__getFunctions();  
    echo "FONCTIONS<pre>";
    print_r($functions);  
    echo "</pre>";
    $types = $client->__getTypes();  
    echo "TYPE<pre>";
    print_r($types);  
    echo "</pre>";
     
    // Appel de la méthode 
    $outputxml =  $client -> __soapCall('ws1', array('arg0' => $inputxml));
     
    echo $outputxml;
     
    ?>
    La sortie de ce code :
    FONCTIONS
    Array
    (
    [0] => confirmResponse confirm(confirm $confirm)
    [1] => loginResponse login(login $login)
    [2] => logoutResponse logout(logout $logout)
    [3] => ws1Response ws1(ws1 $ws1)
    [4] => ws2Response ws2(ws2 $ws2)
    [5] => ws3Response ws3(ws3 $ws3)
    [6] => ws4Response ws4(ws4 $ws4)
    )

    TYPE
    Array
    (
    [0] => struct login {
    string arg0;
    string arg1;
    }
    [1] => struct loginResponse {
    boolean return;
    }
    [2] => struct logout {
    }
    [3] => struct logoutResponse {
    boolean return;
    }
    [4] => struct ws1 {
    string arg0;
    }
    [5] => struct ws1Response {
    string return;
    }
    [6] => struct Exception {
    string message;
    }
    [7] => struct ws2 {
    string arg0;
    }
    [8] => struct ws2Response {
    base64Binary return;
    }
    [9] => struct ws3 {
    string arg0;
    }
    [10] => struct ws3Response {
    string return;
    }
    [11] => struct ws4 {
    string arg0;
    }
    [12] => struct ws4Response {
    string return;
    }
    [13] => struct confirm {
    string arg0;
    }
    [14] => struct confirmResponse {
    }
    )
    Fatal error: Uncaught SoapFault exception: [env:Server] java.lang.NullPointerException in C:**********\webservices\clientWS1.php:22 Stack trace: #0 C:*************\webservices\clientWS1.php(22): SoapClient->__soapCall('ws1', Array) #1 {main} thrown in C:********\webservices\clientWS1.php on line 22

    Avez -vous une idée car la je bloque une peu ? Est-ce mes appels qui sont incorrects ou cela vient il du serveur ?


    Merci

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    le problème st plus coté serveur, ou alors l'un de tes paramètre est faux

    sinon pour appelle une méthode c'est juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputxml =  $client->ws1($inputxml);
    c'est un peu fait exprès pour ca le SOAP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Merci de ta réponse stealth35 je viens d'essayer avec ton code (c'est vrai que c'est plus simple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $outputxml =  $client->ws1($inputxml);
    L'erreur en retour change de forme mais elle est toujours la

    Fatal error: Uncaught SoapFault exception: [env:Server] java.lang.NullPointerException in C:*********\webservices\clientWS1.php:24 Stack trace: #0 [internal function]: SoapClient->__call('ws1', Array) #1 C:*******\webservices\clientWS1.php(24): SoapClient->ws1('<?xml version="...') #2 {main} thrown in C:********\webservices\clientWS1.php on line 24

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    oui ca reviens au même, vérifie coté serveur

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Et en faisant ceci :

    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
    // Pour supprimer le cache du web-service
    ini_set('soap.wsdl_cache_enabled', 0);
     
    //Exemple d'input 
    $inputxml='<?xml version="1.0" encoding="UTF-8"?><inputs><input><hasid>33040</hasid></input></inputs>';
     
    // Nouvelle instance de la classe soapClient
    $client = new SoapClient('http://********/services/dispatch?wsdl' );
     
     
    $functions = $client->__getFunctions();  
    echo "FONCTIONS<pre>";
    print_r($functions);  
    echo "</pre>";
    $types = $client->__getTypes();  
    echo "TYPE<pre>";
    print_r($types);  
    echo "</pre>";
     
     
    $input = new stdClass();
    $input->arg0 = $inputxml;
     
    // Appel de la méthode 
    $outputxml =  $client->ws1(array('ws1' => $input)));
     
    echo $outputxml;
     
    ?>
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    J'ai essayé en ajoutant array , c'est bien ca ? l'erreur est la meme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $outputxml =  $client ->ws1(array('ws1' => $input));

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Un array comme tu as fait ou un objet standard comme j'ai proposé. Les 2 sont autorisés.

    Qu'as-tu mis dans $input ?
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Merci pour tes réponses pc.bertineau

    voici le code complet avec tes propositions (j'ai enlevé l'affichages fonctions et type):

    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
     
    // Pour supprimer le cache du web-service
    ini_set('soap.wsdl_cache_enabled', 0);
     
    //Exemple d'input 
    $inputxml='<?xml version="1.0" encoding="UTF-8"?><inputs><input><hasid>33040</hasid></input></inputs>';
     
    // Nouvelle instance de la classe soapClient
    $client = new SoapClient('http://******/services/dispatch?wsdl' );
     
    $input = new stdClass();
    $input->arg0 = $inputxml;
     
    // Appel de la méthode 
    $outputxml =  $client ->ws1(array('ws1' => $input));
     
    echo $outputxml;
    la sortie est :

    Fatal error: Uncaught SoapFault exception: [env:Server] java.lang.NullPointerException in C:********\webservices\clientWS1.php:15 Stack trace: #0 [internal function]: SoapClient->__call('ws1', Array) #1 C:********\webservices\clientWS1.php(15): SoapClient->ws1(Array) #2 {main} thrown in C:*********\webservices\clientWS1.php on line 15

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Points : 872
    Points
    872
    Par défaut
    Oui c'est ça, j'avais laissé une grosse erreur...

    Donc le pb vient d'autre part, sûrement côté serveur comme disait stealth35.
    • Mon blog PHP : http://blog.alterphp.com
    • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    OK j'ai trouvé ,
    en fait c'est webservice qui attend comme argument un tableau de tableau, pourquoi ? je sais pas....

    Mais pour que ca marche il faut utiliser la syntaxe suivante :

    $inputxml=array ('arg0' =>'<?xml version="1.0" encoding="UTF-8"?><inputs><input><hasid>33040</hasid></input></inputs>');

    $outputxml = $client -> __soapCall('ws1', array( $inputxml));

    En tout cas merci de votre aide.

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

Discussions similaires

  1. [Web Service] Fatal error: Uncaught SoapFault exception: [Client]..
    Par rosita dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 02/04/2010, 10h16
  2. Web services asynchrone - push server vers client
    Par boulb dans le forum Services Web
    Réponses: 3
    Dernier message: 28/11/2006, 18h51
  3. [web services axis ] deployment sur axis
    Par warax dans le forum Services Web
    Réponses: 7
    Dernier message: 17/05/2005, 14h44

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