SOAP-ERROR: Encoding: object hasn't 'plat' property
Posté : 20 juin 2012, 17:32
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.
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
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>