Page 1 sur 1

[WSDL] : rpc vs document/literal wrapped

Posté : 25 juin 2009, 14:11
par oxomichael
Bonjour à tous,

Je travaille avec un webservice de notre conception. Il nous sert en interne pour développer des interfaces différentes par client et aussi pour que les clients se connectent directement.
Le premier client veut se connecter principalement en perl (et en java...) pour cela il réclame un wsdl document/literal wrapped avec php par défaut nous étions en rpc/encoded. Le problème principal c'est que nous maquons d'expérience dans la génération du WSDL.

Pour simplifier j'explique le problème, imaginons le serveur de cette façon
(toutes nos fonctions "réelles" acceptent plusieurs paramètres en entrée et retourne un tableau en sortie)

Code : Tout sélectionner

class myWebService { /* * @param string texte * @param string texte2 * @return atexte[] */ function getServerDate($texte, $texte2) { file_put_contents('error.txt', $texte); return array('texte1'=>$texte, 'texte2'=>$texte2); } }
Voici le WSDL en document/literal wrapped

Code : Tout sélectionner

<?xml version="1.0" ?> <wsdl:definitions name="CSP" targetNamespace="urn:CSP" xmlns:wsdlns="urn:CSP" xmlns:typens="urn:CSP" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" > <wsdl:types> <xsd:schema elementFormDefault='qualified' xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:CSP"> <xsd:element name="getServerDateInput"> <xsd:complexType> <xsd:sequence> <xsd:element name="texte" type="xsd:string" /> <xsd:element name="texte2" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="getServerDateOutput"> <xsd:complexType> <xsd:sequence> <xsd:element name="texte1" type="xsd:string" /> <xsd:element name="texte2" type="xsd:string" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="getServerDateRequest"> <wsdl:part name="parameters" type="typens:getServerDateInput" /> </wsdl:message> <wsdl:message name="getServerDateResponse"> <wsdl:part name="parameters" type="typens:getServerDateOutput" /> </wsdl:message> <wsdl:portType name="CSPPortType"> <wsdl:operation name="getServerDate"> <wsdl:input message="wsdlns:getServerDateRequest" /> <wsdl:output message="wsdlns:getServerDateResponse" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="CSPBinding" type="wsdlns:CSPPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="getServerDate"> <soap:operation soapAction="" /> <wsdl:input name="getServerDateRequest"> <soap:body use="literal" /> </wsdl:input> <wsdl:output name="getServerDateResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="CSPService"> <wsdl:port name="CSPPort" binding="wsdlns:CSPBinding"> <soap:address location="http://test.devlocal.com/soapliteral/server2.php" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
Et voilà ce que je reçoit au niveau du client


Code : Tout sélectionner

Request : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><parameters>coucou</parameters><param1>aplus</param1></SOAP-ENV:Body></SOAP-ENV:Envelope> Response : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><parameters><item><key>texte1</key><value>coucou</value></item><item><key>texte2</key><value/></item></parameters></SOAP-ENV:Body></SOAP-ENV:Envelope>
J'ai compris qu'en document/literal wrapped, on ne peut avoir qu'un paramètres en entrées et en sortie.

Donc ce que je suppose et que les fonctions disponible dans le serveur doivent accepté qu'un seul paramètres de plus de type objet, et de même en sortie.

Ma question est : N'y a t'il pas de solution pour continuer à travailler avec les fonctions disponibles et ne pas refaire tout le développement.

Merci d'avance, pour toutes éclaircissement ou solution.....