• Publicidad

SOAP::Lite y arrays

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

SOAP::Lite y arrays

Notapor julito » 2009-02-20 07:37 @359

¡Hola! Tengo un problema, tengo un webservice java y un cliente en Perl; conecto con el soap y llamo a un método que me devuelve un array, el array lo recibo pero solo recibo la primera posición del array, y no sé qué hacer o cómo tengo qué hacer para recibirlo entero.
¡Muchas gracias! Un buen foro éste, ¡pena no encontrarlo antes!

¡Un saludo!
julito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-02-20 07:34 @357

Publicidad

Notapor explorer » 2009-02-20 09:54 @454

Bienvenido a los foros de Perl en Español, julito.

Estaría bien ver algo del código, por si se trata de un error de sintaxis.

Por otra parte, en la sección Array de SOAP::Data se comenta la forma de expresar en forma de SOAP XML las estructuras array de Perl. No sé si será esto lo que estás utilizando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor julito » 2009-02-23 04:00 @208

El código es muy simple... en Java tengo un array que lo devuelvo y en Perl lo recogería así...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$service = SOAP::Lite
->uri('http://paquete')
  -> proxy('http://localhost:8080/PruebaSaludo/services/Saludar')  
 ->devuelveArray();
 
 my @test_array2 = $service->result();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y no hay manera. Solo me coge la primera posición del array y no alcanzo a saber el porqué. ¡Un Saludo!
julito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-02-20 07:34 @357

Notapor explorer » 2009-02-23 04:22 @223

El problema parece entonces que está en la composición del array.

Mira aquí.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor julito » 2009-02-23 04:26 @227

Pero el array en Java ¿como sería entonces?

Así por ejemplo...

Sintáxis: [ Descargar ] [ Ocultar ]
Using java Syntax Highlighting
String[] array = new String[3];
                array[0]="Barcelona";
                array[1]="Madrid";
                array[2]="Bilbao";
                return array;
Coloreado en 0.012 segundos, usando GeSHi 1.0.8.4


Lo mando así y en Perl recibo el array como si solo tuviera una posición.
julito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-02-20 07:34 @357

Notapor explorer » 2009-02-23 06:11 @299

A ver aquí: un problema con la elección de la codificación de los datos complejos. Aunque se refiere a .Net, quizás se puede aplicar a Java.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor julito » 2009-02-23 11:19 @513

Buf no me entero, no me entero0o0o0.
julito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-02-20 07:34 @357

Notapor explorer » 2009-02-23 14:11 @632

Mira este hilo anterior. Hay un ejemplo publicado por mí en que recupero un hash.

Por lo que viene allí, sería hacer el cambio, en tu código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @test_array2 = @{$service->result()};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero... ¡esto es solo una especulación!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2009-02-23 14:40 @653

Este es un ejemplo de servidor y cliente, hecho en Perl, que recupera un hash.

Servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Servidor SOAP de sopa.
#
# Joaquin Ferrero. Febrero 2009.
#

package Sopera;

sub consulta_la_sopera {
    my $self = shift;
    my %ingredientes = (
        pasta => 'fideos',
        liquido => 'agua',
        extra => 'perejil',
    );
    my %extras = %{shift()};

    @ingredientes{keys %extras} = @extras{keys %extras};

    return \%ingredientes;
}

package main;
use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI
    -> dispatch_to('Sopera')
    -> handle()
    ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Cliente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Ejemplo de cliente que pide sopa, con SOAP

#use SOAP::Lite;
use SOAP::Lite +trace => [qw(debug)];

my $soap = SOAP::Lite->new(
    uri     => 'http://localhost/Sopera',
    proxy   => 'http://aprosi4.aprosi.net/~atari/cgi-bin/soap-server.pl',
);

my $response = $soap->consulta_la_sopera ({aderezo => 'sal'});

my %resultado = %{$response->result};

for my $item (keys %resultado) {
    print "$item : $resultado{$item}\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La salida es:
Código: Seleccionar todo
atari@aprosi4:~/public_html/cgi-bin$ ./soap-cliente.pl
SOAP::Transport::HTTP::Client::send_receive: POST http://aprosi4.aprosi.net/~atari/cgi-bin/soap-server.pl HTTP/1.1
Accept: text/xml
Accept: multipart/*
Accept: application/soap
Content-Length: 507
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://localhost/Sopera#consulta_la_sopera"

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><consulta_la_sopera xmlns="http://localhost/Sopera"><c-gensym3><aderezo xsi:type="xsd:string">sal</aderezo></c-gensym3></consulta_la_sopera></soap:Body></soap:Envelope>
SOAP::Transport::HTTP::Client::send_receive: HTTP/1.1 200 OK
Connection: close
Date: Mon, 23 Feb 2009 19:35:29 GMT
Server: Apache/2.0.55 (Debian) DAV/2 mod_jk2/2.0.4 PHP/4.3.4 mod_perl/2.0.2 Perl/v5.8.8
Vary: Accept-Encoding
Content-Length: 655
Content-Type: text/xml; charset=utf-8
Client-Date: Mon, 23 Feb 2009 19:35:30 GMT
Client-Peer: 172.26.0.3:80
Client-Response-Num: 1
SOAPServer: SOAP::Lite/Perl/0.67

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><consulta_la_soperaResponse xmlns="http://localhost/Sopera"><s-gensym3><liquido xsi:type="xsd:string">agua</liquido><pasta xsi:type="xsd:string">fideos</pasta><extra xsi:type="xsd:string">perejil</extra><aderezo xsi:type="xsd:string">sal</aderezo></s-gensym3></consulta_la_soperaResponse></soap:Body></soap:Envelope>
liquido : agua
pasta : fideos
extra : perejil
aderezo : sal


Y este es un ejemplo con array. Servidor:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

package Sopera;

sub consulta_la_sopera {
    my $self  = shift;
    my $largo = shift;

    @ingredientes = 1 .. $largo;

    return \@ingredientes;
}

package main;
use SOAP::Transport::HTTP;

SOAP::Transport::HTTP::CGI
    -> dispatch_to('Sopera')
    -> handle()
    ;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Cliente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
#
use SOAP::Lite;
#use SOAP::Lite +trace => [qw(debug)];

my $soap = SOAP::Lite->new(
    uri     => 'http://localhost/Sopera',
    proxy   => 'http://aprosi4.aprosi.net/~atari/cgi-bin/soap-server.pl',
);

my $response = $soap->consulta_la_sopera(10);

my @resultado = @{$response->result};

print "@resultado\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Y sale:
Código: Seleccionar todo
1 2 3 4 5 6 7 8 9 10
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor julito » 2009-03-26 10:21 @473

Gracias, chicos; al final lo hice así, para devolver un array entero método paramsout(), mientras que el método result() se limita a devolver el primero.
julito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2009-02-20 07:34 @357

Siguiente

Volver a Intermedio

¿Quién está conectado?

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

cron