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);
}
}
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>
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>
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.....