Salut bon jai enfin compris une partie en simplifiant a une expression tres simple
Desole du mega post!
Mais je crois que tout ce qui est ici peut etre necessaire pour bien comprendre la situation et peut surment aider une autre personne un jour
Voici un example complet en PHP5
Le Client Soap
Code :
$client = new SoapClient('http://webservice.pc-ylarrivee/source/server/test.wsdl',array('trace'=>1));
try {
$res = $client->sayHello('Yann','Larrivee');
var_dump($res);
} catch (Exception $a) {
var_dump($a);
}
Le serveur
Code :
// L'object a appeler
class Hello {
public function __construct() {
}
public function sayHello($firstname) {
return $a = new human($firstname);
//return "Hello " .$firstname . ' '.$lastname;
}
}
// L'objet a retouner
class human {
public $firstname = NULL;
public $lastname = NUL;
function __construct($firstname,$lastname) {
$this->firstname = $firstname;
$this->lastname = $lastname;
}
}
// Le server SOAP
$server = SoapServer('test.wsdl');
$server->handle();
Le WSDL
Code :
<definitions
name="HelloService"
targetNamespace="http://webservice.pc-ylarrivee/source/server/test.wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://webservice.pc-ylarrivee/source/server/test.wsdl"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsd1="http://webservice.pc-ylarrivee/schema"
>
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ecerami.com/schema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<complexType name="human">
<sequence>
<element name="firstname" type="xsd:string"/>
<element name="lastname" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="requestParam">
<attribute name="first_name" use="required">
<simpleType>
<restriction base="string"/>
</simpleType>
</attribute>
<attribute name="last_name" use="required">
<simpleType>
<restriction base="string"/>
</simpleType>
</attribute>
</complexType>
</schema>
</types>
<message name="SayHelloRequest">
<part name="request" type="xsd1:requestParam"/>
</message>
<message name="SayHelloResponse">
<part name="greeting" type="xsd1:human"/>
</message>
<portType name="Hello_PortType">
<operation name="sayHello">
<input message="tns:SayHelloRequest"/>
<output message="tns:SayHelloResponse"/>
</operation>
</portType>
<binding name="Hello_Binding" type="tns:Hello_PortType">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="sayHello">
<soap:operation soapAction="sayHello"/>
<input>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>
</input>
<output>
<soap:body
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:examples:helloservice"
use="encoded"/>
</output>
</operation>
</binding>
<service name="Hello_Service">
<documentation>WSDL File for HelloService</documentation>
<port binding="tns:Hello_Binding" name="Hello_Port">
<soap:address
location="http://webservice.pc-ylarrivee/source/orange_dominicana/testserver.php"/>
</port>
</service>
</definitions>
Output
Code :
object(stdClass)[4]
public 'firstname' => 'Yann'
public 'lastname' => null
Bref mon serveur me donne un undefined variable lastname (voyer le NULL de l'objet retourner.
Noter aussi que la requete soap Envoyer (en XML) ressemble a ceci
Code :
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:sayHello>
<request xsi:type="xsd:string">Yann</request>
<param1 xsi:type="xsd:string">Larrivee</param1>
</ns1:sayHello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ont voit tres bien que le premier param ne porte pas le nom first_name et que le 2ieme encore moin.
Bref la question ce resume a:
Comment ont fait pour appeler une methode via SOAP avec plusieurs
parametres ?
Comment decrit-ont cette appele de fonction dans le Schema XML ?
Merci encore de votre aide !