Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 10h42   #1
 
Homme
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 17
Points : -1
Points : -1
Par défaut 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 :
1
2
$wsdl="https://10.96.24.72/bca-networks/services/AuthenticationService?wsdl";
	$service=new SoapClient($wsdl);
récupératon des fonctions :
Code :
1
2
3
echo "<pre> fonctions " ;
var_dump($service->__getFunctions());
echo "</pre>" ;
qui me renvoie bien :

Code :
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 :
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 :
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
bretzeldalsace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 15h21   #2
Rédacteur/Modérateur

 
Avatar de arnolem
 
Inscription : février 2005
Messages : 2 798
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2005
Messages : 2 798
Points : 2 673
Points : 2 673
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 :
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 :
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 :
1
2
 
echo '<pre>';var_dump($service->__getLastRequest(), $service->__getLastRequestHeaders(), $service->__getLastResponse(), $service->__getLastResponseHeaders());
arnolem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 09h27   #3
 
Homme
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 17
Points : -1
Points : -1
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 :
doCustomAction(String userToken, JobParamsDTO jobs)
la classe JobParamsDTO comprend plusieurs attributs :

Code :
JobParamsDTO(String runAtTime, ...)
comment appeler une méthode qui prend une classe en paramètre ?
bretzeldalsace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 09h49   #4
Rédacteur/Modérateur

 
Avatar de arnolem
 
Inscription : février 2005
Messages : 2 798
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : février 2005
Messages : 2 798
Points : 2 673
Points : 2 673
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 :
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 :
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
arnolem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 15h10   #5
 
Homme
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 17
Points : -1
Points : -1
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 :
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 :
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 :
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 :
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.
bretzeldalsace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 09h43   #6
 
Homme
Étudiant
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : avril 2011
Messages : 17
Points : -1
Points : -1
edit : enfaite il n'envoie aps du tout les classes a travers la méthode :

je fais un getLastRequest :
Code :
string(378) " -3784752582507144570false "
il n'y a que le token et le paramètre booléen
bretzeldalsace est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h32.


 
 
 
 
Partenaires

Hébergement Web