Uncaught SoapFault exception: [Client] looks like we got no XML document in ...
Lei que este error ocurre cuando en la respuesta HTTP, hay caracteres extraños antes de <xml...; este no es el caso. De todas formas, hay un caracter 0A(line feed) al final del archivo que no deberia estar.
Este es el codigo del controller que estoy usando:
[application/modules/api/controllers/RealmController.php]
Código:
En el index,php, bootstrap.php y en el plugin que se carga desde el bootstrap, uso las coding guidelines de Zend y no tengo un line feed antes de ningun <?php tag y no uso el tag ?>.<?php class Api_RealmController extends Zend_Controller_Action { public function init() { // Disable layout $this->_helper->layout()->disableLayout(); // Disable ViewRenderer plugin $this->_helper->viewRenderer->setNoRender(); $this->getResponse()->clearBody(); } public function serveAction() { // Instantiate SOAP server $server = new Zend_Soap_Server('http://rhea.thaorius.net/nation/public/api/realm/wsdl'); // Set class $server->setClass('Test_Soap'); // Handle SOAP request $server->handle(); } public function wsdlAction() { // Instantiate auto discover $autodiscover = new Zend_Soap_AutoDiscover(); // Set class $autodiscover->setClass('Test_Soap'); // Handle WSDL request $autodiscover->handle() } } class Test_Soap { /** * This method takes 1 parameter and does shit with it. * * @param string $input * @return integer */ public function testfunc($input) { return 12; } }
Ahora, si hago una peticion directa a la accion wsdl firefox hace un render perfecto como XML que es mi salida. Lo mismo pasa con la acion serve, pero esta ultima muestra lo siguiente de salida:
Código:
Tambien se me ocurrio que el 'Invalid XML' era por el echo de que estaba llamando directamente al archivo, y por tanto, no estaba enviando una peticion SOAP; asi que escribi un pequeño cliente de prueba, que es el que me tira finalmente el error en cuestion:<SOAP-ENV:Envelope> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>0</faultcode> <faultstring>Invalid XML</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Código:
Alguna idea? estoy un poco desesperado a este punto. <?php $client = new SoapClient('http://rhea.thaorius.net/nation/public/api/realm/wsdl'); var_dump($client->testfunc("lalalala"));