Hola amigos,
despues de pelearme dias enteros intentando devolver un array de datos en php utilizando NUSOAP me doy por vencido. la unica manera que he podido hacer para devolverlo es serializando los datos y luego desserializandolos.
No se cual puede ser el problema, pero me estaba dando todo el tiempo que no se podia serializar el resultado en la libreria NUSOAP, por eso decidi serializarlo yo, y en vez de devolver estructuras de datos complejas devolver siempre un string, pero no me termina de convencer.
Cual es el problema de no poder obtener arrays en NUSOAP?
Tengo todo el codigo exactamente igual que en los manuales pero no funciona.
Por lo que he podido depurar el erro me sucede en el fichero nusoap.php en el metodo "serializeType" cuando intentaq serializar un array asociativo.
Mi objeto a devolver es de este tipo: (esto es del lado servidor)
function obtenerNombres() {
$result = array();
$result [] = array('nombre' => 'Manuel');
$result [] = array('nombre' => 'Pepe');
$result [] = array('nombre' => 'Antonio');
return $result;
}
$server->wsdl->addComplexType(
'nombreWS',
'complexType',
'struct',
'all',
'',
array('nombre'=>array('name'=>'nombre','type'=>'xs d:string')));
$server->wsdl->addComplexType(
'nombresWS',
'complexType',
'array',
'',
'http://schemas.xmlsoap.org/soap/encoding/:Array',
array(),
array(array('ref'=>'http://schemas.xmlsoap.org/soap/encoding/:arrayType','wsdl:arrayType'=>'tns:nombreWS[]')),
'tns:nombreWS');
$server->register('obtenerNombres',
array(),
array('return'=>'tns:nombresWS'),
'urn:'.$ns,
'urn:'.$ns.'#obtenerNombres',
'rpc',
'encoded',
'obtener el nombre');
Al intentar serializar el resultado en el fichero nusoap.php da error en el siguiente bloque de codigo. El erorr que salta es "Array to string conversion in " en la linea 6132.
foreach($value as $k => $v) {
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
//if (strpos($typeDef['arrayType'], ':') ) {
if (!in_array($typeDef['arrayType'],$this->typemap['http://www.w3.org/2001/XMLSchema'])) {
$contents .= $this->serializeType('item', $typeDef['arrayType'], $v, $use);
} else {
$contents .= $this->serialize_val($v, 'item', $typeDef['arrayType'], null, $this->XMLSchemaVersion, false, $use);
}
}
Al ser un array de arrays mis datos devueltos, al hacer aqui el foreach da error al acceder a la variable $v ya que es un array pero parece que aqui se espera un string o un tipo basico.
Es un error de la libreria de nusoap?