2012-03-27 5 views
5

Ich bin kein Experte von SOAP und WSDL, aber ich habe Perl-Code, Ich mag würde den Hafen R.in R, wie kann ich einen Webdienst aufrufen, wenn ich eine WSDL-Beschreibung davon habe? (Verbrauchen Web-Service)

Das Perl-Code sieht wie folgt aus (von 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; 

Die Dinge über Rsoap und SSOAP-Pakete gelesen, aber keine schönen Informationen erhalten. Was ich brauche, ist volle Unterstützung, wie den Dienst aufrufen und Bibliotheken bereitstellen, um die Ausgabe zu parsen. Ich bevorzuge einige Bibliotheken anstatt rohe Codierung. Ich bin gut mit XML-Paket und nicht sehr gut mit RCurl. Ich habe Recht damit, dass es keine gute und aktuelle (aktiv gepflegte) Unterstützung in R dafür gibt?

Antwort

4

Das SSOAP Paket auf OmegaHat auschecken. Es ist kompatibel mit S und R. Es hat sogar eine genSOAPClientInterface Funktion zum Generieren der verfügbaren Operationen in der WSDL als R-Funktionen und Generieren der zugehörigen S4-Klassen für alle Ihre Datentypen, die in der WSDL beschrieben sind. Es nutzt XML und RCurl (die beide vom selben Autor erstellt wurden). Er bietet eine directory full of examples und ziemlich nützlich PDF documentation.

Ich hatte ein paar Probleme mit der Verwendung meiner WSDL (und benutze immer noch modifizierten Code, um es zum Laufen zu bringen), aber der Autor des Pakets ist extrem hilfreich und reagiert auf Fehlerberichte, wenn Sie Probleme auftreten.

+2

Das Paket ist auch auf GitHub: https://github.com/omegahat/SSOAP –

0

Ich habe versucht, SSOAP-Paket zu verwenden, aber es scheint ziemlich veraltet mit Bank von Problemen, einschließlich gebrochene Abhängigkeiten von anderen Paketen, Namespace-Konflikten und unendlichen Rekursionen. Es wird auch zusammen mit dem XMLSchmea-Paket, von dem es abhängt, aus Cran entfernt.

Ich habe SOAP UI stattdessen in Kombination mit RCurl verwendet und es war viel erfolgreicher Ansatz. RCurl Beispiel könnte in einem anderen Beitrag gefunden werden: https://stackoverflow.com/a/34516458/5189780.

SOAP UI ist ein sehr einfach zu bedienendes Tool zum Testen und Erforschen von SOAP-Webdiensten. Es stellt XML-Code für SOAP-Anfragen bereit. Dieser XML-Code könnte kopiert und in R-Code verwendet werden, um den Rumpf einer RCurl-Anfrage zu bilden.

Verwandte Themen