Come sbarazzarsi dell'exception "Uncaught SoapFault: sembra che non abbiamo documento XML in …" errore

Sto cercando di sviluppare la logica di business per un sito dinamico utilizzando nusoap dal lato server (perché ho bisogno di wsdls, e l'estensione SOAP di PHP non può generare wsdls) e l'estensione SOAP PHP sul lato client.

Tuttavia, non riesco a get le funzioni di login e getRole corrette. Quando provo a invocare il client, ottengo il seguente messaggio

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

Wsdl esiste sul lato server e il client lo legge (quando inserisco l'URL errato per wsdl, ottengo un errore).

Qualcuno può aiutare ??

Sembra che il tuo client abbia ricevuto un codice XML non valido: il WSDL stesso o la risposta restituita dal server. Prova a ricall il client con l'opzione di trace impostata su TRUE e controlla l'invio / ricezione XML effettivo tramite i __getLastRequest() e __getLastResponse() .

Ho appena avuto un problema simile; il mio servizio mi ha fatto emergere alcuni dati di debug. Ho rimosso tutte le linee di echo e ha funzionato bene.

Ho lo stesso problema e ho risolto questo:

Il file SOAP del server in php ha codificato utf8 con BOM, facendo sì che apache restituisca il segno BOM (3 byte) prima della risposta xml.

Codifica il tuo server soap di file php con utf8 WITH OUT BOM mark.

Ignacio Gutierrez Torrero

È probabile che ci siano degli spazi bianchi finali alla fine della tua class SOAPServer. Si prega di dare un'occhiata al seguente post sul blog per maggiori informazioni: http://arnekroeger.blogspot.com/2011/02/php-soap-error-looks-like-we-got-no-xml.html

Nel mio caso, questo errore è apparso quando ho inserito uno script con righe vuote dopo l'etichetta "?>".

Elimina queste righe risolve il problema

Non dimenticare di usare il block try / catch:

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

Basta usare trim () per te args.

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

Alcune volte una distinta base può generare caratteri extra che creano questo tipo di problema.

Per rilevare se esiste una BOM UTF, vedere questo link .

Ho lo stesso problema.Il mio problema risolto impostando always_populate_raw_post_data su -1 su php.ini.

Lo scopro aggiungendo "trace" => 1, "exceptions" => 1 sulle opzioni e usa try catch e ottieni __getLastRequest() e __getLastResponse()

Il seguente potrebbe essere il problema per alcuni utenti. perché ci sono passato.

Per l'ultima versione di nuSoap, il seguito risolverà il tuo problema:

TROVA il codice qui sotto in nusoap.php

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

nella row 6132 o qualcosa intorno a questo no.

E COMMENTI

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

Dal momento che è solo per scopi di debug. quindi non preoccuparti di problemi di funzionalità.

Ho un modo per risolvere questo problema. Questa non è una soluzione carina, ma funziona …

Come non posso fare alcun cambiamento nel mio server Mantis, ho deciso di fare questo …

Per prima cosa devo mettere a tacere SoapFault:

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

Secondo, ho notato che c'erano tre caratteri di controllo finali all'inizio della mia string, quindi l'ho rimosso:

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

Terzo, devo mettere "pe>" alla fine della mia string, perché era incompleto.