Hola, estoy recibiendo un error bastante feo de Zend_Soap:
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:
<?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;
}
}
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 ?>.
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:
<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>
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:
Código:
<?php
$client = new SoapClient('http://rhea.thaorius.net/nation/public/api/realm/wsdl');
var_dump($client->testfunc("lalalala"));
Alguna idea? estoy un poco desesperado a este punto.