2012-03-27 13 views
5

Io non sono un esperto di SOAP e WSDL, ma non ho il codice Perl che vorrei porta a R.in R, come posso chiamare un servizio web se ho una descrizione WSDL di esso? (Consumare web service)

Il codice Perl assomiglia a questo (da 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; 

Leggi le informazioni sui pacchetti rsoap e SSOAP ma non ha ricevuto alcuna informazione utile. Quello che mi serve è il pieno supporto, come chiamare il servizio e fornire librerie per analizzare l'output. Preferisco alcune librerie piuttosto che la codifica grezza. Sto bene con il pacchetto XML e non molto bene con RCurl. Ho ragione nel ritenere che non ci sia un supporto valido e corrente (mantenuto attivamente) in R per questo?

risposta

4

Acquista il pacchetto SSOAP su OmegaHat. È compatibile con S e R. Ha anche una funzione genSOAPClientInterface per generare le operazioni disponibili nel WSDL come funzioni R e generare le classi S4 associate per tutti i tipi di dati descritti nel WSDL. Sfrutta XML e RCurl (entrambi creati dallo stesso autore). Fornisce un directory full of examples e piuttosto utile PDF documentation.

Ho avuto qualche problema con l'utilizzo del mio WSDL (e sto ancora utilizzando il codice modificato per farlo funzionare), ma l'autore del pacchetto è estremamente utile e reattivo alle segnalazioni di bug, se si incontrano problemi.

+2

Il pacchetto è anche su GitHub: https://github.com/omegahat/SSOAP –

0

Ho provato a utilizzare il pacchetto SSOAP, ma sembra essere obsoleto con un banco di problemi, incluse dipendenze interrotte su altri pacchetti, conflitti nello spazio dei nomi e ricorsioni infinite. Viene anche rimosso da Cran insieme al pacchetto XMLSchmea da cui dipende.

Ho usato SOAP UI invece in combinazione con RCurl ed è stato un approccio molto più efficace. L'esempio di RCurl potrebbe essere trovato in un altro post: https://stackoverflow.com/a/34516458/5189780.

SOAP UI è uno strumento molto facile da utilizzare per test ed esplorazione di servizi Web SOAP. Fornisce il codice XML per le richieste SOAP. Questo XML può essere copiato e utilizzato nel codice R per formare un corpo di una richiesta RCurl.

Problemi correlati