Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Acceso a Web Services usando SOAP y WSDL Responder al tema
Nuevo tema


Página 1 de 2  [ 24 mensajes ]  Ir a página 1, 2  Siguiente
 
Nota 2007-10-25 05:31 @272

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Acceso a Web Services usando SOAP y WSDL
Hola,

soy nuevo en Perl y tengo el problema de que intento hacer una llamada a un método que tengo a partir de un WSDL. Este método ha de recibir parámetros.

Una vez que he hecho la llamada a ese método imagino que tendré la respuesta de éste en un documento XML, que es el que quiero explorar (me baso en la experiencia que tengo sobre SOAP en PHP).

Para hacer eso, hago uso de SOAP::Lite y le indico dónde está el WSDL. Posteriormente llamo al método con los parámetros adecuados y luego le hago un print. El resultado es algo como HASH(0x48a4760). Mi código es el siguiente:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!perl -w

use SOAP::Lite;

my $soapclient = SOAP::Lite
                    ->service('https://... .WSDL');

my $result = $soapclient->Operation("5", "Hello", ... , "Bye");

print $result;


Tampoco tengo muy claro cómo puedo testear el éxito de la operación porque no sé qué métodos puedo invocar ( he probado con is_success, fault...y nada ). ¿Alguien me puede ayudar?

Gracias de antemano


Nota 2007-10-25 06:34 @315
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
$result está almacenando una referencia a un hash.

Recuerda: cuando trabajamos con XML (y con cualquier estructura de datos complicada en Perl), nuestro mayor aliado es el módulo Data::Dumper, para que nos diga qué es lo que realmente está dentro de nuestras variables.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
use Data::Dumper;
print Dumper($result);

_________________
JF^D Perl programming


Nota 2007-10-25 07:06 @338

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
¡Muchísimas gracias!

No sabes lo que es poder chequear lo que se obtiene al hacer el request.

Ahora, lo único que me pasa es que en el response, me dice que el string que tengo que pasar, tiene formato inválido. Es una cadena de caracteres, pero no sé si tanto los int, como doubles o floats han de pasarse entre comillas o por el contrario, esto solo ocurre en las cadenas.

¡Gracias de nuevo!


Nota 2007-10-25 10:56 @497

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Hola de nuevo.

Si os fijáis, yo tengo una serie de parámetros que los paso de la forma:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
my $result = $soapclient->Operation("5", "Hello", ... , "Bye");


y luego hago un print Dumper($result);. El problema que hay es que al parecer, los parámetros no se pasan bien, o al menos eso es lo que me dice el mensaje de respuesta almacenado en $result. No sé porqué es puesto que hago también he hecho un dumper del soapclient y no veo el problema, todos los datos están donde deberían estar. Me da la impresión que tiene algo que ver con los Namespaces o con el SoapAction.

¿Alguien me puede ayudar?

También me sería muy útil el cómo saber como puedo obtener el documento XML de la Request que se va a enviar al servidor. De esta manera, puedo ver en qué cosas esta fallando.

¡¡¡Muchas gracias otra vez!!!


Nota 2007-10-25 14:52 @661
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
¿Pero todos los parámetros son strings? En el anterior mensaje dices que quieres pasar enteros y números en punto flotante.

Lo que no recuerdo ahora es si hay que serializarlos o no.

En este foro hay ejemplos con SOAP. Usa el sistema de búsqueda.

_________________
JF^D Perl programming


Nota 2007-10-26 02:22 @140

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Hola Explorer,

hay variedad en los tipos de parametros. Hay enteros y strings. Lo que pasa es que yo primero los capturo y los guardo en variables y luego son esas variables las que paso como parametros en la llamada al web service.

Lo que ocurre es que de alguna manera se hace algo mal pues he hecho un Dumper de mi Soap Client y los datos estan bien metidos. Hay problemas con algo que no se que es. Yo creo que es de los Namespaces o de los SoapActions, pero ya no lo se.

El problema es que he buscado por muchisimos sitios de internet y la informacion que encuentro no me sirve. Por ejemplo en un sitio, cuando ejecutan el web service llaman ( con ->result ) y lo imprimen y lo he intentado y a mi me da error; cosas asi.

Si te da por buscar y encuentras algo te agradeceria que lo postearas.

Saludos y gracias!


Nota 2007-10-26 07:25 @351
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
¿Has mirado los hilos con SOAP de este web?

Creo recordar que se puede activar el modo debug para ver qué es lo que está haciendo.

Primero tienes que sacar el xml que se prepara con la petición. Luego ver qué es lo que entiende el servidor (después de haber leído la petición) y finalmente, sacar el xml con la respuesta del servidor.

_________________
JF^D Perl programming


Nota 2007-10-29 05:10 @257

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Explorer,

¿Podrías echarme un cable con la extracción del XML?

Si tengo tanto el request como el response sabré dónde está fallando mi programa.

El problema que tengo es que: primero, no sé cómo, a partir de los datos que yo supuestamente envió, puedo visualizar la petición en formato XML que es lo que me interesa; y segundo, después de ejecutar la llamada al servicio y almacenarla en una variable, poder extraer el documento XML de la respuesta del servidor. Necesito algún ejemplo porque no hago más que mirar en hilos y especificaciones y no me queda nada claro.

Gracias de antemano.

Saludos!


Nota 2007-10-29 08:48 @408
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Ver algo de tu código estaría bien...

El hilo que más se parece a tu caso es este.

_________________
JF^D Perl programming


Nota 2007-10-29 09:14 @426

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Ok, mi código no es más que esto:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
#!perl -w

use SOAP::Lite;                      
use Data::Dumper;
use XML::Dumper;

print "Content-Type: text/html\n\n";
print "<html>\n";
print "<pre>";
print "<head>\n";
print "<title>Using Perl & SOAP</title>\n";
print "</head>\n";
print "<body>\n";

my $soapClient = SOAP::Lite
        ->service('https://servidor/file.wsdl');

die "[Error]: Can't create the SOAP client. Reason: $!\n" unless $soapClient;

my $param1 = SOAP::Data->name('param1')->value(5)->type('int');
my $param2 = SOAP::Data->name('param2')->value('aaabbbccc')->type('string');
my $param3 = SOAP::Data->name('param3')->value(8)->type('int');

#Doing the  operation
my $result = $soapClient->Operation(
    $param1,
    $param2,
    $param3,
    );
   
my $fileResult = "C:/Result.xml";
my $xmlResult  = pl2xml( $result, $fileResult );

my $fileSOAP = "C:/SOAP.xml";
my $xmlSOAP = pl2xml( $soapClient , $fileSOAP );
   
print "<h1>Result</h1>\n";  
print Dumper($result);
print "\n<h1>Content of SOAP Client</h1>\n";
print Dumper($soapClient);
   
print "</body>\n";
print "</pre>";
print "</html>\n";


Teniendo esto, lo que me pasa es que no puedo acceder a los XML de solicitud / respuesta que "debiera crear" el SOAP (hablo de lo que ocurre por ejemplo en PHP). Entonces, cuando trato de ver los documentos XML que transformo, no veo más que las estructuras de datos puestas como XML, pero realmente no consigo tener nada útil, nada que se envía.

Por eso quería saber cómo puedo hacerlo, y ya puestos, diré que estoy usando XAMPP con el Add-on del Perl para desarrollar todo bajo un servidor Apache que alojo en localhost ( bajo Windows ). No sé si existe algún paquete mejor para llevar a cabo el desarrollo de estas tareas.

¡Muchas gracias!


Nota 2007-10-29 09:17 @428

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
Y claro, a mi lo que me pasa es que no tengo ningún XML salvo el WSDL. Y a partir de lo que obtengo quiero visualizar el XML, porque no me hace bien la operación.


Nota 2007-10-29 10:33 @481
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Activa el modo traza.

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
use SOAP::Lite +trace => [qw(debug)];

_________________
JF^D Perl programming


Nota 2007-10-29 10:40 @486

Perlero Nuevo
Registrado: 2007-10-25 04:33 @231
Mensajes: 12
He copiado la linea de codigo que has dicho.

Lo que pasa es que como la operacion se hace bien ( creo que es por eso ), no muestra nada en el navegador. Los ficheros tambien siguen igual. No ha cambiado nada.


Nota 2007-10-29 11:31 @521
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Debes ejecutarlo en local, para ver la traza...

O intentar poner
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
use CGI::Carp qw(carpout);
al principio de tu cgi. Deberás indicar luego carpout(\*STDERR).

_________________
JF^D Perl programming


Última edición por explorer el 2007-10-29 11:37 @526, editado 1 vez en total

Nota 2007-10-29 11:35 @524
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
También, mirando en los logs de errores, del servidor web...

_________________
JF^D Perl programming


Responder al tema  [ 24 mensajes ]  Ir a página 1, 2  Siguiente

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO