2012-03-27 60 views
5

我不是SOAP和WSDL的專家,但我有Perl代碼,我想移植到R.,如果我有WSDL描述,我該如何調用Web服務? (使用Web服務)

Perl代碼看起來像這樣(從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; 

閱讀有關rsoap和SSOAP軟件包的內容,但沒有得到任何好的信息。 我需要的是全面支持,比如調用服務並提供庫來解析輸出。我更喜歡一些庫,而不是原始編碼。我對XML包很好,對RCurl也不太好。我認爲R在這方面沒有好的和現在的(積極維護的)支持是正確的?

回答

4

簽出OmegaHat上的SSOAP包裝。它與S和R兼容。它甚至有一個genSOAPClientInterface函數用於在WSDL中生成可用操作作爲R函數,併爲WSDL中描述的所有數據類型生成關聯的S4類。它利用XML和RCurl(這兩者都是由同一作者創建的)。他提供了一個directory full of examples和相當有用的PDF documentation

我在使用WSDL時遇到了一些問題(並且仍然使用修改後的代碼來實現它),但是如果遇到問題,該軟件包的作者非常有幫助,並且對錯誤報告作出響應。

+2

該軟件包也位於GitHub上:https://github.com/omegahat/SSOAP – 2014-07-02 17:54:05

0

我試圖使用SSOAP包,但它似乎是相當過時的問題,包括對其他包的依賴關係破壞,名稱空間衝突和無限遞歸。它也從Cran中移除,並與它依賴的XMLSchmea軟件包一起移除。

我用SOAP UI代替與RCurl結合使用,這是更成功的方法。 RCurl示例可能在另一篇文章中找到:https://stackoverflow.com/a/34516458/5189780

SOAP UI是非常易於使用的工具,用於測試和探索SOAP Web服務。它爲SOAP請求提供XML代碼。這個XML可能被複制並用在R代碼中以形成RCurl請求的主體。