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] Probleme méthodes SOAP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut [Web Service] Probleme méthodes SOAP
    Bonjour a tous,

    J'essaye d'accéder à un web service java depuis mon code php.
    apparemment j'arrive a me connecter et a récupérer les fonction du service mais dès que j'en appelle une je n'obtient aucun résultat :

    connexion : (entourée de try/catch)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $wsdl="https://10.96.24.72/bca-networks/services/AuthenticationService?wsdl";
    	$service=new SoapClient($wsdl);
    récupératon des fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<pre> fonctions " ;
    var_dump($service->__getFunctions());
    echo "</pre>" ;
    qui me renvoie bien :

    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
    fonctions array(10) {
      [0]=>
      string(44) "doLoginResponse doLogin(doLogin $parameters)"
      [1]=>
      string(53) "isLoggedInResponse isLoggedIn(isLoggedIn $parameters)"
      [2]=>
      string(74) "getSessionTimeoutResponse getSessionTimeout(getSessionTimeout $parameters)"
      [3]=>
      string(47) "getUsersResponse getUsers(getUsers $parameters)"
      [4]=>
      string(47) "doLogoutResponse doLogout(doLogout $parameters)"
      [5]=>
      string(44) "doLoginResponse doLogin(doLogin $parameters)"
      [6]=>
      string(53) "isLoggedInResponse isLoggedIn(isLoggedIn $parameters)"
      [7]=>
      string(74) "getSessionTimeoutResponse getSessionTimeout(getSessionTimeout $parameters)"
      [8]=>
      string(47) "getUsersResponse getUsers(getUsers $parameters)"
      [9]=>
      string(47) "doLogoutResponse doLogout(doLogout $parameters)"
    }
    et ensuite utilisation de la fonction doLogin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($service->doLogin($username,$password));
    et la j'ai une erreur du catch : Erreur authentification : Object id #2

    l'erreur du type SOAP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Uncaught SoapFault exception: [HTTP] Client Error in /var/www/html/get_groups.php:132 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'http://10.96.24...', 'urn:doLogin', 1, 0) #1 [internal function]: SoapClient->__call('doLogin', Array) #2 /var/www/html/get_groups.php(132): SoapClient->doLogin('zncn7539', 'bonjour') #3 /var/www/html/desc.php(32): include('/var/www/html/g...') #4 {main} thrown in /var/www/html/get_groups.php on line 132

    si quelqu'un aurait une idée

  2. #2
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 856
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 856
    Points : 6 114
    Points
    6 114
    Par défaut
    Salut,

    Pour avoir plus d'information, tu peux essayer d'activer les traces et les exceptions :
    http://fr.php.net/manual/fr/soapclient.soapclient.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    new SoapClient( 
        'service.wsdl', 
        array( 
            'trace' => 1, 
            'exceptions' => true
        ) 
    );
    Ensuite, lors de l'appel, tu peux récupérer l'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    try{
        $service->doLogin($username,$password)
    }catch($e Exception){
        var_dump($e);
    }
    Et tu peux également afficher la requête et le retour du webservice :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<pre>';var_dump($service->__getLastRequest(), $service->__getLastRequestHeaders(), $service->__getLastResponse(), $service->__getLastResponseHeaders());

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    c'est effectivement ce que j'ai fait et j'ai réussi à trouver les erreurs et a me connecter, pour ceux que sa intéresse, mon serveur apache était configuré sur le port 8080, alors que mon appli était configuré sur le port 443.
    Or dans le fichier wsdl, il appelait le service avec le port 8080, j'ai donc juste du faire un set_location() en enlevant le port a l'adresse.

    Sinon je suis confronté à un nouveau problème:


    je doit appeler une méthode de mon appli qui prend une classe en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doCustomAction(String userToken, JobParamsDTO jobs)
    la classe JobParamsDTO comprend plusieurs attributs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JobParamsDTO(String runAtTime, ...)
    comment appeler une méthode qui prend une classe en paramètre ?

  4. #4
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 856
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 856
    Points : 6 114
    Points
    6 114
    Par défaut
    Tu peux lui passer un tableau ou un objet. Il suffit de nommer les index (si Array) ou les proprietes (si objet) de la même manière que les propriétés de ton objet.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $userToken = 'AMFLDIR213SD543231SD';
    // Objet
    $jobs = new StdClass();
    $jobs->location = 'Rouen';
    $jobs->company = 'Wixiweb';
     
    $clientSoap->doCustomAction($userToken, $jobs);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $userToken = 'AMFLDIR213SD543231SD';
    // Array
    $jobs = array(
        'location' => 'Rouen',
        'company' => 'Wixiweb'
    );
     
    $clientSoap->doCustomAction($userToken, $jobs);
    Et biensur, tu peux également créer un classe JobParamsDTO

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    merci pour tes réponses,

    enfaite j'ai opté pour la méthode des classes.
    J'ai en tout 3 classes dont 2 à donner en paramètre a mon service.
    La 3eme classe est prise en paramètre des deux autres (si tu me suis )

    j'ai donc écrit les 3 classes :

    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
    $test_device = "LBAO69LYOF11PRI001"; 
     
    //classes used : KeyDTO; JobParamsDTO, customActionDTO
    class KeyDTO
    {
    	public $keyString;
     
    	function __construct($device)
    	{
    		$this->keyString = $device;
    	}
    }
     
     
    class JobsParamsDTO
    {
        public $runAtTime;
    	public $spanKeys;
     
        function __construct($keyDTO)
     
        {
           $this->runAtTime  = null;
    	   $this->spanKeys = $keyDTO;
        }
    }
     
     
    class customActionDTO
    {
    	public $spanType;
    	public $spanRealmKey;
    	public $spanDeviceName;
     
    	function __construct($keyDTO)
    	{
    		$this->spanType = "Device";
    		$this->spanRealmKey = "DEI.IRS.TEST";
    		$this->spanDeviceName = $keyDTO->keyString;
    	}
    }
    j'ai ensuite instancié un objet de ses 3 classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //instantiations
    $keyDTO = new KeyDTO($test_device);
    $jobDTO = new JobsParamsDTO($keyDTO);
    $customDTO = new customActionDTO($keyDTO);
    et ensuite passé le tout à mon service :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $params_custom = array("userToken" => ($userToken->return), "JobParamsDTO" => $jobDTO, "waitForCompletion" => false, "customActionDTO" => $customDTO);
     
    var_dump($service_custom->doCustomAction($params_custom));
    seulement j’obtient un message d'erreur assez bizarre (il est beaucoup plus long, j'ai seulement extrait une partie):

    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
    ["function"]=>
          string(6) "__call"
          ["class"]=>
          string(10) "SoapClient"
          ["type"]=>
          string(2) "->"
          ["args"]=>
          array(2) {
            [0]=>
            string(14) "doCustomAction"
            [1]=>
            array(1) {
              [0]=>
              array(4) {
                ["userToken"]=>
                string(19) "1564520736438580311"
                ["JobParamsDTO"]=>
                object(JobsParamsDTO)#5 (2) {
                  ["runAtTime"]=>
                  NULL
                  ["spanKeys"]=>
                  object(KeyDTO)#4 (1) {
                    ["keyString"]=>
                    string(18) "LBAO69LYOF11PRI001"
                  }
                }
                ["waitForCompletion"]=>
                bool(false)
                ["customActionDTO"]=>
                object(customActionDTO)#6 (3) {
                  ["spanType"]=>
                  string(6) "Device"
                  ["spanRealmKey"]=>
                  string(12) "DEI.IRS.TEST"
                  ["spanDeviceName"]=>
                  string(18) "LBAO69LYOF11PRI001"
                }
              }
            }
          }
        }
    j'ai l'impression qu'il passe mal les objets aux autres classes.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    edit : enfaite il n'envoie aps du tout les classes a travers la méthode :

    je fais un getLastRequest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(378) " -3784752582507144570false "
    il n'y a que le token et le paramètre booléen

Discussions similaires

  1. [Web Service] Erreur WSDL, SOAP-ERROR: Parsing WSDL
    Par legide dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 14/03/2009, 12h03
  2. [Web Service] Appel Webservice SOAP
    Par HaTnuX dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/08/2008, 22h33
  3. Réponses: 5
    Dernier message: 15/04/2008, 15h52
  4. [WEB SERVICE]probleme avec jaxrpc
    Par olive2bx dans le forum Services Web
    Réponses: 1
    Dernier message: 30/06/2006, 09h39

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