Foros del Web » Programando para Internet » PHP »

modificar soap para pasar array a funcion desde perl a webservice en php

Estas en el tema de modificar soap para pasar array a funcion desde perl a webservice en php en el foro de PHP en Foros del Web. Hola estoy haciendo unas pruebas para mi tesis. El problema es el siguente: Tengo un Web Service hecho en PHP y quiero acceder a el ...
  #1 (permalink)  
Antiguo 06/03/2004, 16:42
 
Fecha de Ingreso: marzo-2002
Mensajes: 449
Antigüedad: 15 años, 8 meses
Puntos: 0
modificar soap para pasar array a funcion desde perl a webservice en php

Hola estoy haciendo unas pruebas para mi tesis.

El problema es el siguente:

Tengo un Web Service hecho en PHP y quiero acceder a el desde PERL.

Con tipos de datos sencillos como enteros y cadenas no tengo problemas , pero cuando quiero pasar un array desde perl a una funcion del Web Service no hallo como.

Estoy usando Nusoap en php y SOAP::Lite en Perl.

La pega es que no hayo como hacerle para que se modifique el mensaje soap que genera el Perl.

digamos tengo un cliente hecho en php y me genera la siguiente parte:

<SOAP-ENV:Body>
- <tns:sumarArrayEntero>
- <vector xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:int[3]">
<item xsi:type="xsd:int">9</item>
<item xsi:type="xsd:int">9</item>
<item xsi:type="xsd:int">9</item>
</vector>
</tns:sumarArrayEntero>
</SOAP-ENV:Body>

pero en Perl me genera:

<SOAP-ENV:Body>
<sumarArrayEntero xmlns="">
<vector xsi:type="SOAP-ENC:int">9</vector>
<vector xsi:type="SOAP-ENC:int">9</vector>
<vector xsi:type="SOAP-ENC:int">9</vector>
</sumarArrayEntero>
</SOAP-ENV:Body>

como ven se supone que le estoy mandando un array de tres elementos de tipo int pero en lugar de eso perl interpreta que estoy mandando 3 parametros de tipo int.

La invocacion que hago con perl es:

$invoca = $soap->sumarArrayEntero(SOAP::Data->name(vector=> (9,9))->type('SOAP-ENC:int'));

¿alguien sabe como puedo codificar/modificar el soap para que se haga como quiero?
  #2 (permalink)  
Antiguo 27/03/2004, 12:34
 
Fecha de Ingreso: marzo-2002
Mensajes: 449
Antigüedad: 15 años, 8 meses
Puntos: 0
Como veo que nadie respondio y dado que ya tengo algun tiempo con la respuesta lo voy a responder por si le sirve a alguien.

El chiste esta en serializar los datos usando la libreria SOAP::Data. Con esta tambien se puede serializar el nombre del metodo. Un metodo usado como en el siguiente caso sirve incluso para mandarlo llamar desde .NET o JAVA WASP.

my $method = SOAP::Data->name('helloWorld')
->attr({xmlns => 'http://tempuri.org/'});
my $params = SOAP::Data->name('message' => 'Rodolfo');
print $soap->call($method => $params)->result;

el caso concreto que les dije lo solucione como sigue, que funciona incluso con un provedor que sea .NET.

$method = SOAP::Data->name('sumarArrayEntero')
->attr({xmlns => 'http://tempuri.org/'});

@vars= (SOAP::Data->name('int')->value(9),SOAP::Data->name('int')->value(9),SOAP::Data->name('int')->value(9));

@params = SOAP::Data->name('vector' => \@vars);

print $soap->call($method => @params)->result;
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:27.