Bonjour à tous...
Voici mon probleme du jour.
Je construit un webservice SOAP PHP (5.2.6), qui est consommé, par un client php. Le client fonctionne dans le sens ou il envoi bien la requete formaté, au serveur, qui l'execute dans le fonction, en créant un tableau de valeur.
Mon probleme, est que le serveur ne semble pas capable de coucher le tableau de données, au format xml, pour retourner une réponse que le client sera capable de parser...
Voici le WSDL du projet :
Voici le code du serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108 <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://ws.oberon.fr" name="Oberon_WS" targetNamespace="http://ws.oberon.fr" > <wsdl:types> <xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ws.oberon.fr"> <xsd:element name="Supp_Photos_Thai_Req"> <xsd:complexType> <xsd:sequence> <xsd:element name="RecupListe" type="xsd:string" minOccurs="1" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Supp_Photos_Thai_Rep"> <xsd:complexType> <xsd:sequence> <xsd:element name="Client" minOccurs="0" maxOccurs="Unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="CodeClient" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="TypeLogiciel" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="Liste" minOccurs="0" maxOccurs="1" > <xsd:complexType> <xsd:sequence> <xsd:element name="NomPhoto" type="xsd:string" minOccurs="0" maxOccurs="Unbounded" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Ajout_md5_Thai_Req"> <xsd:complexType> <xsd:sequence> <xsd:element name="CodeClient" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="VeCleUnik" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="NomPhoto" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="ValeurMD5" type="xsd:string" minOccurs="0" maxOccurs="1" /> <xsd:element name="TypeLogiciel" type="xsd:string" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Ajout_md5_Thai_Rep"> <xsd:complexType> <xsd:sequence> <xsd:element name="ACKTraitement" type="xsd:string" minOccurs="0" maxOccurs="1" /> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> </wsdl:types> <wsdl:message name="Supp_Photos_Thai_Req"> <wsdl:part name="body" element="tns:Supp_Photos_Thai_Req"/> </wsdl:message> <wsdl:message name="Supp_Photos_Thai_Rep"> <wsdl:part name="body" element="tns:Supp_Photos_Thai_Rep"/> </wsdl:message> <wsdl:message name="Ajout_md5_Thai_Req"> <wsdl:part name="body" element="tns:Ajout_md5_Thai_Req"/> </wsdl:message> <wsdl:message name="Ajout_md5_Thai_Rep"> <wsdl:part name="body" element="tns:Ajout_md5_Thai_Rep"/> </wsdl:message> <wsdl:portType name="Oberon_WS"> <wsdl:operation name="Supp_Photos_Thai"> <wsdl:input message="tns:Supp_Photos_Thai_Req"/> <wsdl:output message="tns:Supp_Photos_Thai_Rep"/> </wsdl:operation> <wsdl:operation name="Ajout_md5_Thai"> <wsdl:input message="tns:Ajout_md5_Thai_Req"/> <wsdl:output message="tns:Ajout_md5_Thai_Rep"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="Oberon_WS" type="tns:Oberon_WS"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="Supp_Photos_Thai"> <soap:operation soapAction="Oberon:Supp_Photos_Thai"/> <wsdl:input> <soap:body parts="body" use="literal"/> </wsdl:input> <wsdl:output> <soap:body parts="body" use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="Ajout_md5_Thai"> <soap:operation soapAction="Oberon:Ajout_md5_Thai"/> <wsdl:input> <soap:body parts="body" use="literal"/> </wsdl:input> <wsdl:output> <soap:body parts="body" use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="Oberon_WS"> <wsdl:port name="Oberon_WS" binding="tns:Oberon_WS"> <soap:address location="http://ws.oberon.fr"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
Voici le code du client :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 <?php class Thailande{ public function Supp_Photos_Thai($data){ $RecupListe = $data->RecupListe; include "config.inc.php"; $requete_sql_suppthai = "SELECT DISTINCT(codeclient), TypeLogiciel FROM sas_supp_photos"; $result_suppthai = mysql_query($requete_sql_suppthai); if (false === $result_md5thai) { $Erreur_mysql='1'; } else { $return_values = array ('Client' => array ()); while ($codeclient = mysql_fetch_array($result_suppthai)) { $client_return = array ('CodeClient' => $codeclient["codeclient"], 'TypeLogiciel' => $codeclient["TypeLogiciel"], 'Liste' => array ()); $requete_sql_suppthai_photos = "SELECT * FROM sas_supp_photos WHERE codeclient='".$codeclient["codeclient"]."' AND TypeLogiciel='".$codeclient["TypeLogiciel"]."'"; $result_suppthai_photos = mysql_query($requete_sql_suppthai_photos); if (false === $result_suppthai_photos) { $Erreur_mysql='1'; } else { } array_push($return_values['Client'],$client_return); } } } return $return_values; } } $serversoap = new SoapServer("http://ws.oberon.fr/Thailande_photos_WS.wsdl"); try { $serversoap->setClass("Thailande"); } catch (Exception $f) { } if ($_SERVER['REQUEST_METHOD'] == 'POST') { try { $serversoap->handle(); } catch (Exception $f) { } } ?>
Le client me gènere ce code xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <? ini_set('soap.wsdl_cache_enabled', 0); ini_set('default_socket_timeout', 1); set_time_limit(300); $request_values[RecupListe] = 1; // On Créee le Client Soap $webservice_client = new SoapClient("http://ws.oberon.fr/Thailande_photos_WS.wsdl", array('wsdl_cache' => 0, 'trace' => 1, 'exceptions' => 1, 'version'=> SOAP_1_2)); $webservice_client->__setLocation("http://ws.oberon.fr"); // On Envoi les Données try { $info = $webservice_client->__call("Supp_Photos_Thai", array($request_values)); print "Request :\r\n".htmlspecialchars($webservice_client->__getLastRequest()) ."\r\n"."\r\n"; print "Response:\r\n".htmlspecialchars($webservice_client->__getLastResponse())."\r\n"."\r\n"; } catch (SoapFault $f) { echo $f; } ?>
Le serveur me gènere ce log pour ma variable $return_values :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.oberon.cardiff.fr"> <SOAP-ENV:Body> <ns1:Supp_Photos_Thai_Req> <RecupListe>1</RecupListe> </ns1:Supp_Photos_Thai_Req> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
C'est quelque part une preuve que le serveur a bien capter la requete du client, et commencer à faire le travail attendu pour hierarchiser les informations à retourner au client.
et à partir de ces données le serveur me gènere :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 Array ( [Client] => Array ( [0] => Array ( [CodeClient] => BDDY [TypeLogiciel] => TEST [Liste] => Array ( [0] => Array ( [NomPhotos] => 1-1.jpg ) [1] => Array ( [NomPhotos] => 2-1.jpg ) ) ) [1] => Array ( [CodeClient] => BDDZ [TypeLogiciel] => TEST [Liste] => Array ( [0] => Array ( [NomPhotos] => 1.jpg ) [1] => Array ( [NomPhotos] => 2.jpg ) [2] => Array ( [NomPhotos] => 3.jpg ) ) ) [2] => Array ( [CodeClient] => BDDT [TypeLogiciel] => TEST2 [Liste] => Array ( [0] => Array ( [NomPhotos] => 1.jpg ) ) ) ) )
tandis que j'attend plutot ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.oberon.cardiff.fr"> <SOAP-ENV:Body> <ns1:Supp_Photos_Thai_Rep> <Client/> </ns1:Supp_Photos_Thai_Rep> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Bref,, mon soucis est que le tableau d'array d'array, ne semble pas être serialize en xml...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.oberon.cardiff.fr"> <SOAP-ENV:Body> <ns1:Supp_Photos_Thai_Rep> <Client> <CodeClient>BDDY</CodeClient> <TypeLogiciel>TEST</TypeLogiciel> <Liste> <NomPhotos>1-1.jpg</NomPhotos> <NomPhotos>2-1.jpg</NomPhotos> </Liste> </Client> <Client> <CodeClient>BDDZ</CodeClient> <TypeLogiciel>TEST</TypeLogiciel> <Liste> <NomPhotos>1.jpg</NomPhotos> <NomPhotos>2.jpg</NomPhotos> <NomPhotos>3.jpg</NomPhotos> </Liste> </Client> <Client> <CodeClient>BDDT</CodeClient> <TypeLogiciel>TEST2</TypeLogiciel> <Liste> <NomPhotos>1.jpg</NomPhotos> </Liste> </Client> </ns1:Supp_Photos_Thai_Rep> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Quelqu'un peut t'il m'apporter ses lumieres sur ce type de construction soap svp ?
Cordialement
Tdldp
Partager