Bonjour,
Je butte sur ce problème depuis 3 jours avec Soap, WSDL, les objets et les complexType
J'ai le message d'erreur suivant
J'essaye de passer en paramètre quel_plat avec 2 entiers et j'attends le plat en retour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SoapFault exception: [SOAP-ENV:Server] SOAP-ERROR: Encoding: object hasn't 'plat' property SoapClient->__call('carte', Array) #1 {main}
Cela semble venir du passage des paramètres et sans certitude aucune.
Le WSDL est propre, je l'ai généré avec WSDL Editor d'Eclipse.
Le code du client
Et voici coté serveur
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 class quel_plat { public $type; public $start; function quel_plat($type, $start) { $this->type=$type; $this->start=$start; } } $quel_plat = new quel_plat(1,99); try { $wsdl = 'http://www.urlchangee.fr/mon.wsdl'; $client = new SoapClient($wsdl, array('trace' => 1)); $param = new SoapParam($quel_plat, 'tns:carte'); $result = $client->__call('carte',array('obj'=>$quel_carte)); }
Voici les extraits du 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 class plat { private $IDcarte; private $type; private $designation; private $commentaire; private $prix; private $image; private $pasdancarte; private $langue; public function __construct(){ $this->IDcarte = "mon IDcarte"; $this->type = "mon type"; $this->designation = "ma designation"; $this->commentaire = "mon commentaire"; $this->prix = 3; $this->image = ""; $this->pasdancarte = false; $this->langue = 1; } public function getValues(){ $arrToReturn = array( 'IDcarte' => $this->IDcarte, 'type' => $this->type, 'designation' => $this->designation, 'commentaire' => $this->commentaire, 'prix' => $this->prix, 'image' => $this->image, 'pasdanscarte' => $this->pasdancarte, 'langue' => $this->langue ); return $arrToReturn; } } function carte($parametre) { // il faudra traiter les parametres $plat = new plat(); return $plat->getValues(); } ini_set("soap.wsdl_cache_enabled", "0"); // désactivation du cache WSDL $server = new SoapServer("./mon.wsdl",array('trace' => true)); $server->addFunction("carte"); $server->handle();
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 <xsd:complexType name="plat"> <xsd:sequence> <xsd:element name="IDcarte" type="xsd:int"></xsd:element> <xsd:element name="type" type="xsd:int"></xsd:element> <xsd:element name="designation" type="xsd:string"></xsd:element> <xsd:element name="commentaire" type="xsd:string"></xsd:element> <xsd:element name="prix" type="xsd:double"></xsd:element> <xsd:element name="image" type="xsd:base64Binary"></xsd:element> <xsd:element name="pasdancarte" type="xsd:int"></xsd:element> <xsd:element name="langue" type="xsd:int"></xsd:element> </xsd:sequence> </xsd:complexType> <xsd:complexType name="quel_plat"> <xsd:sequence> <xsd:element name="type" type="xsd:int"></xsd:element> <xsd:element name="start" type="xsd:int"></xsd:element> </xsd:sequence> ... <wsdl:message name="carteRequest"> <wsdl:part element="tns:carte" name="parameters"/> </wsdl:message> <wsdl:message name="carteResponse"> <wsdl:part element="tns:carteResponse" name="parameters"/> </wsdl:message>
Partager