Bonjour, bonjour!
Actuellement entrain de réaliser un petit webservice que je test en local, lors de l'appel d'une simple méthode je me retrouve avec une jolie erreur me disant :
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
16Requête : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:AjouterUnRattachement><$trigramme_service>TST</$trigramme_service><$code_insee>40000</$code_insee></SOAP-ENV:AjouterUnRattachement></SOAP-ENV:Body></SOAP-ENV:Envelope> Error : SOAP-ENV:ClientBad Request Complément : Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] Bad Request in C:\wamp64\www\WebService\service\client.php:15 Stack trace: #0 C:\wamp64\www\WebService\service\client.php(15): SoapClient->__call('AjouterUnRattac...', Array) #1 C:\wamp64\www\WebService\service\client.php(15): SoapClient->AjouterUnRattachement('TST', 40000) #2 {main} thrown in C:\wamp64\www\WebService\service\client.php on line 15
Voici à quoi ressemble mon fichier client.php :
Fonction AjouterUnRattachement dans mon fichier "hydroweb.class.php" :
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 require("hydroweb.wsdl"); require("hydroweb.class.php"); function gprint($arr) { echo '<p><pre>'; echo var_dump($arr); echo '</pre></p>'; } $res1=""; $client = new SoapClient('hydroweb.wsdl', ["trace"=>1]); try { $res4 = $client->AjouterUnRattachement("TST", 40000); var_dump($res4); } catch(SoapFault $fault) { echo 'Request : <br><xmp>', $client->__getLastRequest(), // Récupérer la dernière requête exécutée '</xmp><br><br> Error Message : <br>', $client->__getLastResponse().'<br>'; // Récupérer le message d'erreur si présent lors de la requête }
Ma fonction ajouter (PDO) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public function AjouterUnRattachement($trigramme_service, $code_insee) { $rattach = new tbl_rattachement_sdis_communes($trigramme_service, $code_insee); Gestion::ajouter($rattach); }
La PS liée :
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 public function setRequeteAjouter($obj) { $classe=get_class($obj); $table = $classe; $proprietes=$obj->getProprietes(); //récupération du tableau associatif clés-valeurs de l'objet // $proprietes=get_object_vars($obj); var_dump($proprietes); $params = array(); $sql="INSERT INTO $table "; // sous chaîne correspondant au début de la requête $champs = "("; //sous chaîne pour lister les champs $values ="VALUES("; //sous chaîne pour lister les ? correspondant aux VALUES foreach($proprietes as $key=>$val) { if(($key != "id_".$classe) && ($key != "id_".get_parent_class($obj))) //on écarte l'identifiant de la table auto incrémenté. Adaptation possible { $champs = $champs .$key .","; //on ajoute le champ $values=$values. "?,";//on ajoute les ? //requête préparée avec marqueurs interrogatifs $params[]=$val;//on ajoute la valeur dans le tableau des paramètres } } // enlever la derniere virgule après le dernier ? $values = rtrim($values, ","); // enlever la derniere virgule après le dernier champ $champs = rtrim($champs, ","); $values = $values . ")"; //on ferme la parenthèse de VALUES $champs = $champs . ")"; //on ferme la parenthèse de la liste des champs $sql = $sql .$champs .$values; //on reconstitue la totalité du texte de la requête $this->requete = $sql; //on stocke le texte de la requête dans $this->requete $this->parametres = $params;//on stocke les valeurs des paramètres dans $this->parametres
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 public function setPSAjouter($obj) { //exemple ps = ajouterClient -> ajouter + nom de la classe $classe=get_class($obj); $nomps=self::$_appel." ajouter". get_class($obj). " " .substr(self::$_syntaxe,0,1);//Appel et nom de la procedure stockée $proprietes=$obj->getProprietes(); //try { $i=0; $params = array(); foreach($proprietes as $key=>$val) { if(($key != "id_".$classe) && ($key != "id_".get_parent_class($obj)) ) //on écarte l'identifiant auto incrémenté de la table . Adaptation possible { $nomps = $nomps. " ?,"; $params[] = $val; } } $nomps = rtrim($nomps, ",");// enlever la derniere virgule $nomps = $nomps . substr(self::$_syntaxe,1,1); $this->requete = $nomps; $this->parametres = $params; } /*catch (PDOException $e) { throw new PDO3Exception( $e->code); }*/ }// fin de la méthode setPSAjouter()
Et pour finir la partie du WSDL correspondant :
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 <message name="AjouterUnRattachementRequest"> <part name="$trigramme_service" type="xsd:string"/> <part name="$code_insee" type="xsd:int"/> </message> <message name="AjouterUnRattachementResponse"> </message> <operation name="AjouterUnRattachement"> Ajouter une Rattachement de SDIS / Commune : <input message="typens:AjouterUnRattachementRequest"/><br/> <output message="typens:AjouterUnRattachementResponse"/><br/> </operation> <operation name="AjouterUnRattachement"> <soap:operation soapAction="urn:RattachementAction"/> <!-- <input> --> <!-- <soap:body namespace="urn:RATTACHEMENT" use="encoded" --> <!-- encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> --> <!-- </input> --> <output> <soap:body namespace="urn:RATTACHEMENT" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation>
Aidez-moi je ne comprends plus là, car l'utilisation de la même méthode se fait sans aucun problème sur une autre table, alors si quelque chose vous tape dans l'oeil, dites le, je suis débutant dans tout ça !
Merci d'avance !
Partager