Bonjour,
J'ai actuellement un ensemble de webservices dotnet que je consomme en php via la librairie PEAR SOAP.
Un de mes webservices: GetInfo() prend en entrée un objet. J'utilise, pour appeler le webservice, la méthode SOAP_WSDL:
$wsdl = new SOAP_WSDL('http://xxxxxxxx/service.asmx?wsdl', $proxy);
$Client = $wsdl->getProxy();
$objRetour = $Client->GetInfo($location);
mon objet "location" etant une classe contenant des types simples:
class location
{
var $city;
var $zipCode;
}
et l'equivalent coté dotnet:
public class Location
{
private string _strCity;
private int _intZipCode;
private bool _blnZipCodeSpecified = false;
public Location()
{
}
[XmlElement("city" )]
public string City
{
get
{ return this._strCity; }
set
{ this._strCity = value; }
}
[XmlElement("zipCode" )]
public int ZipCode
{
get
{ return this._intZipCode; }
set
{ this._intZipCode = value; }
}
[XmlIgnoreAttribute()]
public bool ZipCodeSpecified
{
get
{ return this._blnZipCodeSpecified; }
set
{ this._blnZipCodeSpecified = value; }
}
}
Je ne peux pas, en php, typer les variables.
Si ma variable zipCode n'est pas remplie dans l'objet lors de son instanciation:
1. si je consomme mon webservice depuis dotnet, le fait d'avoir créé un attribut ZipCodeSpecified et de le mettre à false n'inclut pas la variable ZipCode dans le message soap.
2. Par contre, si je consomme le webservice depuis PHP, comme PHP ne type pas les variables lors de la déclaration, dans le message soap, la variable est inclue et contient une chaine vide, ce qui, a l'appel du webservice, crée une erreur puisque le type attendu par dotnet est un entier.
Ma question est donc la suivante: existe t-il un mécanisme (comme en dotnet) pour forcer php ou PEAR à ne pas inclure les variables qui n'ont pas été affectées sachant que je n'ai pas envie de construire mon xml manuellement et que je veux utiliser la méthode SOAP_WSDL?
J'espère avoir été assez clair dans mes explications. Merci d'avance pour vos réponses.
Yannick