2012-03-27 38 views
5

yo no soy un experto de SOAP y WSDL, pero tengo código Perl que me gustaría a puerto para R.en R, ¿cómo puedo llamar a un servicio web si tengo una descripción de WSDL? (Consumir servicios web)

El código Perl se parece a esto (de https://www.pharmgkb.org/resources/downloads_and_web_services.jsp):

use SOAP::Lite; 
import SOAP::Data 'type'; 

sub main { 
    my $argcount = scalar (@ARGV); 
    if ($argcount != 1) { 
    print "usage: diseases.pl <PharmGKB accession id>\n"; 
    exit -1; 
    } 

    # make a web services call to server 
    my $call = SOAP::Lite 
    -> readable (1) 
    -> uri('PharmGKBItem') 
    -> proxy('http://www.pharmgkb.org/services/PharmGKBItem') 
    -> searchDisease($ARGV[0]); 

    if ($call->fault) { 
    print $call->faultcode . ": " . $call->faultstring . "\n"; 
    } else { 
    my $result = $call->result; 

Las cosas leídas sobre los paquetes rsoap y SSOAP pero no obtuvieron ninguna buena información. Lo que necesito es soporte completo, como llamar al servicio y proporcionar bibliotecas para analizar el resultado. Prefiero algunas bibliotecas en lugar de codificación en bruto. Estoy bien con el paquete XML y no muy bien con RCurl. Estoy en lo correcto al pensar que no existe un soporte bueno y actual (mantenido activamente) en R para esto.

Respuesta

4

Verifique el paquete SSOAP en OmegaHat. Es compatible con S y R. Incluso tiene una función genSOAPClientInterface para generar las Operaciones disponibles en el WSDL como funciones R y generar las clases S4 asociadas para todos sus tipos de datos descritos en el WSDL. Aprovecha XML y RCurl (ambos creados por el mismo autor). Él proporciona un directory full of examples y bastante útil PDF documentation.

Tuve algunos problemas cuando usé mi WSDL (y sigo usando código modificado para que funcione), pero el autor del paquete es extremadamente útil y receptivo a los informes de errores, si tiene problemas.

+2

El paquete también está en GitHub: https://github.com/omegahat/SSOAP –

0

Intenté utilizar el paquete de SSOAP, pero parece estar bastante desactualizado con una serie de problemas, incluidas dependencias rotas en otros paquetes, conflictos de espacios de nombres y recursiones infinitas. También se elimina de Cran junto con el paquete XMLSchmea del que depende.

He usado SOAP UI en su lugar en combinación con RCurl y fue un acercamiento mucho más exitoso. El ejemplo de RCurl se puede encontrar en otra publicación: https://stackoverflow.com/a/34516458/5189780.

SOAP UI es una herramienta muy fácil de usar para probar y explorar servicios web SOAP. Proporciona código XML para solicitudes SOAP. Este XML podría copiarse y usarse en código R para formar un cuerpo de una solicitud RCurl.

Cuestiones relacionadas