• Publicidad

Acceso a Web Services usando SOAP y WSDL

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Acceso a Web Services usando SOAP y WSDL

Notapor Ithilien » 2007-10-25 05:31 @272

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:

Sintáxis: [ Descargar ] [ Ocultar ]
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;
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


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
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Publicidad

Notapor explorer » 2007-10-25 06:34 @315

$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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Data::Dumper;
print Dumper($result);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ithilien » 2007-10-25 07:06 @338

¡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!
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Notapor Ithilien » 2007-10-25 10:56 @497

Hola de nuevo.

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

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $result = $soapclient->Operation("5", "Hello", ... , "Bye");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


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!!!
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Notapor explorer » 2007-10-25 14:52 @661

¿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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ithilien » 2007-10-26 02:22 @140

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!
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Notapor explorer » 2007-10-26 07:25 @351

¿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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ithilien » 2007-10-29 05:10 @257

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!
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Notapor explorer » 2007-10-29 08:48 @408

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 & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Ithilien » 2007-10-29 09:14 @426

Ok, mi código no es más que esto:

Sintáxis: [ Descargar ] [ Ocultar ]
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";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


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!
Ithilien
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2007-10-25 04:33 @231

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados