Muchas gracias por contestarme ALVLIN, es un error nuevo, pero ya se cual es el problema, el servidor no me devuelve los datos complejos bien, no se de ke puede ser, por mucho ke lo miro no encuentro el error.
Dejo aki el trozo de codigo ke causa el error:
Código PHP:
//ESTA FUNCION ES PARA DEPURAR ERRORES
function dep($str){
$arc = fopen("c:\\log.txt","a+");
fwrite($arc,$str."\n\r");
fclose($arc);
}
dep("Inicio");
// Incluimos las clases de SOAP:
require("lib/nusoap.php");
// Creamos el objeto del servidor:
$servidor = new soap_server();
$namespace="http://localhost/services/servicioweb.php";
// Generación del WSDL
$servidor->debug_flag=false;
$servidor->configureWSDL('ApplicationServices',$namespace);
$servidor->wsdl->schemaTargetNamespace = $namespace;
// Agregamos un tipo de dato complejo
$servidor->wsdl->addComplexType(
"datosArticulos",
"complexType",
"struct",
"all",
"",
array(
"id" => array("name"=>"id", "type"=>"xsd:int"),
"descripcion" => array("name"=>"descripcion", "type"=>"xsd:string"),
"precio" => array("name"=>"precio", "type"=>"xsd:double"),
"seccion" => array("name"=>"seccion", "type"=>"xsd:int"),
"tipoarticulo" => array("name"=>"tipoarticulo", "type"=>"xsd:int"))
);
//Lista de Articulos
$servidor->wsdl->addComplexType(
"listaArticulos",
"complexType",
"array",
"",
"SOAP-ENC:Array",
array(),
array(
array("ref" => "SOAP-ENC:arrayType",
"wsdl:arrayType" => "tns:datosArticulos[]")),
"tns:datosArticulos");
// Registramos la función que queremos exponer como servicio web
dep("Registramos funciones...");
$servidor->register("ObtenerArticulos", array("seccion" => "xsd:int","tarticulo" => "xsd:int","tienda" => "xsd:int","inicial" => "xsd:int","cantidad" => "xsd:int","ordenar" => "xsd:string"), array("return" => "tns:listaArticulos"), $namespace);
$servidor->register("NumArticulosTotales", array("seccion" => "xsd:int","tarticulo" => "xsd:int","tienda" => "xsd:int"), array("return" => "xsd:int"), $namespace);
//LA FUNCION NUMARTICULOS ME VA BIEN LA KE ME FALLA ES LA DE OBTENER ARTICULOS
function ObtenerArticulos($seccion, $tarticulo, $tienda, $inicial, $cantidad, $ordenar){
dep("Obteniendo articulos...");
dep("Tipo articulo:... ".$ordenar);
if (is_int($seccion) && is_int($tarticulo)){
$DBlink = @mysql_connect("localhost", "root", "");
if($tienda==-1){
$sql="SELECT a.articuloID as id, a.descripcion as descripcion, a.precio as precio,
s.descripcion as seccion, t.descripcion as tipoarticulo
FROM articulo a, seccion s, tipoarticulo t
WHERE a.tipoArticuloID = t.tipoArticuloID
AND s.seccionID = a.seccionID
AND a.seccionID =". $seccion."
AND a.tipoArticuloID = ".$tarticulo." ORDER BY precio ".$ordenar." LIMIT ".$inicial.",".$cantidad;
}else{
$sql="SELECT a.articuloID as id, a.descripcion as descripcion, a.precio as precio,
s.descripcion as seccion, t.descripcion as tipoarticulo
FROM articulo a, seccion s, tipoarticulo t
WHERE a.tipoArticuloID = t.tipoArticuloID
AND s.seccionID = a.seccionID
AND a.seccionID =".$seccion."
AND a.tipoArticuloID =".$tarticulo."
AND a.tiendaID = ".$tienda." ORDER BY precio ".$ordenar." LIMIT ".$inicial.",".$cantidad;
}
$DBresult = @mysql_db_query('proyecto_s',$sql);
/*// comprobación simple de error
if (!$DBresult) {
return new soap_fault('Server', '', 'Error Interno del Servidor.');
}*/
mysql_close($DBlink);
// Imprimiendo los resultados
$i =0;
dep("Recorremos tiendas...");
while($array = mysql_fetch_array($DBresult, MYSQL_ASSOC)) {
dep("Procesando tienda...".$array['descripcion']);
$resultado[$i]= array(
'id' => $array['id'],
'descripcion' => $array['descripcion'],
'precio' => $array['precio'],
'seccion' => $array['seccion'],
'tipoarticulo' => $array['tipoarticulo']
);
$i++;
}
// retornamos los datos
//return mysql_fetch_array($DBresult, MYSQL_ASSOC);
dep("Resultado...".$resultado[0]['descripcion']);
//NO ME DEVUELVE LOS DATOS ANTERIORES
//return new soapval('return','tns:ListaArticulos',$resultado);
return $resultado;
}
// aceptamos solo enterpos
else {
return new soap_fault('Client', '', 'Los parametro a pasar solo deben ser enteros.');
}
}
........
// Enviar el resultado como una respuesta SOAP por HTTP
if (isset($HTTP_RAW_POST_DATA)) {
$input = $HTTP_RAW_POST_DATA;
}
else {
$input = implode("\r\n", file('php://input'));
}
$servidor->service($input);
exit();