web-dev-qa-db-fra.com

Comment se débarrasser de "L'exception Uncaught SoapFault: [Client] semble ne pas avoir de document XML dans ..."

J'essaie de développer une logique métier pour un site dynamique en utilisant nusoap côté serveur (car j'ai besoin de wsdls et que l'extension PHP SOAP ne peut pas générer de wsdls), et que PHP SOAP extension côté client.

Cependant, je ne parviens pas à obtenir les mêmes fonctions de connexion et getRole. Quand j'essaie d'appeler le client, je reçois le message suivant

Uncaught SoapFault exception: [Client] looks like we got no XML document in [some paths]...

Wsdl existe sur le serveur et le client le lit (quand je mets une mauvaise URL pour wsdl, j'obtiens une erreur).

Quelqu'un peut-il aider?

10
Eedoh

Il semble que votre client reçoive du code XML non valide - soit le WSDL lui-même, soit la réponse renvoyée par le serveur. Essayez d'appeler le client avec l'option trace définie sur TRUE et vérifiez le code d'envoi/réception XML réel via les méthodes __getLastRequest() et __getLastResponse() .

21
Henrik Opel

Je viens d'avoir un problème similaire; s'avère que mon service était echoet des données de débogage. J'ai supprimé toutes les lignes echo et cela a bien fonctionné.

8
Ben

J'ai le même problème, et j'ai résolu avec ceci:

Le fichier serveur SOAP dans php a codé utf8 avec BOM, obligeant Apache à renvoyer la marque de nomenclature (3 octets) avant la réponse xml.

Encodez votre serveur soap de fichiers php avec la marque utf8 WITH OUT BOM.

Ignacio Gutierrez Torrero

4
Ignacio Gutierrez

Il y a des chances que vous ayez des espaces à la fin de votre classe SOAPServer. Veuillez consulter l'article blog suivant pour plus d'informations: http://arnekroeger.blogspot.com/2011/02/php-soap-errorlooks-like-we-got-no-xml .html

2
Tash Pemhiwa

Il suffit d'utiliser trim () pour vos arguments.

$objectRequette = trim($_POST['Requette']) ;
$client = new SoapClient(null, array(
    'location' => 'http://your.php',
    'uri'=>'your option',
));
$result = $client->__soapCall('Misyka', array("$objectRequettea"));
2

Dans mon cas, cette erreur est apparue lorsque j'ai inclus un script avec des lignes vides après le libellé "?>".

Supprimer ces lignes résout le problème

2
Denwork

N'oubliez pas d'utiliser try/catch block:

try {
    var_dump($client->foo());
} catch (Exception $e) {
    echo($client->__getLastResponse());
    echo PHP_EOL;
    echo($client->__getLastRequest());
}
2
PHPst

J'ai un moyen de résoudre ce problème. Ce n'est pas une belle solution, mais ça marche ...

Comme je ne peux pas changer mon serveur Mantis, j'ai décidé de le faire ...

Je dois d'abord faire taire SoapFault:

try {
    $client = new SoapClient('http://www.mymantisaddress.com/api/soap/mantisconnect.php?wsdl', array('trace'=> 1, 'exceptions' => 0));
    $result = $client->__soapCall($function_name, $args);
} catch (SoapFault $e) {
    //$result = array(
    //    'erro' => $e->faultstring
    //);
}

Deuxièmement, j'ai remarqué qu'il y avait ce trois caractères de contrôle de fuite au début de ma chaîne, alors je l'ai supprimé:

$str = substr($client->__getLastResponse(), 3) . "pe>";
print $str;

Troisièmement, je dois mettre "pe>" à la fin de ma chaîne, car elle était incomplète.

1
Grazziani

J'ai le même problem.my problème résolu en définissant always_populate_raw_post_data sur -1 sur php.ini.

Je découvre cela en ajoutant "trace" => 1, "exceptions" => 1 sur les options et utilise try catch pour obtenir __getLastRequest() et __getLastResponse().

1
Mostafa

Parfois, une nomenclature peut générer des caractères supplémentaires, ce qui crée ce type de problème.

Pour détecter s’il existe une nomenclature UTF, voir this link .

1
Shuvankar Sarkar

Ce qui suit peut être le problème pour certains utilisateurs. parce que je suis passé par là.

Pour la dernière version de nuSoap, les solutions ci-dessous permettront de résoudre votre problème:

TROUVEZ le code ci-dessous dans nusoap.php

$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]"); 

dans la ligne 6132 ou quelque chose autour de ce pas.

ET COMMENTER

// $this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");

Depuis juste pour le but du débogage. alors ne vous inquiétez pas des problèmes de fonctionnalité.

0
Rafique Mohammed