consulta de web services

152 views
Skip to first unread message

Mariano Gonzalez

unread,
Nov 30, 2009, 6:04:15 PM11/30/09
to php...@googlegroups.com
Hola gente,

queria hacer el siguiente planteo: en el mismo archivo, quiero trabajar dos veces con una misma llamada a un web service


        case "consultar":
            require_once('lib/nusoap.php');
            $cliente = new nusoap_client('http://sanmartin/sanmartin/servicio.php');
            $aux = $_GET["iddispositivo"];
            $resultado = $cliente->call('consultar', array('id' => $aux));
            //$resultado = $cliente->call('consultar');
            print_r($resultado);
            //echo $resultado[0];
........
.......

        case "consultartodos":
            require_once('lib/nusoap.php');
            $cliente = new nusoap_client('http://sanmartin/sanmartin/serviciotodos.php');
            //$aux = $_GET["iddispositivo"];
            $resultado = $cliente->call('consultartodos',array(''));
            print_r($resultado);
            //$resultado = $cliente->call('consultar');
            //echo "EN CONSTRUCCION!!";
            break;

en la primera llamada me funciona bien, pero en la segunda no.

a alguien le paso lo mismo o tuvo una experiencia similar?

Saludos

Mariano

peraferrer

unread,
Dec 1, 2009, 7:50:52 AM12/1/09
to PHP Argentina
Hola Mariano .. cuando dices no funciona .. da un error o que sucede ?
para poder orientarme ..

Un comentario, puedes hacer la instancia del objeto $cliente antes del
switch, si es que lo vas a usar mas de una vez, escribes menos código
y te queda centralizado, luego puedes hacer tantos call a diversas
funciones del Web services como necesites.

Recomendación:
Si usas NuSoap, en la class nusoap_client existe un método (getProxy)
que puede crear class proxy, para utilizar un web services como se se
tratara de un objeto.

getProxy, retorna la definicion de un class con todos lo metodos del
web services, listos para usar, lo único que tienes que hacer es
instanciar el objeto e invocar sus métodos, es mas transparente la
implementación.

Si tiene el error a mano, quizas me pueda orientar ..

Mariano Gonzalez

unread,
Dec 1, 2009, 8:07:16 AM12/1/09
to php...@googlegroups.com
Hola peraferrer,

mira te cuento que estuve haciendo algo mas

        case "consultartodos":
            //require_once('lib/nusoap.php');
            $clientetodo = new nusoap_client('http://sanmartin/sanmartin/serviciotodos.php');
            $auxtodos = $_GET["iddispositivo"];
            $resultado = $clientetodo->call('consultartodos',array('id' => $auxtodos));
            print_r($resultado);

            // Check for errors
            $err = $clientetodo->getError();
            if ($err) {
            // Display the error
            echo '<p><b>Error: ' . $err . '</b></p>';

le agregue una funcion para ver que error estaba largando, y la respuesta fue la siguiente:

Error: XML error parsing SOAP payload on line 2: Empty document

Pero lo mas loco de todo es que en la primer llamada al web service, me funciona sin problemas.

Voy a probar lo que me escribiste ahi y te cuento como me fue.

Gracias por tu ayuda.

Saludos

2009/12/1 peraferrer <gpera...@gmail.com>

peraferrer

unread,
Dec 1, 2009, 10:58:22 AM12/1/09
to PHP Argentina
Perfecto .. una consulta el web services, lo creaste vos ?
porque puede ser que este mal armado el ComplexType ..

cualquier cosa, aca estamos ..

un abrazo

On 1 dic, 10:07, Mariano Gonzalez <magloco...@gmail.com> wrote:
> Hola peraferrer,
>
> mira te cuento que estuve haciendo algo mas
>
>         case "consultartodos":
>             //require_once('lib/nusoap.php');
>             $clientetodo = new nusoap_client('http://sanmartin/sanmartin/serviciotodos.php');
>             $auxtodos = $_GET["iddispositivo"];
>             $resultado = $clientetodo->call('consultartodos',array('id' =>
> $auxtodos));
>             print_r($resultado);
>
>             // Check for errors
>             $err = $clientetodo->getError();
>             if ($err) {
>             // Display the error
>             echo '<p><b>Error: ' . $err . '</b></p>';
>
> le agregue una funcion para ver que error estaba largando, y la respuesta
> fue la siguiente:
>
> Error: XML error parsing SOAP payload on line 2: Empty document
>
> Pero lo mas loco de todo es que en la primer llamada al web service, me
> funciona sin problemas.
>
> Voy a probar lo que me escribiste ahi y te cuento como me fue.
>
> Gracias por tu ayuda.
>
> Saludos
>
> 2009/12/1 peraferrer <gperafer...@gmail.com>
>
>
>
>
>
> > Hola Mariano .. cuando dices no funciona .. da un error o que sucede ?
> > para poder orientarme ..
>
> > Un comentario, puedes hacer la instancia del objeto $cliente antes del
> > switch, si es que lo vas a usar mas de una vez, escribes menos código
> > y te queda centralizado, luego puedes hacer tantos call a diversas
> > funciones del Web services como necesites.
>
> > Recomendación:
> > Si usas NuSoap, en la class nusoap_client existe un método (getProxy)
> > que puede crear class proxy, para utilizar un web services como se se
> > tratara de un objeto.
>
> > getProxy, retorna la definicion de un class con todos lo metodos del
> > web services, listos para usar, lo único que tienes que hacer es
> > instanciar el objeto e invocar sus métodos, es mas transparente la
> > implementación.
>
> > Si tiene el error a mano, quizas me pueda orientar ..
>
> > On 30 nov, 20:04, Mariano Gonzalez <magloco...@gmail.com> wrote:
> > > Hola gente,
>
> > > queria hacer el siguiente planteo: en el mismo archivo, quiero trabajar
> > dos
> > > veces con una misma llamada a un web service
>
> > >         case "consultar":
> > >             require_once('lib/nusoap.php');
> > >             $cliente = new nusoap_client('
> >http://sanmartin/sanmartin/servicio.php'<http://sanmartin/sanmartin/servicio.php%27>
> > );
> > >             $aux = $_GET["iddispositivo"];
> > >             $resultado = $cliente->call('consultar', array('id' =>
> > $aux));
> > >             //$resultado = $cliente->call('consultar');
> > >             print_r($resultado);
> > >             //echo $resultado[0];
> > > ........
> > > .......
>
> > >         case "consultartodos":
> > >             require_once('lib/nusoap.php');
> > >             $cliente = new nusoap_client('
> >http://sanmartin/sanmartin/serviciotodos.php'<http://sanmartin/sanmartin/serviciotodos.php%27>

Mariano Gonzalez

unread,
Dec 1, 2009, 6:32:32 PM12/1/09
to php...@googlegroups.com
Hola que tal? queria compartir una leccion aprendida con los web services usando php.

La leccion aprendida es que como nusoap trabaja con wsdl de manera automatica, tiene un formato para parsear los archivos xml que son predefinidos. En el lado del que responde el web service, habia estado haciendo unas pruebas locales y puse unos echo para probar si funcionaba localmente, pero resulta que nunca imagine que eso iba a generar una especia de basura que no la podia parsear el xml.

El mensaje de error era el siguiente "Error: XML error parsing SOAP payload on line 2: Empty document"

Espero que sirva, cualquier cosa me preguntan.

Saludos.

Mariano


2009/12/1 peraferrer <gpera...@gmail.com>

peraferrer

unread,
Dec 2, 2009, 6:56:28 AM12/2/09
to PHP Argentina
Si efectivamente, no puedes tener ninguna salida a pantalla en tus
scripts, cualquier salida a pantalla rompe el formato XML, puedes usar
las salidas a pantalla para probar tus funciones, pero luego debes
quitarlas.

buenisimo que se ha solucionado, pero te recomiendo trabajar con class
proxy.

un abrazo

On 1 dic, 20:32, Mariano Gonzalez <magloco...@gmail.com> wrote:
> Hola que tal? queria compartir una leccion aprendida con los web services
> usando php.
>
> La leccion aprendida es que como nusoap trabaja con wsdl de manera
> automatica, tiene un formato para parsear los archivos xml que son
> predefinidos. En el lado del que responde el web service, habia estado
> haciendo unas pruebas locales y puse unos echo para probar si funcionaba
> localmente, pero resulta que nunca imagine que eso iba a generar una especia
> de basura que no la podia parsear el xml.
>
> El mensaje de error era el siguiente "Error: XML error parsing SOAP payload
> on line 2: Empty document"
>
> Espero que sirva, cualquier cosa me preguntan.
>
> Saludos.
>
> Mariano
>
> 2009/12/1 peraferrer <gperafer...@gmail.com>
>
>
>
>
>
> > Perfecto .. una consulta el web services, lo creaste vos ?
> > porque puede ser que este mal armado el ComplexType ..
>
> > cualquier cosa, aca estamos ..
>
> > un abrazo
>
> > On 1 dic, 10:07, Mariano Gonzalez <magloco...@gmail.com> wrote:
> > > Hola peraferrer,
>
> > > mira te cuento que estuve haciendo algo mas
>
> > >         case "consultartodos":
> > >             //require_once('lib/nusoap.php');
> > >             $clientetodo = new nusoap_client('
> >http://sanmartin/sanmartin/serviciotodos.php'<http://sanmartin/sanmartin/serviciotodos.php%27>

Peter Acosta

unread,
Dec 2, 2009, 9:18:55 AM12/2/09
to php...@googlegroups.com
Mariano, te hago una pregunta:

Por que seguís usando nusoap, por que no utilizaste la clase soapClient de PHP 5 ?

 

Por ejemplo :

 

ini_set('soap.wsdl_cache_enabled', '0');

$wsdl = 'http://lo_que_sea/webservice/lo_que_sea?wsdl'

 

$mi_cliente = new SoapClient($wsdl );

$mis_metodos=$mi_cliente ->__getFunctions();

 

print "<pre>"; print_r($mis_metodos); print "</pre>";

 

 

Probalo y fijate, me parece mejor que usar unas librerías,  fueron desarrolladas para PHP 4, pero PHP 5 soporta soap de forma nativa.

 

Me gustaría saber tu opinión,

 

Saludos

 

Peter

Reply all
Reply to author
Forward
0 new messages