2007-10-25 05:31 @272 |
|
|
Ithilien
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: 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
|
2007-10-25 06:34 @315 |
|
|
 |
explorer
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. Using perl Syntax Highlighting use Data::Dumper;
print Dumper($result);
_________________ JF^D Perl programming
|
2007-10-25 07:06 @338 |
|
|
Ithilien
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!
|
2007-10-25 10:56 @497 |
|
|
Ithilien
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: 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!!!
|
2007-10-26 02:22 @140 |
|
|
Ithilien
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!
|
2007-10-29 05:10 @257 |
|
|
Ithilien
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!
|
2007-10-29 08:48 @408 |
|
|
 |
explorer
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
|
2007-10-29 09:14 @426 |
|
|
Ithilien
Perlero Nuevo
|
Registrado: 2007-10-25 04:33 @231 Mensajes: 12
|
|
|
|
Ok, mi código no es más que esto: 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!
|
2007-10-29 09:17 @428 |
|
|
Ithilien
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.
|
2007-10-29 10:33 @481 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10216
|
|
|
|
Activa el modo traza. Using perl Syntax Highlighting use SOAP::Lite +trace => [qw(debug)];
_________________ JF^D Perl programming
|
2007-10-29 10:40 @486 |
|
|
Ithilien
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.
|
2007-10-29 11:31 @521 |
|
|
 |
explorer
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 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
|
| 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
|
|
Socializa |
 |
|