2012-03-27 59 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请求的主体。