Je butte sur ce problème depuis 3 jours avec Soap, WSDL, les objets et les complexType
J'ai le message d'erreur suivant
Code : Tout sélectionner
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, sans certitude aucune.
Le WSDL est propre, je l'ai généré avec WSDL Editor d'Eclipse.
Le code du client
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));
}
Et voici coté serveur
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();
Voici les extraits du WSDL
Code : Tout sélectionner
<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>